
* test/lisp/abbrev-tests.el (read-write-abbrev-file-test) (read-write-abbrev-file-test-with-props) (abbrev-edit-save-to-file-test): * test/lisp/auth-source-tests.el (auth-source-test-netrc-create-secret) (auth-source-delete): * test/lisp/autoinsert-tests.el (autoinsert-tests-auto-insert-file): * test/lisp/bookmark-tests.el (with-bookmark-test-save-load): * test/lisp/buff-menu-tests.el (buff-menu-24962): * test/lisp/calendar/icalendar-tests.el (icalendar-tests--do-test-export): * test/lisp/calendar/todo-mode-tests.el (with-todo-test): * test/lisp/dired-tests.el (dired-test-bug27243-01, dired-test-bug27243-02) (dired-test-bug27243-03, dired-test-bug27631) (dired-test-bug27968, dired-test-with-temp-dirs): * test/lisp/dired-x-tests.el (dired-test-bug25942): * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--with-temp-file): * test/lisp/emacs-lisp/check-declare-tests.el (check-declare-tests-scan) (check-declare-tests-verify-mismatch): * test/lisp/emacs-lisp/edebug-tests.el (edebug-tests-with-normal-env): * test/lisp/emacs-lisp/package-tests.el (with-package-test) (package-test-signed): * test/lisp/emacs-lisp/testcover-tests.el (testcover-tests-markup-region) (testcover-tests-run-test-case): * test/lisp/emulation/viper-tests.el (viper-test-undo-kmacro): * test/lisp/epg-tests.el (with-epg-tests): * test/lisp/eshell/em-hist-tests.el (eshell-write-readonly-history): * test/lisp/eshell/em-ls-tests.el (em-ls-test-bug27631): * test/lisp/ffap-tests.el (ffap-tests-25243): * test/lisp/files-tests.el (files-tests-bug-18141) (files-tests-read-file-in-~, files-tests-make-directory) (files-tests-copy-directory, files-tests-executable-find) (files-tests-dont-rewrite-precious-files) (files-tests--save-some-buffers): * test/lisp/ls-lisp-tests.el (ls-lisp-test-bug27631): * test/lisp/mail/uudecode-tests.el (uudecode-tests-decode-region-internal) (uudecode-tests-decode-region-external): * test/lisp/net/browse-url-tests.el (browse-url-tests-delete-temp-file): * test/lisp/progmodes/elisp-mode-tests.el (xref--case-insensitive): * test/lisp/progmodes/etags-tests.el (etags-buffer-local-tags-table-list): * test/lisp/progmodes/flymake-tests.el (ruby-backend): * test/lisp/progmodes/python-tests.el (python-tests-with-temp-file): * test/lisp/progmodes/sql-tests.el (with-sql-test-connect-harness): * test/lisp/saveplace-tests.el (saveplace-test-save-place-to-alist/file) (saveplace-test-forget-unreadable-files) (saveplace-test-place-alist-to-file): * test/lisp/so-long-tests/spelling-tests.el: * test/lisp/textmodes/reftex-tests.el (reftex-locate-bibliography-files) (reftex-parse-from-file-test): * test/lisp/thumbs-tests.el (thumbs-tests-thumbsdir/create-if-missing): * test/lisp/vc/vc-bzr-tests.el (vc-bzr-test-bug9726) (vc-bzr-test-bug9781, vc-bzr-test-faulty-bzr-autoloads): * test/lisp/vc/diff-mode-tests.el (diff-mode-test-ignore-trailing-dashes): * test/lisp/vc/ediff-ptch-tests.el (ediff-ptch-test-bug26084): * test/lisp/wdired-tests.el (wdired-test-bug32173-01) (wdired-test-bug32173-02, wdired-test-symlink-name) (wdired-test-unfinished-edit-01, wdired-test-bug34915) (wdired-test-bug39280): * test/src/buffer-tests.el (test-kill-buffer-auto-save-default): * test/src/filelock-tests.el (filelock-tests--fixture): * test/src/inotify-tests.el (inotify-file-watch-simple): * test/src/undo-tests.el (undo-test-file-modified): Prefer 'ert-with-temp-(directory|file)' to using 'make-temp-file' directly. In some cases, this is just cleanup, but in several cases this fixes bugs where an error would have lead to us not cleaning up.
221 lines
8.2 KiB
EmacsLisp
221 lines
8.2 KiB
EmacsLisp
;;; reftex-tests.el --- Test suite for reftex. -*- lexical-binding: t -*-
|
|
|
|
;; Copyright (C) 2013-2021 Free Software Foundation, Inc.
|
|
|
|
;; Author: Rüdiger Sonderfeld <ruediger@c-plusplus.de>
|
|
;; Keywords: internal
|
|
;; Human-Keywords: internal
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
;;; Code:
|
|
|
|
(require 'ert)
|
|
(require 'ert-x)
|
|
|
|
;;; reftex
|
|
(require 'reftex)
|
|
|
|
;;; reftex-parse
|
|
(require 'reftex-parse)
|
|
|
|
(ert-deftest reftex-locate-bibliography-files ()
|
|
"Test `reftex-locate-bibliography-files'."
|
|
(ert-with-temp-directory temp-dir
|
|
(let ((files '("ref1.bib" "ref2.bib"))
|
|
(test '(("\\addbibresource{ref1.bib}\n" . ("ref1.bib"))
|
|
("\\\\addbibresource[label=x]{ref2.bib}\\n" . ("ref2.bib"))
|
|
("\\begin{document}\n\\bibliographystyle{plain}\n
|
|
\\bibliography{ref1,ref2}\n\\end{document}" . ("ref1.bib" "ref2.bib"))))
|
|
(reftex-bibliography-commands
|
|
;; Default value: See reftex-vars.el `reftex-bibliography-commands'
|
|
'("bibliography" "nobibliography" "setupbibtex\\[.*?database="
|
|
"addbibresource")))
|
|
(with-temp-buffer
|
|
(insert "test\n")
|
|
(mapc
|
|
(lambda (file)
|
|
(write-region (point-min) (point-max) (expand-file-name file
|
|
temp-dir)))
|
|
files))
|
|
(mapc
|
|
(lambda (data)
|
|
(with-temp-buffer
|
|
(insert (car data))
|
|
(let ((res (mapcar #'file-name-nondirectory
|
|
(reftex-locate-bibliography-files temp-dir))))
|
|
(should (equal res (cdr data))))))
|
|
test))))
|
|
|
|
(ert-deftest reftex-what-environment-test ()
|
|
"Test `reftex-what-environment'."
|
|
(with-temp-buffer
|
|
(insert "\\begin{equation}\n x=y^2\n")
|
|
(let ((pt (point))
|
|
pt2)
|
|
(insert "\\end{equation}\n")
|
|
(goto-char pt)
|
|
|
|
(should (equal (reftex-what-environment 1) '("equation" . 1)))
|
|
(should (equal (reftex-what-environment t) '(("equation" . 1))))
|
|
|
|
(insert "\\begin{something}\nxxx")
|
|
(setq pt2 (point))
|
|
(insert "\\end{something}")
|
|
(goto-char pt2)
|
|
(should (equal (reftex-what-environment 1) `("something" . ,pt)))
|
|
(should (equal (reftex-what-environment t) `(("something" . ,pt)
|
|
("equation" . 1))))
|
|
(should (equal (reftex-what-environment t pt) `(("something" . ,pt))))
|
|
(should (equal (reftex-what-environment '("equation"))
|
|
'("equation" . 1))))))
|
|
|
|
(ert-deftest reftex-roman-number-test ()
|
|
"Test `reftex-roman-number'."
|
|
(let ((hindu-arabic '(1 2 4 9 14 1050))
|
|
(roman '("I" "II" "IV" "IX" "XIV" "ML")))
|
|
(while (and hindu-arabic roman)
|
|
(should (string= (reftex-roman-number (car hindu-arabic))
|
|
(car roman)))
|
|
(pop roman)
|
|
(pop hindu-arabic))))
|
|
|
|
(ert-deftest reftex-parse-from-file-test ()
|
|
"Test `reftex-parse-from-file'."
|
|
;; Use file-truename to convert 8+3 aliases in $TEMP value on
|
|
;; MS-Windows into their long file-name equivalents, which is
|
|
;; necessary for the 'equal' and 'string=' comparisons below. This
|
|
;; also resolves any symlinks, which cannot be bad for the same
|
|
;; reason. (An alternative solution would be to use file-equal-p,
|
|
;; but I'm too lazy to do that, as one of the tests compares a
|
|
;; list.)
|
|
(ert-with-temp-directory temp-dir
|
|
(let* ((tex-file (expand-file-name "test.tex" temp-dir))
|
|
(bib-file (expand-file-name "ref.bib" temp-dir)))
|
|
(with-temp-buffer
|
|
(insert
|
|
"\\begin{document}
|
|
\\section{test}\\label{sec:test}
|
|
\\subsection{subtest}
|
|
|
|
\\begin{align*}\\label{eq:foo}
|
|
x &= y^2
|
|
\\end{align*}
|
|
|
|
\\bibliographystyle{plain}
|
|
\\bibliography{ref}
|
|
\\end{document}")
|
|
(write-region (point-min) (point-max) tex-file))
|
|
(with-temp-buffer
|
|
(insert "test\n")
|
|
(write-region (point-min) (point-max) bib-file))
|
|
(reftex-ensure-compiled-variables)
|
|
(let ((parsed (reftex-parse-from-file tex-file nil temp-dir)))
|
|
(should (equal (car parsed) `(eof ,tex-file)))
|
|
(pop parsed)
|
|
(while parsed
|
|
(let ((entry (pop parsed)))
|
|
(cond
|
|
((eq (car entry) 'bib)
|
|
(should (string= (cadr entry) bib-file)))
|
|
((eq (car entry) 'toc)) ;; ...
|
|
((string= (car entry) "eq:foo"))
|
|
((string= (car entry) "sec:test"))
|
|
((eq (car entry) 'bof)
|
|
(should (string= (cadr entry) tex-file))
|
|
(should (null parsed)))
|
|
(t (should-not t)))))))))
|
|
|
|
;;; reftex-cite
|
|
(require 'reftex-cite)
|
|
|
|
(ert-deftest reftex-parse-bibtex-entry-test ()
|
|
"Test `reftex-parse-bibtex-entry'."
|
|
(let ((entry "@Book{Stallman12,
|
|
author = {Richard Stallman\net al.},
|
|
title = {The Emacs Editor},
|
|
publisher = {GNU Press},
|
|
year = 2012,
|
|
edition = {17th},
|
|
note = {Updated for Emacs Version 24.2}
|
|
}")
|
|
(check (lambda (parsed)
|
|
(should (string= (reftex-get-bib-field "&key" parsed)
|
|
"Stallman12"))
|
|
(should (string= (reftex-get-bib-field "&type" parsed)
|
|
"book"))
|
|
(should (string= (reftex-get-bib-field "author" parsed)
|
|
"Richard Stallman et al."))
|
|
(should (string= (reftex-get-bib-field "title" parsed)
|
|
"The Emacs Editor"))
|
|
(should (string= (reftex-get-bib-field "publisher" parsed)
|
|
"GNU Press"))
|
|
(should (string= (reftex-get-bib-field "year" parsed)
|
|
"2012"))
|
|
(should (string= (reftex-get-bib-field "edition" parsed)
|
|
"17th"))
|
|
(should (string= (reftex-get-bib-field "note" parsed)
|
|
"Updated for Emacs Version 24.2")))))
|
|
(funcall check (reftex-parse-bibtex-entry entry))
|
|
(with-temp-buffer
|
|
(insert entry)
|
|
(funcall check (reftex-parse-bibtex-entry nil (point-min)
|
|
(point-max))))))
|
|
|
|
(ert-deftest reftex-get-bib-names-test ()
|
|
"Test `reftex-get-bib-names'."
|
|
(let ((entry (reftex-parse-bibtex-entry "@article{Foo123,
|
|
author = {Jane Roe and\tJohn Doe and W. Public},
|
|
}")))
|
|
(should (equal (reftex-get-bib-names "author" entry)
|
|
'("Jane Roe" "John Doe" "Public"))))
|
|
(let ((entry (reftex-parse-bibtex-entry "@article{Foo123,
|
|
editor = {Jane Roe and\tJohn Doe and W. Public},
|
|
}")))
|
|
(should (equal (reftex-get-bib-names "author" entry)
|
|
'("Jane Roe" "John Doe" "Public")))))
|
|
|
|
(ert-deftest reftex-format-citation-test ()
|
|
"Test `reftex-format-citation'."
|
|
(let ((entry (reftex-parse-bibtex-entry
|
|
"@article{Foo13,
|
|
author = {Jane Roe and John Doe and Jane Q. Taxpayer},
|
|
title = {Some Article},
|
|
journal = {Some Journal},
|
|
year = 2013,
|
|
pages = {1--333}
|
|
}")))
|
|
(should (string= (reftex-format-citation entry nil) "\\cite{Foo13}"))
|
|
(should (string= (reftex-format-citation entry "%l:%A:%y:%t %j %P %a")
|
|
"Foo13:Jane Roe:2013:Some Article Some Journal 1 Jane Roe, John Doe \\& Jane Taxpayer"))))
|
|
|
|
|
|
;;; Autoload tests
|
|
|
|
;; Test to check whether reftex autoloading mechanisms are working
|
|
;; correctly.
|
|
(ert-deftest reftex-autoload-auc ()
|
|
"Tests to see whether reftex-auc has been autoloaded"
|
|
(should
|
|
(fboundp 'reftex-arg-label))
|
|
(should
|
|
(autoloadp
|
|
(symbol-function
|
|
'reftex-arg-label))))
|
|
|
|
|
|
(provide 'reftex-tests)
|
|
;;; reftex-tests.el ends here.
|