]> code.delx.au - gnu-emacs/blob - test/automated/info-xref.el
Merge from emacs-24; up to 2012-12-30T19:34:25Z!jan.h.d@swipnet.se
[gnu-emacs] / test / automated / info-xref.el
1 ;;; info-xref.el --- tests for info-xref.el
2
3 ;; Copyright (C) 2013 Free Software Foundation, Inc.
4
5 ;; This file is part of GNU Emacs.
6
7 ;; GNU Emacs is free software: you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation, either version 3 of the License, or
10 ;; (at your option) any later version.
11
12 ;; GNU Emacs is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
16
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
19
20 ;;; Commentary:
21
22 ;;; Code:
23
24 (require 'ert)
25 (require 'info-xref)
26
27 (defun info-xref-test-internal (body result)
28 "Body of a basic info-xref ert test.
29 BODY is a string from an info buffer.
30 RESULT is a list (NBAD NGOOD NUNAVAIL)."
31 (get-buffer-create info-xref-output-buffer)
32 (setq info-xref-xfile-alist nil)
33 (require 'info)
34 (let ((Info-directory-list '("."))
35 Info-additional-directory-list)
36 (info-xref-with-output
37 (with-temp-buffer
38 (insert body)
39 (info-xref-check-buffer))))
40 (should (equal result (list info-xref-bad info-xref-good info-xref-unavail)))
41 ;; If there was an error, we can leave this around.
42 (kill-buffer info-xref-output-buffer))
43
44 (ert-deftest info-xref-test-node-crossref ()
45 "Test parsing of @xref{node,crossref,,manual} with Texinfo 4/5."
46 (info-xref-test-internal "
47 *Note crossref: (manual-foo)node. Texinfo 4/5 format with crossref.
48 " '(0 0 1)))
49
50 (ert-deftest info-xref-test-node-4 ()
51 "Test parsing of @xref{node,,,manual} with Texinfo 4."
52 (info-xref-test-internal "
53 *Note node: (manual-foo)node. Texinfo 4 format with no crossref.
54 " '(0 0 1)))
55
56 (ert-deftest info-xref-test-node-5 ()
57 "Test parsing of @xref{node,,,manual} with Texinfo 5."
58 (info-xref-test-internal "
59 *Note (manual-foo)node::. Texinfo 5 format with no crossref.
60 " '(0 0 1)))
61
62 ;; TODO Easier to have static data files in the repo?
63 (defun info-xref-test-write-file (file body)
64 "Write BODY to texi FILE."
65 (with-temp-buffer
66 (insert "\
67 \input texinfo
68 @setfilename "
69 (format "%s.info\n" (file-name-sans-extension file))
70 "\
71 @settitle test
72
73 @ifnottex
74 @node Top
75 @top test
76 @end ifnottex
77
78 @menu
79 * Chapter One::
80 @end menu
81
82 @node Chapter One
83 @chapter Chapter One
84
85 text.
86
87 "
88 body
89 "\
90 @bye
91 "
92 )
93 (write-region nil nil file nil 'silent))
94 (should (equal 0 (call-process "makeinfo" file))))
95
96 (ert-deftest info-xref-test-makeinfo ()
97 "Test that info-xref can parse basic makeinfo output."
98 :expected-result (if (executable-find "makeinfo") :passed :failed)
99 (should (executable-find "makeinfo"))
100 (let ((tempfile (make-temp-file "info-xref-test" nil ".texi"))
101 (tempfile2 (make-temp-file "info-xref-test2" nil ".texi"))
102 (errflag t))
103 (unwind-protect
104 (progn
105 ;; tempfile contains xrefs to various things, including tempfile2.
106 (info-xref-test-write-file
107 tempfile
108 (concat "\
109 @xref{nodename,,,missing,Missing Manual}.
110
111 @xref{nodename,crossref,title,missing,Missing Manual}.
112
113 @xref{Chapter One}.
114
115 @xref{Chapter One,Something}.
116
117 "
118 (format "@xref{Chapter One,,,%s,Present Manual}.\n"
119 (file-name-sans-extension (file-name-nondirectory
120 tempfile2)))))
121 ;; Something for tempfile to xref to.
122 (info-xref-test-write-file tempfile2 "")
123 (require 'info)
124 (save-window-excursion
125 (let ((Info-directory-list
126 (list
127 (or (file-name-directory tempfile) ".")))
128 Info-additional-directory-list)
129 (info-xref-check (format "%s.info" (file-name-sans-extension
130 tempfile))))
131 (should (equal (list info-xref-bad info-xref-good
132 info-xref-unavail)
133 '(0 1 2)))
134 (setq errflag nil)
135 ;; If there was an error, we can leave this around.
136 (kill-buffer info-xref-output-buffer)))
137 ;; Useful diagnostic in case of problems.
138 (if errflag
139 (with-temp-buffer
140 (call-process "makeinfo" nil t nil "--version")
141 (message "%s" (buffer-string))))
142 (mapc 'delete-file (list tempfile tempfile2
143 (format "%s.info" (file-name-sans-extension
144 tempfile))
145 (format "%s.info" (file-name-sans-extension
146 tempfile2)))))))
147
148 ;;; info-xref.el ends here