Commit | Line | Data |
---|---|---|
f2136e1e GM |
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 |