summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-04-27 17:16:17 +0200
committerNicolas Goaziou <n.goaziou@gmail.com>2012-04-27 19:02:02 +0200
commit41b2a2e766d50c84af37834bf3d67bdf175158fc (patch)
tree6a2040b7d3e58237fccc99ca4c26e536045b3afa
parent8e52d1d7f061351844a7bc88264ac2cd1996cae5 (diff)
downloadorg-mode-41b2a2e766d50c84af37834bf3d67bdf175158fc.tar.gz
org-element: Add tests
-rw-r--r--testing/lisp/test-org-element.el400
1 files changed, 385 insertions, 15 deletions
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 367cddf..feb75d2 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -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,20 +412,383 @@ 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")
- "#+BEGIN_VERSE\nTest\n#+END_VERSE\n")))
+(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\\*]+\\)[^
+ ("$1" "\\([^$]\\|^\\)\\(\\$[^ \n,;.$]\\$\\)\\([- .,?;:'\")
+ ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ \n,;.$][^$\n ]*?\\(\n[^$\n ]*?\\)\\{0,2\\}[^ \n,.$]\\)\\$\\)\\)\\([- .,?;:'\")
+ ("\\(" "\\\\([^
+ ("\\[" "\\\\\\[[^
+ ("$$" "\\$\\$[^
+ (should (equal (org-test-parse-and-interpret "\\command{}")
+ "\\command{}\n"))
+ (should (equal (org-test-parse-and-interpret "$x$") "$x$\n"))
+ (should (equal (org-test-parse-and-interpret "$x+y$") "$x+y$\n"))
+ (should (equal (org-test-parse-and-interpret "$$x+y$$") "$$x+y$$\n"))
+ (should (equal (org-test-parse-and-interpret "\\(x+y\\)") "\\(x+y\\)\n"))
+ (should (equal (org-test-parse-and-interpret "\\[x+y\\]") "\\[x+y\\]\n"))))
+
+(ert-deftest test-org-element/line-break-interpreter ()
+ "Test line break interpreter."
+ (should (equal (org-test-parse-and-interpret "First line \\\\ \nSecond line")
+ "First line \\\\\nSecond line\n")))
+
+(ert-deftest test-org-element/link-interpreter ()
+ "Test link interpreter."
+ ;; 1. Links targeted from a radio target.
+ (should (equal (let ((org-target-link-regexp "radio-target"))
+ (org-test-parse-and-interpret "a radio-target"))
+ "a radio-target\n"))
+ ;; 2. Regular links.
+ ;;
+ ;; 2.1. Without description.
+ (should (equal (org-test-parse-and-interpret "[[http://orgmode.org]]")
+ "[[http://orgmode.org]]\n"))
+ ;; 2.2. With a description.
+ (should (equal (org-test-parse-and-interpret
+ "[[http://orgmode.org][Org mode]]")
+ "[[http://orgmode.org][Org mode]]\n"))
+ ;; 2.3. Id links.
+ (should (equal (org-test-parse-and-interpret "[[id:aaaa]]") "[[id:aaaa]]\n"))
+ ;; 2.4. Custom-id links.
+ (should (equal (org-test-parse-and-interpret "[[#id]]") "[[#id]]\n"))
+ ;; 2.5 Code-ref links.
+ (should (equal (org-test-parse-and-interpret "[[(ref)]]") "[[(ref)]]\n"))
+ ;; 3. Normalize plain links.
+ (should (equal (org-test-parse-and-interpret "http://orgmode.org")
+ "[[http://orgmode.org]]\n"))
+ ;; 4. Normalize angular links.
+ (should (equal (org-test-parse-and-interpret "<http://orgmode.org>")
+ "[[http://orgmode.org]]\n")))
+
+(ert-deftest test-org-element/macro-interpreter ()
+ "Test macro interpreter."
+ ;; 1. Without argument.
+ (should (equal (org-test-parse-and-interpret "{{{test}}}") "{{{test}}}\n"))
+ ;; 2. With arguments.
+ (should (equal (org-test-parse-and-interpret "{{{test(arg1,arg2)}}}")
+ "{{{test(arg1,arg2)}}}\n")))
+
+(ert-deftest test-org-element/radio-target-interpreter ()
+ "Test radio target interpreter."
+ (should (equal (org-test-parse-and-interpret "<<<some text>>>")
+ "<<<some text>>>\n")))
+
+(ert-deftest test-org-element/statistics-cookie-interpreter ()
+ "Test statistics cookie interpreter."
+ ;; 1. Without percent
+ (should (equal (org-test-parse-and-interpret "[0/1]") "[0/1]\n"))
+ ;; 2. With percent.
+ (should (equal (org-test-parse-and-interpret "[66%]") "[66%]\n")))
+
+(ert-deftest test-org-element/subscript-interpreter ()
+ "Test subscript interpreter."
+ ;; 1. Without brackets.
+ (should (equal (org-test-parse-and-interpret "a_b") "a_b\n"))
+ ;; 2. With brackets.
+ (should (equal (org-test-parse-and-interpret "a_{b}") "a_{b}\n")))
+
+(ert-deftest test-org-element/superscript-interpreter ()
+ "Test superscript interpreter."
+ ;; 1. Without brackets.
+ (should (equal (org-test-parse-and-interpret "a^b") "a^b\n"))
+ ;; 2. With brackets.
+ (should (equal (org-test-parse-and-interpret "a^{b}") "a^{b}\n")))
+
+(ert-deftest test-org-element/target-interpreter ()
+ "Test target interpreter."
+ (should (equal (org-test-parse-and-interpret "<<target>>") "<<target>>\n")))