123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- ;;; test-org-footnote.el --- Tests for org-footnote.el
- ;; Copyright (C) 2012 Nicolas Goaziou
- ;; Author: Nicolas Goaziou <n.goaziou at gmail dot com>
- ;; This program 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.
- ;; This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
- ;;; Code:
- (ert-deftest test-org-footnote/normalize-in-org ()
- "Test specifications for `org-footnote-normalize' in an Org buffer."
- ;; 1. With a non-nil `org-footnote-section'.
- (let ((org-footnote-section "Footnotes")
- (org-blank-before-new-entry '((heading . auto))))
- ;; 1.1. Normalize each type of footnote: standard, labelled,
- ;; numbered, inline, anonymous.
- (org-test-with-temp-text
- "Paragraph[fn:1][fn:label][1][fn:inline:Inline][fn::Anonymous]
- * Footnotes
- \[fn:1] Standard
- \[fn:label] Labelled
- \[1] Numbered"
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "Paragraph[1][2][3][4][5]
- * Footnotes
- \[1] Standard
- \[2] Labelled
- \[3] Numbered
- \[4] Inline
- \[5] Anonymous
- ")))
- ;; 1.2. When no footnote section is present, create it. Follow
- ;; `org-blank-before-new-entry' specifications when doing so.
- (org-test-with-temp-text "Paragraph[fn:1]\n\n[fn:1] Definition"
- (org-footnote-normalize)
- (should (equal (buffer-string)
- "Paragraph[1]\n\n* Footnotes\n\n[1] Definition")))
- (org-test-with-temp-text "Paragraph[fn:1]\n* Head1\n[fn:1] Definition"
- (let ((org-blank-before-new-entry '((heading))))
- (org-footnote-normalize))
- (should (equal (buffer-string)
- "Paragraph[1]\n* Head1\n* Footnotes\n\n[1] Definition")))
- ;; 1.3. When the footnote section is misplaced, move it at the end
- ;; of the buffer.
- (org-test-with-temp-text "* Head1
- Body[fn:1]
- * Footnotes
- \[fn:1] Definition 1
- * Head2"
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "* Head1
- Body[1]
- * Head2
- * Footnotes
- \[1] Definition 1"))))
- ;; 2. With a nil `org-footnote-section'.
- (let ((org-footnote-section nil))
- ;; 2.1. Normalize each type of footnote: standard, labelled,
- ;; numbered, inline, anonymous.
- (org-test-with-temp-text
- "Paragraph[fn:1][fn:label][1][fn:inline:Inline][fn::Anonymous]
- \[fn:1] Standard
- \[fn:label] Labelled
- \[1] Numbered"
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "Paragraph[1][2][3][4][5]
- \[1] Standard
- \[2] Labelled
- \[3] Numbered
- \[4] Inline
- \[5] Anonymous
- ")))
- ;; 2.2. Put each footnote definition at the end of the section
- ;; containing its first reference.
- (org-test-with-temp-text
- "* Head 1
- Text[fn:1:Def1]
- * Head 2
- Text[fn:1]
- * Head 3
- Text[fn:2:Def2]"
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "* Head 1
- Text[1]
- \[1] Def1
- * Head 2
- Text[1]
- * Head 3
- Text[2]
- \[2] Def2
- ")))))
- (ert-deftest test-org-footnote/normalize-outside-org ()
- "Test `org-footnote-normalize' specifications for buffers not in Org mode."
- ;; 1. In a non-Org buffer, footnotes definitions are always put at
- ;; its end.
- (let ((org-footnote-tag-for-non-org-mode-files nil))
- (with-temp-buffer
- (insert "Paragraph[fn:1][fn:label][1][fn:inline:Inline][fn::Anonymous]
- \[fn:1] Standard
- \[fn:label] Labelled
- \[1] Numbered
- Some additional text.")
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "Paragraph[1][2][3][4][5]
- Some additional text.
- \[1] Standard
- \[2] Labelled
- \[3] Numbered
- \[4] Inline
- \[5] Anonymous"))))
- ;; 2. With a special tag.
- (let ((org-footnote-tag-for-non-org-mode-files "Footnotes:"))
- ;; 2.1. The tag must be inserted before the footnotes, separated
- ;; from the rest of the text with a blank line.
- (with-temp-buffer
- (insert "Paragraph[fn:1][fn::Anonymous]
- \[fn:1] Standard
- Some additional text.")
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "Paragraph[1][2]
- Some additional text.
- Footnotes:
- \[1] Standard
- \[2] Anonymous")))
- ;; 2.2. Any tag already inserted in the buffer should be removed
- ;; prior to footnotes insertion.
- (with-temp-buffer
- (insert "Text[fn:1]
- Footnotes:
- Additional text.
- Footnotes:
- \[fn:1] Definition")
- (org-footnote-normalize)
- (should
- (equal (buffer-string)
- "Text[1]
- Additional text.
- Footnotes:
- \[1] Definition"))))
- ;; 3. As an exception, in `message-mode' buffer, if a signature is
- ;; present, insert footnotes before it.n
- (let ((org-footnote-tag-for-non-org-mode-files nil))
- (with-temp-buffer
- (insert "Body[fn::def]
- --
- Fake signature
- --
- Signature")
- ;; Mimic `message-mode'.
- (let ((major-mode 'message-mode)
- (message-cite-prefix-regexp "\\([ ]*[_.[:word:]]+>+\\|[ ]*[]>|]\\)+")
- (message-signature-separator "^-- $"))
- (flet ((message-point-in-header-p nil nil))
- (org-footnote-normalize)))
- (should
- (equal (buffer-string)
- "Body[1]
- --
- Fake signature
- \[1] def
- --
- Signature")))))
- (ert-deftest test-org-footnote/sort ()
- "Test footnotes definitions sorting."
- (let ((org-footnote-section nil))
- (org-test-with-temp-text
- "Text[fn:1][fn::inline][fn:2][fn:label]
- \[fn:label] C
- \[fn:1] A
- \[fn:2] B"
- (org-footnote-normalize 'sort)
- (should
- (equal (buffer-string)
- "Text[fn:1][fn::inline][fn:2][fn:label]
- \[fn:1] A
- \[fn:2] B
- \[fn:label] C
- ")))))
- (provide 'test-org-footnote)
- ;;; test-org-footnote.el ends here
|