| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 | 
							- ;;;_ org-html/tests.el --- Tests for org-html
 
- ;;;_. Headers
 
- ;;;_ , License
 
- ;; Copyright (C) 2010  Tom Breton (Tehom)
 
- ;; Author: Tom Breton (Tehom) <tehom@panix.com>
 
- ;; Keywords: lisp, maint, internal
 
- ;; This file 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 2, or (at your option)
 
- ;; any later version.
 
- ;; This file 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 GNU Emacs; see the file COPYING.  If not, write to
 
- ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 
- ;; Boston, MA 02111-1307, USA.
 
- ;;;_ , Commentary:
 
- ;; 
 
- ;;;_ , Requires
 
- (require 'org-html)
 
- ;;;_. Body
 
- ;;;_ , org-id testhelp
 
- ;;This would go into org-id/testhelp.el if there were such a file
 
- (defconst org-id:thd:usual-id-locations 
 
-    (org-id-alist-to-hash
 
-       '(
 
- 	  ("file1" "id-1-in-file1")
 
- 	  ("file1" "id-2-in-file1")
 
- 	  ("file2" "id-1-in-file2")))
 
-    
 
-    "A stable id-locations table for testing purposes" )
 
- ;;;_  . Validation
 
- (emt:deftest-3 org-id:thd:usual-id-locations
 
-    (nil
 
-       (progn
 
- 	 (emt:doc "Operation: Look up one of the keys we inserted.")
 
- 	 (emt:doc "Response: It has the value we gave it.")
 
- 	 (assert
 
- 	    (equal
 
- 	       (gethash "id-1-in-file1" org-id:thd:usual-id-locations)
 
- 	       "file1")))))
 
- ;;;_ , Config
 
- ;;;_  . org-html:thd:isolation
 
