org-element: Add tests
This commit is contained in:
parent
8e52d1d7f0
commit
41b2a2e766
|
@ -24,11 +24,18 @@
|
|||
(unless (featurep 'org-element)
|
||||
(signal 'missing-test-dependency "org-element"))
|
||||
|
||||
(defun org-test-parse-and-interpret (text)
|
||||
"Parse TEXT as Org syntax and interpret it.
|
||||
Return interpreted string."
|
||||
(with-temp-buffer
|
||||
(org-mode)
|
||||
(insert text)
|
||||
(org-element-interpret-data (org-element-parse-buffer))))
|
||||
|
||||
|
||||
|
||||
;;; Tests:
|
||||
|
||||
|
||||
|
||||
;;;; Headlines
|
||||
|
||||
|
@ -405,21 +412,384 @@ Paragraph \\alpha."
|
|||
'(org-data nil (paragraph (:caption (("long") "short")) "Paragraph")))
|
||||
"#+CAPTION[short]: long\nParagraph\n")))
|
||||
|
||||
(ert-deftest test-org-element/interpret-elements ()
|
||||
"Test interpretation of elements and objects."
|
||||
(let ((parse-and-interpret
|
||||
(function
|
||||
;; Parse TEXT string in an Org buffer and transcode it back
|
||||
;; to Org syntax.
|
||||
(lambda (text)
|
||||
(with-temp-buffer
|
||||
(org-mode)
|
||||
(insert text)
|
||||
(org-element-interpret-data (org-element-parse-buffer)))))))
|
||||
;; Verse blocks.
|
||||
(equal (funcall parse-and-interpret "#+BEGIN_VERSE\nTest\n#+END_VERSE")
|
||||
(ert-deftest test-org-element/center-block-interpreter ()
|
||||
"Test center block interpreter."
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "#+BEGIN_CENTER\nTest\n#+END_CENTER")
|
||||
"#+BEGIN_CENTER\nTest\n#+END_CENTER\n")))
|
||||
|
||||
(ert-deftest test-org-element/drawer-interpreter ()
|
||||
"Test drawer interpreter."
|
||||
(should
|
||||
(equal (let ((org-drawers '("TEST")))
|
||||
(org-test-parse-and-interpret ":TEST:\nTest\n:END:"))
|
||||
":TEST:\nTest\n:END:\n")))
|
||||
|
||||
(ert-deftest test-org-element/dynamic-block-interpreter ()
|
||||
"Test dynamic block interpreter."
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret
|
||||
"#+BEGIN: myblock :parameter value1\nTest\n#+END:")
|
||||
"#+BEGIN: myblock :parameter value1\nTest\n#+END:\n")))
|
||||
|
||||
(ert-deftest test-org-element/footnote-definition-interpreter ()
|
||||
"Test footnote definition interpreter."
|
||||
(should (equal (org-test-parse-and-interpret "[fn:1] Test") "[fn:1] Test\n")))
|
||||
|
||||
(ert-deftest test-org-element/headline-interpreter ()
|
||||
"Test headline and section interpreters."
|
||||
;; 1. Standard test.
|
||||
(should (equal (org-test-parse-and-interpret "* Headline") "* Headline\n"))
|
||||
;; 2. With TODO keywords.
|
||||
(should
|
||||
(equal (let ((org-todo-keywords '((sequence "TODO" "DONE"))))
|
||||
(org-test-parse-and-interpret "* TODO Headline"))
|
||||
"* TODO Headline\n"))
|
||||
;; 3. With tags...
|
||||
;;
|
||||
;; 3.1. ... and a positive `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column 20))
|
||||
(org-test-parse-and-interpret "* Headline :tag:"))
|
||||
"* Headline :tag:\n"))
|
||||
;; 3.2. ... and a negative `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column -20))
|
||||
(org-test-parse-and-interpret "* Headline :tag:"))
|
||||
"* Headline :tag:\n"))
|
||||
;; 3.3. ... and a null `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column 0))
|
||||
(org-test-parse-and-interpret "* Headline :tag:"))
|
||||
"* Headline :tag:\n"))
|
||||
;; 4. With priority cookie.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "* [#B] Headline")
|
||||
"* [#B] Headline\n"))
|
||||
;; 5. With comment keyword.
|
||||
(should
|
||||
(equal (let ((org-comment-string "COMMENT"))
|
||||
(org-test-parse-and-interpret "* COMMENT Headline"))
|
||||
"* COMMENT Headline\n"))
|
||||
;; 6. With quote section.
|
||||
(should
|
||||
(equal (let ((org-quote-string "QUOTE"))
|
||||
(org-test-parse-and-interpret "* QUOTE Headline"))
|
||||
"* QUOTE Headline\n"))
|
||||
;; 7. Keep same number of blank lines before body.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret
|
||||
"* Headline\n\n\nText after two blank lines.")
|
||||
"* Headline\n\n\nText after two blank lines.\n")))
|
||||
|
||||
(ert-deftest test-org-element/inlinetask-interpreter ()
|
||||
"Test inlinetask interpretation."
|
||||
(when (featurep 'org-inlinetask)
|
||||
(let ((org-inlinetask-min-level 15))
|
||||
;; 1. Regular inlinetask.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"*************** Task\nTest\n*************** END")
|
||||
"*************** Task\nTest\n*************** END\n"))
|
||||
;; 2. Degenerate inlinetask.
|
||||
(should (equal (org-test-parse-and-interpret "*************** Task")
|
||||
"*************** Task\n"))
|
||||
;; 3. Prefer degenerate form when there are no contents.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"*************** Task\n*************** END")
|
||||
"*************** Task\n"))
|
||||
;; 4. With TODO keywords.
|
||||
(should
|
||||
(equal (let ((org-todo-keywords '((sequence "TODO" "DONE"))))
|
||||
(org-test-parse-and-interpret "*************** TODO Task"))
|
||||
"*************** TODO Task\n"))
|
||||
;; 5. With tags...
|
||||
;;
|
||||
;; 5.1. ... and a positive `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column 30))
|
||||
(org-test-parse-and-interpret "*************** Task :tag:"))
|
||||
"*************** Task :tag:\n"))
|
||||
;; 5.2. ... and a negative `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column -30))
|
||||
(org-test-parse-and-interpret "*************** Task :tag:"))
|
||||
"*************** Task :tag:\n"))
|
||||
;; 5.3. ... and a null `org-tags-column' value.
|
||||
(should
|
||||
(equal (let ((org-tags-column 0))
|
||||
(org-test-parse-and-interpret "*************** Task :tag:"))
|
||||
"*************** Task :tag:\n"))
|
||||
;; 6. With priority cookie.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "*************** [#B] Task")
|
||||
"*************** [#B] Task\n")))))
|
||||
|
||||
(ert-deftest test-org-element/plain-list-interpreter ()
|
||||
"Test plain-list and item interpreters."
|
||||
;; 1. Unordered list.
|
||||
(should (equal (org-test-parse-and-interpret "- item 1") "- item 1\n"))
|
||||
;; 2. Description list.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "- tag :: desc") "- tag :: desc\n"))
|
||||
;; 3. Ordered list.
|
||||
(should
|
||||
(equal (let ((org-plain-list-ordered-item-terminator t))
|
||||
(org-test-parse-and-interpret "1. Item"))
|
||||
"1. Item\n"))
|
||||
;; 4. Ordered list with counter.
|
||||
(should
|
||||
(equal (let ((org-plain-list-ordered-item-terminator t))
|
||||
(org-test-parse-and-interpret "1. [@5] Item"))
|
||||
"5. [@5] Item\n"))
|
||||
;; 5. List with check-boxes.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret
|
||||
"- [-] Item 1\n - [X] Item 2\n - [ ] Item 3")
|
||||
"- [-] Item 1\n - [X] Item 2\n - [ ] Item 3\n")))
|
||||
|
||||
(ert-deftest test-org-element/quote-block-interpreter ()
|
||||
"Test quote block interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_QUOTE\nTest\n#+END_QUOTE")
|
||||
"#+BEGIN_QUOTE\nTest\n#+END_QUOTE\n")))
|
||||
|
||||
(ert-deftest test-org-element/special-block-interpreter ()
|
||||
"Test special block interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_SPECIAL\nTest\n#+END_SPECIAL")
|
||||
"#+BEGIN_SPECIAL\nTest\n#+END_SPECIAL\n")))
|
||||
|
||||
(ert-deftest test-org-element/babel-call-interpreter ()
|
||||
"Test babel call interpreter."
|
||||
;; 1. Without argument.
|
||||
(should (equal (org-test-parse-and-interpret "#+CALL: test()")
|
||||
"#+CALL: test()\n"))
|
||||
;; 2. With argument.
|
||||
(should (equal (org-test-parse-and-interpret "#+CALL: test(x=2)")
|
||||
"#+CALL: test(x=2)\n"))
|
||||
;; 3. With header arguments.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+CALL: test[:results output]()[:results html]")
|
||||
"#+CALL: test[:results output]()[:results html]\n")))
|
||||
|
||||
(ert-deftest test-org-element/comment-interpreter ()
|
||||
"Test comment interpreter."
|
||||
;; Regular comment.
|
||||
(should (equal (org-test-parse-and-interpret "#Comment") "#Comment\n"))
|
||||
;; Inline comment.
|
||||
(should (equal (org-test-parse-and-interpret " #+ Comment")
|
||||
" #+ Comment\n")))
|
||||
|
||||
(ert-deftest test-org-element/comment-block-interpreter ()
|
||||
"Test comment block interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_COMMENT\nTest\n#+END_COMMENT")
|
||||
"#+BEGIN_COMMENT\nTest\n#+END_COMMENT\n")))
|
||||
|
||||
(ert-deftest test-org-element/example-block-interpreter ()
|
||||
"Test example block interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_EXAMPLE\nTest\n#+END_EXAMPLE")
|
||||
"#+BEGIN_EXAMPLE\nTest\n#+END_EXAMPLE\n")))
|
||||
|
||||
(ert-deftest test-org-element/export-block-interpreter ()
|
||||
"Test export block interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_HTML\nTest\n#+END_HTML")
|
||||
"#+BEGIN_HTML\nTest\n#+END_HTML\n")))
|
||||
|
||||
(ert-deftest test-org-element/fixed-width-interpreter ()
|
||||
"Test fixed width interpreter."
|
||||
(should (equal (org-test-parse-and-interpret ": Test") ": Test\n")))
|
||||
|
||||
(ert-deftest test-org-element/horizontal-rule-interpreter ()
|
||||
"Test horizontal rule interpreter."
|
||||
(should (equal (org-test-parse-and-interpret "-------") "-----\n")))
|
||||
|
||||
(ert-deftest test-org-element/keyword-interpreter ()
|
||||
"Test keyword interpreter."
|
||||
(should (equal (org-test-parse-and-interpret "#+KEYWORD: value")
|
||||
"#+KEYWORD: value\n")))
|
||||
|
||||
(ert-deftest test-org-element/latex-environment-interpreter ()
|
||||
"Test latex environment interpreter."
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"\begin{equation}\n1+1=2\n\end{equation}")
|
||||
"\begin{equation}\n1+1=2\n\end{equation}\n")))
|
||||
|
||||
(ert-deftest test-org-element/property-drawer-interpreter ()
|
||||
"Test property drawer interpreter."
|
||||
(should (equal (let ((org-property-format "%-10s %s"))
|
||||
(org-test-parse-and-interpret
|
||||
":PROPERTIES:\n:prop: value\n:END:"))
|
||||
":PROPERTIES:\n:prop: value\n:END:\n")))
|
||||
|
||||
(ert-deftest test-org-element/src-block-interpreter ()
|
||||
"Test src block interpreter."
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret
|
||||
"#+BEGIN_SRC emacs-lisp :results silent\n(+ 1 1)\n#+END_SRC")
|
||||
"#+BEGIN_SRC emacs-lisp :results silent\n(+ 1 1)\n#+END_SRC\n")))
|
||||
|
||||
(ert-deftest test-org-element/table-interpreter ()
|
||||
"Test table, table-row and table-cell interpreters."
|
||||
;; 1. Simple table.
|
||||
(should (equal (org-test-parse-and-interpret "| a | b |\n| c | d |")
|
||||
"| a | b |\n| c | d |\n"))
|
||||
;; 2. Table with horizontal rules.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"| a | b |\n|---+---|\n| c | d |")
|
||||
"| a | b |\n|---+---|\n| c | d |\n"))
|
||||
;; 3. Table with meta-data.
|
||||
(should (equal (org-test-parse-and-interpret "| / | < | > |\n| * | 1 | 2 |")
|
||||
"| / | < | > |\n| * | 1 | 2 |\n")))
|
||||
|
||||
(ert-deftest test-org-element/verse-block-interpreter ()
|
||||
"Test verse block interpretation."
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "#+BEGIN_VERSE\nTest\n#+END_VERSE")
|
||||
"#+BEGIN_VERSE\nTest\n#+END_VERSE\n")))
|
||||
|
||||
(ert-deftest test-org-element/entity-interpreter ()
|
||||
"Test entity interpreter."
|
||||
;; 1. Without brackets.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "\\alpha text") "\\alpha text\n"))
|
||||
;; 2. With brackets.
|
||||
(should
|
||||
(equal (org-test-parse-and-interpret "\\alpha{}text") "\\alpha{}text\n")))
|
||||
|
||||
(ert-deftest test-org-element/export-snippet-interpreter ()
|
||||
"Test export snippet interpreter."
|
||||
(should (equal (org-test-parse-and-interpret "@back-end{test}")
|
||||
"@back-end{test}\n")))
|
||||
|
||||
(ert-deftest test-org-element/footnote-reference-interpreter ()
|
||||
"Test footnote reference interpreter."
|
||||
;; 1. Regular reference.
|
||||
(should (equal (org-test-parse-and-interpret "Text[fn:1]") "Text[fn:1]\n"))
|
||||
;; 2. Normalized reference.
|
||||
(should (equal (org-test-parse-and-interpret "Text[1]") "Text[1]\n"))
|
||||
;; 3. Named reference.
|
||||
(should (equal (org-test-parse-and-interpret "Text[fn:label]")
|
||||
"Text[fn:label]\n"))
|
||||
;; 4. Inline reference.
|
||||
(should (equal (org-test-parse-and-interpret "Text[fn:label:def]")
|
||||
"Text[fn:label:def]\n"))
|
||||
;; 5. Anonymous reference.
|
||||
(should (equal (org-test-parse-and-interpret "Text[fn::def]")
|
||||
"Text[fn::def]\n")))
|
||||
|
||||
(ert-deftest test-org-element/inline-babel-call-interpreter ()
|
||||
"Test inline babel call interpreter."
|
||||
;; 1. Without arguments.
|
||||
(should (equal (org-test-parse-and-interpret "call_test()") "call_test()\n"))
|
||||
;; 2. With arguments.
|
||||
(should (equal (org-test-parse-and-interpret "call_test(x=2)")
|
||||
"call_test(x=2)\n"))
|
||||
;; 3. With header arguments.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"call_test[:results output]()[:results html]")
|
||||
"call_test[:results output]()[:results html]\n")))
|
||||
|
||||
(ert-deftest test-org-element/inline-src-block-interpreter ()
|
||||
"Test inline src block interpreter."
|
||||
;; 1. Without header argument.
|
||||
(should (equal (org-test-parse-and-interpret "src_emacs-lisp{(+ 1 1)}")
|
||||
"src_emacs-lisp{(+ 1 1)}\n"))
|
||||
;; 2. With header arguments.
|
||||
(should (equal (org-test-parse-and-interpret
|
||||
"src_emacs-lisp[:results silent]{(+ 1 1)}")
|
||||
"src_emacs-lisp[:results silent]{(+ 1 1)}\n")))
|
||||
|
||||
(ert-deftest test-org-element/latex-fragment-interpreter ()
|
||||
"Test latex fragment interpreter."
|
||||
(let ((org-latex-regexps
|
||||
'(("begin" "^[ ]*\\(\\\\begin{\\([a-zA-Z0-9\\*]+\\)[^ |