diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-09-25 16:15:16 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-09-25 16:15:16 -0400 |
commit | 650c20f1ca4e07591a727e1cfcc74b3363d15985 (patch) | |
tree | 85d11f6437cde22f410c25e0e5f71a3131ebd07d /test/lisp/textmodes/reftex-tests.el | |
parent | 8869332684c2302b5ba1ead4568bbc7ba1c0183e (diff) | |
parent | 4b85ae6a24380fb67a3315eaec9233f17a872473 (diff) | |
download | emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.tar.gz emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.tar.bz2 emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.zip |
Merge 'master' into noverlay
Diffstat (limited to 'test/lisp/textmodes/reftex-tests.el')
-rw-r--r-- | test/lisp/textmodes/reftex-tests.el | 446 |
1 files changed, 374 insertions, 72 deletions
diff --git a/test/lisp/textmodes/reftex-tests.el b/test/lisp/textmodes/reftex-tests.el index 0b67b2eb5b9..67e01004755 100644 --- a/test/lisp/textmodes/reftex-tests.el +++ b/test/lisp/textmodes/reftex-tests.el @@ -1,6 +1,6 @@ ;;; reftex-tests.el --- Test suite for reftex. -*- lexical-binding: t -*- -;; Copyright (C) 2013-2017 Free Software Foundation, Inc. +;; Copyright (C) 2013-2022 Free Software Foundation, Inc. ;; Author: RĂ¼diger Sonderfeld <ruediger@c-plusplus.de> ;; Keywords: internal @@ -24,6 +24,7 @@ ;;; Code: (require 'ert) +(require 'ert-x) ;;; reftex (require 'reftex) @@ -33,32 +34,31 @@ (ert-deftest reftex-locate-bibliography-files () "Test `reftex-locate-bibliography-files'." - (let ((temp-dir (make-temp-file "reftex-bib" 'dir)) - (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 + (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") + (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 (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) - (delete-directory temp-dir 'recursive))) + (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'." @@ -102,12 +102,12 @@ ;; 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.) - (let* ((temp-dir (file-truename (make-temp-file "reftex-parse" 'dir))) - (tex-file (expand-file-name "test.tex" temp-dir)) - (bib-file (expand-file-name "ref.bib" temp-dir))) - (with-temp-buffer - (insert -"\\begin{document} + (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} @@ -118,27 +118,26 @@ \\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))))) - (delete-directory temp-dir 'recursive)))) + (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) @@ -153,24 +152,23 @@ edition = {17th}, note = {Updated for Emacs Version 24.2} }") - (check (function - (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")))))) + (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) @@ -192,8 +190,8 @@ (ert-deftest reftex-format-citation-test () "Test `reftex-format-citation'." - (let ((entry (reftex-parse-bibtex-entry -"@article{Foo13, + (let ((entry (reftex-parse-bibtex-entry "\ +@article{Foo13, author = {Jane Roe and John Doe and Jane Q. Taxpayer}, title = {Some Article}, journal = {Some Journal}, @@ -204,6 +202,310 @@ (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")))) +(ert-deftest reftex-all-used-citation-keys () + "Test `reftex-all-used-citation-keys'. +Take the cite macros provided by biblatex package as reference." + (ert-with-temp-directory temp-dir + (let ((tex-file (expand-file-name "keys.tex" temp-dir)) + keys) + (with-temp-buffer + (insert "\ +\\documentclass{article} +\\usepackage{biblatex} +\\begin{document} + +Standard commands: +\\cite[pre][pos]{cite:2022} +\\Cite[pos]{Cite:2022} +\\parencite{parencite:2022} +\\Parencite[pre][]{Parencite:2022} +\\footcite[][]{footcite:2022} +\\footcitetext[pre][pos]{footcitetext:2022} + +Style specific commands: +\\textcite{textcite:2022} +\\Textcite[pos]{Textcite:2022} +\\smartcite[pre][pos]{smartcite:2022} +\\Smartcite[pre][]{Smartcite:2022} +\\cite*[pre][pos]{cite*:2022} +\\parencite*[][]{parencite*:2022} + +Style independent commands: +\\autocite[pre][pos]{autocite:2022} +\\autocite*[pos]{autocite*:2022} +\\Autocite[pre][]{Autocite:2022} +\\Autocite*{Autocite*:2022} + +Text commands: +\\citeauthor[pre][pos]{citeauthor:2022} +\\citeauthor*[pre][]{citeauthor*:2022} +\\Citeauthor[pos]{Citeauthor:2022} +\\Citeauthor*{Citeauthor*:2022} +\\citetitle[][]{citetitle:2022} +\\citetitle*[pre][pos]{citetitle*:2022} +\\citeyear[pre][pos]{citeyear:2022} +\\citeyear*[pre][pos]{citeyear*:2022} +\\citedate[pre][pos]{citedate:2022} +\\citedate*[pre][pos]{citedate*:2022} +\\citeurl[pre][pos]{citeurl:2022} + +Special commands: +\\nocite{nocite:2022} +\\fullcite[pos]{fullcite:2022} +\\footfullcite[][]{fullfootcite:2022} +``volcite'' macros have different number of args. +\\volcite{2}{volcite:2022} +\\Volcite[pre]{1}{Volcite:2022} +\\pvolcite{1}[pg]{pvolcite:2022} +\\Pvolcite[pre]{2}[pg]{Pvolcite:2022} +\\fvolcite[pre]{3}[pg]{fvolcite:2022} +\\ftvolcite[pre]{3}[pg]{ftvolcite:2022} +\\svolcite[pre]{2}[pg]{svolcite:2022} +\\Svolcite[pre]{4}[pg]{Svolcite:2022} +\\tvolcite[pre]{5}[pg]{tvolcite:2022} +\\Tvolcite[pre]{2}[pg]{Tvolcite:2022} +\\avolcite[pre]{3}[pg]{avolcite:2022} +\\Avolcite[pre]{1}[pg]{Avolcite:2022} +\\Notecite[pre]{Notecite:2022} +\\pnotecite[pre]{pnotecite:2022} +\\Pnotecite[pre]{Pnotecite:2022} +\\fnotecite[pre]{fnotecite:2022} + +Natbib compatibility commands: +\\citet{citet:2022} +\\citet*[pre][pos]{citet*:2022} +\\citep[pre][pos]{citep:2022} +\\citep*[pos]{citep*:2022} +\\citealt[pre][]{citealt:2022} +\\citealt*[][]{citealt*:2022} +\\citealp[pre][pos]{citealp:2022} +\\citealp*{citealp*:2022} +\\Citet[pre][pos]{Citet:2022} +\\Citet*[pre][pos]{Citet*:2022} +\\Citep[pre][pos]{Citep:2022} +\\Citep*[pre][pos]{Citep*:2022} + +Test for bug#56655: +There was a few \\% of increase in budget \\Citep*{bug:56655}. + +And this should be % \\cite{ignored}. +\\end{document}") + (write-region (point-min) (point-max) tex-file)) + (find-file tex-file) + (setq keys (reftex-all-used-citation-keys)) + (should (equal (sort keys #'string<) + (sort '(;; Standard commands: + "cite:2022" "Cite:2022" + "parencite:2022" "Parencite:2022" + "footcite:2022" "footcitetext:2022" + ;; Style specific commands: + "textcite:2022" "Textcite:2022" + "smartcite:2022" "Smartcite:2022" + "cite*:2022" "parencite*:2022" + ;; Style independent commands: + "autocite:2022" "autocite*:2022" + "Autocite:2022" "Autocite*:2022" + ;; Text commands + "citeauthor:2022" "citeauthor*:2022" + "Citeauthor:2022" "Citeauthor*:2022" + "citetitle:2022" "citetitle*:2022" + "citeyear:2022" "citeyear*:2022" + "citedate:2022" "citedate*:2022" + "citeurl:2022" + ;; Special commands: + "nocite:2022" "fullcite:2022" + "fullfootcite:2022" + "volcite:2022" "Volcite:2022" + "pvolcite:2022" "Pvolcite:2022" + "fvolcite:2022" "ftvolcite:2022" + "svolcite:2022" "Svolcite:2022" + "tvolcite:2022" "Tvolcite:2022" + "avolcite:2022" "Avolcite:2022" + "Notecite:2022" "pnotecite:2022" + "Pnotecite:2022" "fnotecite:2022" + ;; Natbib compatibility commands: + "citet:2022" "citet*:2022" + "citep:2022" "citep*:2022" + "citealt:2022" "citealt*:2022" + "citealp:2022" "citealp*:2022" + "Citet:2022" "Citet*:2022" + "Citep:2022" "Citep*:2022" + "bug:56655") + #'string<))) + (kill-buffer (file-name-nondirectory tex-file))))) + +(ert-deftest reftex-renumber-simple-labels () + "Test `reftex-renumber-simple-labels'. +The function must recognize labels defined with macros like +\\label and the ones as key=value option in optional or mandatory +argument of other macros or environments." + (ert-with-temp-directory temp-dir + (let ((tex-file (expand-file-name "renumber.tex" temp-dir))) + (with-temp-buffer + (insert "\ +\\documentclass{article} +\\usepackage{tcolorbox} +\\tcbuselibrary{theorems} +\\usepackage{fancyvrb} +\\usepackage{listings} + +\\begin{document} + +This is with tcolorbox package: +\\begin{problem}[% + colback = white , + colframe = red!50!black , + fonttitle = \\bfseries , + description delimiters = {\\flqq}{\\frqq} , + label = {problem:2}]{Prove RH2}{} + Problem +\\end{problem} + +This is with vanilla \\LaTeX: +\\begin{equation} + \\label{eq:2} + 2 +\\end{equation} +By \\eqref{eq:2} and \\ref{problem:2} + +This is with tcolorbox package: +\\begin{problem}[% + colback=white, + colframe=red!50!black, + fonttitle=\\bfseries, + theorem label supplement={hypertarget={XYZ-##1}}, + theorem full label supplement={code={\\marginnote{##1}}}, + label={problem:1}]{Prove RH1}{} + Problem +\\end{problem} + +This is with vanilla \\LaTeX: +\\begin{equation} + \\label{eq:1} + 1 +\\end{equation} + +\\Cref{problem:1} and \\pageref{eq:1}. + +\\begin{problem}[label={problem:6}]{Some Problem}{} + Problem +\\end{problem} + +\\Ref{problem:6}. + +This is with fancyvrb package: +\\begin{Verbatim}[reflabel={lst:6}] +Some Verb Content +\\end{Verbatim} + +\\pageref{lst:6} + +This is with listings package: +\\begin{lstlisting}[language=elisp,caption=Some Caption,label={lst:3}] +(car (cons 1 '(2))) +\\end{lstlisting} + +\\ref{lst:3} + +\\end{document}") + (write-region (point-min) (point-max) tex-file)) + ;; The label prefix must be known to RefTeX: + (add-to-list 'reftex-label-alist + '("problem" ?p "problem:" "~\\ref{%s}" + nil nil nil) + t) + (add-to-list 'reftex-label-alist + '("Verbatim" ?l "lst:" "~\\ref{%s}" + nil nil nil) + t) + ;; The environments must be known to RefTeX otherwise the labels + ;; aren't parsed correctly: + (add-to-list 'reftex-label-regexps + (concat "\\\\begin{\\(?:problem\\|Verbatim\\)}" + "\\[[^][]*" + "\\(?:{[^}{]*" + "\\(?:{[^}{]*" + "\\(?:{[^}{]*}[^}{]*\\)*" + "}[^}{]*\\)*" + "}[^][]*\\)*" + "\\<\\(?:ref\\)?label[[:space:]]*=[[:space:]]*" + "{?\\(?1:[^] ,}\r\n\t%]+\\)" + "[^]]*\\]") + t) + ;; Always run this after changing `reftex-label-regexps': + (reftex-compile-variables) + (find-file tex-file) + ;; Silence the user query: + (cl-letf (((symbol-function 'yes-or-no-p) #'always)) + (reftex-renumber-simple-labels)) + (should (string= (buffer-string) + "\ +\\documentclass{article} +\\usepackage{tcolorbox} +\\tcbuselibrary{theorems} +\\usepackage{fancyvrb} +\\usepackage{listings} + +\\begin{document} + +This is with tcolorbox package: +\\begin{problem}[% + colback = white , + colframe = red!50!black , + fonttitle = \\bfseries , + description delimiters = {\\flqq}{\\frqq} , + label = {problem:1}]{Prove RH2}{} + Problem +\\end{problem} + +This is with vanilla \\LaTeX: +\\begin{equation} + \\label{eq:1} + 2 +\\end{equation} +By \\eqref{eq:1} and \\ref{problem:1} + +This is with tcolorbox package: +\\begin{problem}[% + colback=white, + colframe=red!50!black, + fonttitle=\\bfseries, + theorem label supplement={hypertarget={XYZ-##1}}, + theorem full label supplement={code={\\marginnote{##1}}}, + label={problem:2}]{Prove RH1}{} + Problem +\\end{problem} + +This is with vanilla \\LaTeX: +\\begin{equation} + \\label{eq:2} + 1 +\\end{equation} + +\\Cref{problem:2} and \\pageref{eq:2}. + +\\begin{problem}[label={problem:3}]{Some Problem}{} + Problem +\\end{problem} + +\\Ref{problem:3}. + +This is with fancyvrb package: +\\begin{Verbatim}[reflabel={lst:1}] +Some Verb Content +\\end{Verbatim} + +\\pageref{lst:1} + +This is with listings package: +\\begin{lstlisting}[language=elisp,caption=Some Caption,label={lst:2}] +(car (cons 1 '(2))) +\\end{lstlisting} + +\\ref{lst:2} + +\\end{document}")) + (kill-buffer (file-name-nondirectory tex-file))))) ;;; Autoload tests |