* test/automated/package-x-test.el: Change the commentary.
[bpt/emacs.git] / test / automated / info-xref.el
CommitLineData
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.
29BODY is a string from an info buffer.
30RESULT 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
85text.
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