- (defconst org-html:thd:isolation
 
-    ;;Can't hope to capture all the org configuration any time soon,
 
-    ;;but let's set it up to some degree.
 
-    ;;It is generally better for this to remain constant than to try to
 
-    ;;sync this with new versions.  To change it is effectively to
 
-    ;;write new tests.
 
-    '(let
 
-        (
 
- 	  (org-export-html-inline-image-extensions
 
- 	     '("png" "jpeg" "jpg" "gif"))
 
- 	  (org-html-cvt-link-fn                    nil)
 
- 	  (org-export-first-hook                   nil)
 
- 	  (org-par-open                            t)
 
- 	  (org-url-encoding-use-url-hexify         nil)
 
- 	  ;;To control the org-id lookups
 
- 	  (org-id-locations
 
- 	     org-id:thd:usual-id-locations)
 
-           ;;To control `org-default-export-plist'
 
- 	  (org-export-inbuffer-options-extra       nil)
 
- 						   
 
- 	  ;;To control `org-infile-export-plist'.  Set up for minimal
 
- 	  ;;export so we can more easily handle examples.  When
 
- 	  ;;specific behavior is to be tested, locally bind the
 
- 	  ;;controlling variable(s), don't change them here.
 
- 	  (org-export-html-link-up                 "")
 
- 	  (org-export-html-link-home               "")
 
- 	  (org-export-default-language             "en")
 
- 	  (org-export-page-keywords                "")
 
- 	  (org-export-page-description             "")
 
- 	  (org-display-custom-times                nil)
 
- 	  (org-export-headline-levels              100)
 
- 	  (org-export-with-section-numbers         nil)
 
- 	  (org-export-section-number-format '((("1" ".")) . ""))
 
- 	  (org-export-with-toc                     nil)
 
- 	  (org-export-preserve-breaks              nil)
 
- 	  (org-export-with-archived-trees          nil)
 
- 	  (org-export-with-emphasize               nil)
 
- 	  (org-export-with-sub-superscripts        nil)
 
- 	  (org-export-with-special-strings         nil)
 
- 	  (org-export-with-footnotes               nil)
 
- 	  (org-export-with-drawers                 nil)
 
- 	  (org-export-with-tags                    nil)
 
- 	  (org-export-with-todo-keywords           nil)
 
- 	  (org-export-with-priority                nil)
 
- 	  (org-export-with-TeX-macros              nil)
 
- 	  (org-export-with-LaTeX-fragments         nil)
 
- 	  (org-export-latex-listings               nil)
 
- 	  (org-export-skip-text-before-1st-heading nil)
 
- 	  (org-export-with-fixed-width             nil)
 
- 	  (org-export-with-timestamps              nil)
 
- 	  (org-export-author-info                  nil)
 
- 	  (org-export-email-info                   nil)
 
- 	  (org-export-creator-info                 nil)
 
- 	  (org-export-time-stamp-file              nil)
 
- 	  (org-export-with-tables                  nil)
 
- 	  (org-export-highlight-first-table-line   nil)
 
- 	  (org-export-html-style-include-default   nil)
 
- 	  (org-export-html-style-include-scripts   nil)
 
- 	  (org-export-html-style                   "")
 
- 	  (org-export-html-style-extra             "")
 
- 	  (org-agenda-export-html-style            "")
 
- 	  (org-export-html-link-org-files-as-html  nil)
 
- 	  (org-export-html-inline-images           nil)
 
- 	  (org-export-html-extension               "html")
 
- 	  (org-export-html-xml-declaration 
 
- 	     '(("html" . "<?xml version=\"1.0\" encoding=\"%s\"?>") 
 
- 		 ("php" . "<?php echo \"<?xml version=\\\"1.0\\\" encoding=\\\"%s\\\" ?>\"; ?>")))
 
- 	  (org-export-html-table-tag 
 
- 	     "<table border=\"2\" cellspacing=\"0\" cellpadding=\"6\" rules=\"groups\" frame=\"hsides\">")
 
- 	  (org-export-html-expand                nil)
 
- 	  (org-export-html-with-timestamp        nil)
 
- 	  (org-export-publishing-directory       nil)
 
- 	  (org-export-html-preamble              nil)
 
- 	  (org-export-html-postamble             nil)
 
- 	  (org-export-html-auto-preamble         nil)
 
- 	  (org-export-html-auto-postamble        nil)
 
- 	  (user-full-name                        "Emtest user")
 
- 	  (user-mail-address                     "emtest-user@localhost.localdomain")
 
- 	  (org-export-select-tags                '("export"))
 
- 	  (org-export-exclude-tags               '("noexport"))
 
- 	  (org-export-latex-image-default-option nil)
 
- 	  (org-export-plist-vars
 
- 	     '(  
 
- 		 (:link-up                 nil         org-export-html-link-up)
 
- 		 (:link-home               nil         org-export-html-link-home)
 
- 		 (:language                nil         org-export-default-language)
 
- 		 (:keywords                nil         org-export-page-keywords)
 
- 		 (:description             nil         org-export-page-description)
 
- 		 (:customtime              nil         org-display-custom-times)
 
- 		 (:headline-levels         "H"         org-export-headline-levels)
 
- 		 (:section-numbers         "num"       org-export-with-section-numbers)
 
- 		 (:section-number-format   nil         org-export-section-number-format)
 
- 		 (:table-of-contents       "toc"       org-export-with-toc)
 
- 		 (:preserve-breaks         "\\n"       org-export-preserve-breaks)
 
- 		 (:archived-trees          nil         org-export-with-archived-trees)
 
- 		 (:emphasize               "*"         org-export-with-emphasize)
 
- 		 (:sub-superscript         "^"         org-export-with-sub-superscripts)
 
- 		 (:special-strings         "-"         org-export-with-special-strings)
 
- 		 (:footnotes               "f"         org-export-with-footnotes)
 
- 		 (:drawers                 "d"         org-export-with-drawers)
 
- 		 (:tags                    "tags"      org-export-with-tags)
 
- 		 (:todo-keywords           "todo"      org-export-with-todo-keywords)
 
- 		 (:priority                "pri"       org-export-with-priority)
 
- 		 (:TeX-macros              "TeX"       org-export-with-TeX-macros)
 
- 		 (:LaTeX-fragments         "LaTeX"     org-export-with-LaTeX-fragments)
 
- 		 (:latex-listings          nil         org-export-latex-listings)
 
- 		 (:skip-before-1st-heading "skip"      org-export-skip-text-before-1st-heading)
 
- 		 (:fixed-width             ":"         org-export-with-fixed-width)
 
- 		 (:timestamps              "<"         org-export-with-timestamps)
 
- 		 (:author-info             "author"    org-export-author-info)
 
- 		 (:email-info              "email"     org-export-email-info)
 
- 		 (:creator-info            "creator"   org-export-creator-info)
 
- 		 (:time-stamp-file         "timestamp" org-export-time-stamp-file)
 
- 		 (:tables                  "|"         org-export-with-tables)
 
- 		 (:table-auto-headline     nil         org-export-highlight-first-table-line)
 
- 		 (:style-include-default   nil         org-export-html-style-include-default)
 
- 		 (:style-include-scripts   nil         org-export-html-style-include-scripts)
 
- 		 (:style                   nil         org-export-html-style)
 
- 		 (:style-extra             nil         org-export-html-style-extra)
 
- 		 (:agenda-style            nil         org-agenda-export-html-style)
 
- 		 (:convert-org-links       nil         org-export-html-link-org-files-as-html)
 
- 		 (:inline-images           nil         org-export-html-inline-images)
 
- 		 (:html-extension          nil         org-export-html-extension)
 
- 		 (:xml-declaration         nil         org-export-html-xml-declaration)
 
- 		 (:html-table-tag          nil         org-export-html-table-tag)
 
- 		 (:expand-quoted-html      "@"         org-export-html-expand)
 
- 		 (:timestamp               nil         org-export-html-with-timestamp)
 
- 		 (:publishing-directory    nil         org-export-publishing-directory)
 
- 		 (:preamble                nil         org-export-html-preamble)
 
- 		 (:postamble               nil         org-export-html-postamble)
 
- 		 (:auto-preamble           nil         org-export-html-auto-preamble)
 
- 		 (:auto-postamble          nil         org-export-html-auto-postamble)
 
- 		 (:author                  nil         user-full-name)
 
- 		 (:email                   nil         user-mail-address)
 
- 		 (:select-tags             nil         org-export-select-tags)
 
- 		 (:exclude-tags            nil         org-export-exclude-tags)
 
- 		 (:latex-image-options     nil         org-export-latex-image-default-option)))
 
- 	  ))
 
-    "Isolation let-form for org-html tests.
 
- Isolation let-forms are intended to be included by
 
- `:surrounders'.  They provide a known configuration and keep
 
- tests from altering the outside state." )
 
- ;;;_ , Examples
 
- (defconst org-html:thd:examples
 
-    (emt:eg:define+ ;;xmp:tqu804919ze0
 
-       ((project org)
 
- 	 (library html)
 
- 	 (subsection link-examples))
 
-       (group
 
- 	 ((name only-path))
 
- 	 ;;No src-text because this arglist wouldn't be generated by
 
- 	 ;;org-export-as-html, though it might be created by custom link
 
- 	 ;;types.
 
- 	 (item ((type arglist))
 
- 	    '("" "foo" nil "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"foo\">desc</a>"))
 
-       (group
 
- 	 ((name only-fragment))
 
- 	 ;;No src-text, same reason
 
- 	 (item ((type arglist))
 
- 	    '("" "" "bar" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"#bar\">desc</a>"))
 
-       (group
 
- 	 ((name all-3-parts))
 
- 	 (item ((type src-text))
 
- 	    "[[http:foo#bar][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("http" "foo" "bar" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"http:foo#bar\">desc</a>"))
 
-       ;;Filename has to be absolute to trigger substitution.
 
-       (group
 
- 	 ((name subst-in-filename))
 
- 	 (item ((type src-text))
 
- 	    "[[file:/foo/unfoo/.././baz][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("file" "/foo/unfoo/.././baz" "" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"file:/foo/baz\">desc</a>"))
 
-       (group
 
- 	 ((name type=file))
 
- 	 (item ((type src-text))
 
- 	    "[[file:foo.txt][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("file" "foo.txt" "" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"file:foo.txt\">desc</a>"))
 
-       ;;We control what location id finds by controlling
 
-       ;;`org-id-locations' in `org-html:thd:isolation'
 
-       (group
 
- 	 ((name type=id))
 
- 	 (item ((type src-text))
 
- 	    "[[id:id-1-in-file1][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("" "file1" "id-1-in-file1" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"file1#id-1-in-file1\">desc</a>"))
 
-       (group
 
- 	 ((name type=ftp))
 
- 	 (item ((type src-text))
 
- 	    "[[ftp:foo.com][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("ftp" "foo.com" "" "desc" nil nil))
 
- 	 (item ((type link-text))
 
- 	    "<a href=\"ftp:foo.com\">desc</a>"))
 
-       ;;Punt coderef, internal logic is too hairy, would have to control
 
-       ;;`org-export-get-coderef-format'.
 
-       ;;Punt custom links, would have to make a controlled
 
-       ;;`org-link-protocols', which means identifying and binding every
 
-       ;;variable that `org-add-link-type' alters, then binding
 
-       ;;`org-link-protocols' to empty list, then calling
 
-       ;;`org-add-link-type' (possibly for id as well)
 
-       (group
 
- 	 ((name convertable))
 
- 	 (item ((type src-text))
 
- 	    "[[file:foo.org][desc]]")
 
- 	 (item ((type arglist))
 
- 	    '("file" "foo.org" nil "desc" nil nil))
 
- 	 (group
 
- 	    ((type link-text))
 
- 	    (item ((subname old-conversion))
 
- 	       "<a href=\"http:foo.html\">desc</a>")
 
- 	    (item ((subname new-conversion))
 
- 	       "<a href=\"xform:transformed-foo.org\">desc</a>")
 
- 	    (item ((subname no-conversion))
 
- 	       "<a href=\"file:foo.org\">desc</a>")))
 
-       ))
 
- ;;;_ , Helpers
 
- (defun org-html:th:cvt-fn (opt-plist type path)
 
-    "Trivial URL transformer"
 
-    (declare (ignored opt-plist))
 
-    (list
 
-       "xform"
 
-       (concat "transformed-" path)))
 
- (defun org-html:th:check-link-matches (expected)
 
-    "Build a link text and check it against expected text.
 
- Sensitive to emt:eg narrowing."
 
-    
 
-    (assert
 
-       (equal
 
- 	 (apply #'org-html-make-link
 
- 	     '(:html-extension "html")
 
- 	    (emt:eg (type arglist)))
 
- 	 expected)
 
-       t))
 
- ;;;_ , org-html-make-link
 
- (emt:deftest-3 
 
-    ((of 'org-html-make-link)
 
-       (:surrounders
 
- 	 (list
 
- 	    org-html:thd:isolation
 
- 	     '(emt:eg:with org-html:thd:examples
 
- 		((project org)
 
- 		   (library html)
 
- 		   (subsection link-examples))))))
 
-    
 
-    (nil
 
-       (emt:eg:map name name
 
- 	 (unless
 
- 	    (eq name 'convertable)  
 
- 	    (emt:doc "Proves: Example arglist gives the expected result.")
 
- 	    (org-html:th:check-link-matches
 
- 	       (emt:eg (type link-text))))))
 
-    
 
-    (nil
 
-       (emt:eg:narrow ((name convertable))
 
- 	 (let
 
- 	    (
 
- 	       (org-export-html-link-org-files-as-html t)
 
- 	       (org-html-cvt-link-fn nil))
 
- 	    (emt:doc "Proves: Old org->html conversion works.")
 
- 	    (org-html:th:check-link-matches
 
- 		  (emt:eg (type link-text) (subname old-conversion))))))
 
-    
 
-    (nil
 
-       (emt:eg:narrow ((name convertable))
 
- 	 (let
 
- 	    (
 
- 	       (org-export-html-link-org-files-as-html nil)
 
- 	       (org-html-cvt-link-fn #'org-html:th:cvt-fn))
 
- 	    (emt:doc "Proves: New file->url conversion works.")
 
- 	    (org-html:th:check-link-matches
 
- 	       (emt:eg (type link-text) (subname new-conversion))))))
 
-    
 
-    (nil
 
-       (emt:eg:narrow ((name convertable))
 
- 	 (let
 
- 	    (
 
- 	       (org-export-html-link-org-files-as-html t)
 
- 	       (org-html-cvt-link-fn #'org-html:th:cvt-fn))
 
- 	    (emt:doc "Proves: New conversion has precedence over old.")
 
- 	    (org-html:th:check-link-matches
 
- 	       (emt:eg (type link-text) (subname new-conversion))))))
 
-    
 
-    ;;Add tests for making images - but it's nearly direct.
 
-    )
 
- ;;;_ , Helpers
 
- (defun org-html:th:build-source (type path fragment &optional desc
 
- 				   descp attr may-inline-p)
 
-    ""
 
-    (declare (ignored descp attr may-inline-p))
 
-    (concat
 
-       "[["type":"
 
-       (org-link-escape path)
 
-       (if fragment
 
- 	 (cond
 
- 	    ((string= type "file")(concat "::" fragment))
 
- 	    ((string= type "http")(concat "#" fragment))))
 
-       "]["desc"]]"))
 
- ;;;_  . org-html:th:strip-whitepadding
 
- (defun org-html:th:strip-whitepadding (str)
 
-    ""
 
-    
 
-    (with-temp-buffer
 
-       (insert str)
 
-       (goto-char (point-min))
 
-       (while (search-forward "\n" nil t)
 
- 	 (replace-match ""))
 
-       (goto-char (point-min))
 
-       (while (search-forward "<p>" nil t)
 
- 	 (replace-match ""))
 
-       (goto-char (point-min))
 
-       (while (search-forward "</p>" nil t)
 
- 	 (replace-match ""))
 
-       (buffer-string)))
 
- ;;;_   , Examples
 
- (defconst org-html:stripwhite:thd:examples
 
-    (emt:eg:define+ ;;xmp:khpjmfi0aze0
 
-       ((project org)(library html)
 
- 	 (subsection org-html:th:strip-whitepadding)
 
- 	 (type string)
 
- 	 (role before))
 
-       (item ((name 0)) 
 
- 	 "\na\nb")
 
-       (item ((name 1)) 
 
- 	 "\n<p>ab")
 
-       (item ((name 2)) 
 
- 	 "\n</p>a\nb")))
 
- ;;;_   , Tests
 
- (emt:deftest-3 org-html:th:strip-whitepadding
 
-    (nil
 
-       (emt:eg:with org-html:stripwhite:thd:examples
 
- 	 ((project org)(library html)
 
- 	    (subsection org-html:th:strip-whitepadding)) 
 
- 	 (emt:eg:map name name
 
- 	    (emt:doc 
 
- 	       "Check: The stripped string matches what's expected.")
 
- 	    (assert
 
- 	       (string=
 
- 		  (org-html:th:strip-whitepadding (emt:eg))
 
- 		  "ab"))))))
 
- ;;;_ , org-export-as-html
 
- (emt:deftest-3 
 
-    ((of 'org-export-as-html)
 
-       (:surrounders
 
- 	 (list
 
- 	    org-html:thd:isolation
 
- 	    ;;Re-use the link examples.
 
- 	    '(emt:eg:with org-html:thd:examples
 
- 		((project org)(library html))))))
 
-    (nil
 
-       (emt:eg:narrow ((subsection link-examples)) 
 
- 	 (emt:eg:map name name
 
- 	    (when
 
- 	       (and
 
- 		  (not (eq name 'convertable))
 
- 		  ;;Dormant for id because it wants to find filename
 
- 		  ;;relative to `org-current-export-file', but for
 
- 		  ;;buffer export there is none.
 
- 		  (not (eq name 'type=id))  
 
- 		  (emt:eg:boundp '(type src-text)))
 
- 	       (emt:doc 
 
- 		  "Situation: the only thing in the buffer is that link")
 
- 	       (with-buffer-containing-object
 
-  		  (:string
 
- 		     (emt:eg (type src-text)))
 
- 		  (org-mode)
 
- 		  ;;This calculation has to be done outside the assert
 
- 		  ;;or it will be done twice.
 
- 		  (emt:doc "Operation: export the buffer as HTML.")
 
- 		  (let
 
- 		     ((result
 
- 			 (org-html:th:strip-whitepadding
 
- 			    (org-export-region-as-html
 
- 			       (point-min)
 
- 			       (point-max)
 
- 			       t
 
- 			       'string))))
 
- 		     (emt:doc 
 
- 			"Proves: Example arglist gives the expected result.")
 
- 		     (assert
 
- 			(string=
 
- 			   result
 
- 			   (emt:eg (type link-text)))
 
- 			t)))))))
 
-    ;;Could also use testpoints to test that we feed the link-builder
 
-    ;;functions as expected.
 
-    ;;Could also make example files and convert them.
 
-    )
 
- ;;;_. Footers
 
- ;;;_ , Provides
 
- (provide 'org-html/tests)
 
- ;;;_ * Local emacs vars.
 
- ;;;_  + Local variables:
 
- ;;;_  + mode: allout
 
- ;;;_  + End:
 
- ;;;_ , End
 
- ;;; org-html/tests.el ends here
 
 
  |