| 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 keeptests 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
 |