Browse Source

org-element: Add tests

Nicolas Goaziou 13 years ago
parent
commit
41b2a2e766
1 changed files with 385 additions and 15 deletions
  1. 385 15
      testing/lisp/test-org-element.el

+ 385 - 15
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\\*]+\\)[^]+?\\\\end{\\2}\\)" 1 t)
+	   ("$1" "\\([^$]\\|^\\)\\(\\$[^ 	
\n,;.$]\\$\\)\\([- 	.,?;:'\")]\\|$\\)" 2 nil)
+	   ("$" "\\([^$]\\|^\\)\\(\\(\\$\\([^ 	
\n,;.$][^$\n
]*?\\(\n[^$\n
]*?\\)\\{0,2\\}[^ 	
\n,.$]\\)\\$\\)\\)\\([- 	.,?;:'\")]\\|$\\)" 2 nil)
+	   ("\\(" "\\\\([^]*?\\\\)" 0 nil)
+	   ("\\[" "\\\\\\[[^]*?\\\\\\]" 0 nil)
+	   ("$$" "\\$\\$[^]*?\\$\\$" 0 nil))))
+    (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")))