123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- (defun org-test-publish (properties handler)
- "Publish a project defined by PROPERTIES.
- Call HANDLER with the publishing directory as its sole argument.
- Unless set otherwise in PROPERTIES, `:base-directory' is set to
- \"examples/pub/\" sub-directory from test directory and
- `:publishing-function' is set to `org-publish-attachment'."
- (declare (indent 1))
- (let* ((org-publish-use-timestamps-flag nil)
- (org-publish-cache nil)
- (base-dir (expand-file-name "examples/pub/" org-test-dir))
- (pub-dir (make-temp-file "org-test" t))
- (org-publish-timestamp-directory
- (expand-file-name ".org-timestamps/" pub-dir))
- (project
- `("test" ,@(org-combine-plists
- `(:base-directory
- ,base-dir
- :publishing-function org-publish-attachment)
- properties
- `(:publishing-directory ,pub-dir)))))
- (unwind-protect
- (progn
- (org-publish-projects (list project))
- (funcall handler pub-dir))
-
- (delete-directory pub-dir t)
-
- (let ((site-map (and (plist-get properties :auto-sitemap)
- (expand-file-name
- (or (plist-get properties :sitemap-filename)
- "sitemap.org")
- base-dir))))
- (when (and site-map (file-exists-p site-map))
- (delete-file site-map))))))
- (ert-deftest test-org-publish/base-extension ()
- "Test `:base-extension' specifications"
-
- (should
- (equal '("a.org" "b.org")
- (org-test-publish '(:base-extension "org")
- (lambda (dir)
- (remove ".org-timestamps"
- (cl-remove-if #'file-directory-p
- (directory-files dir)))))))
- (should
- (equal '("file.txt")
- (org-test-publish '(:base-extension "txt")
- (lambda (dir)
- (remove ".org-timestamps"
- (cl-remove-if #'file-directory-p
- (directory-files dir)))))))
-
- (should
- (equal '("a.org" "b.org")
- (org-test-publish '(:base-extension nil)
- (lambda (dir)
- (remove ".org-timestamps"
- (cl-remove-if #'file-directory-p
- (directory-files dir)))))))
-
- (should
- (equal '("a.org" "b.org" "file.txt" "noextension")
- (org-test-publish '(:base-extension any)
- (lambda (dir)
- (remove ".org-timestamps"
- (cl-remove-if #'file-directory-p
- (directory-files dir))))))))
- (ert-deftest test-org-publish/sitemap ()
- "Test site-map specifications."
-
-
- (should
- (org-test-publish
- '(:auto-sitemap t)
- (lambda (dir) (file-exists-p (expand-file-name "sitemap.org" dir)))))
- (should-not
- (org-test-publish
- '(:auto-sitemap nil)
- (lambda (dir) (file-exists-p (expand-file-name "sitemap.org" dir)))))
-
- (should
- (org-test-publish
- '(:auto-sitemap t :sitemap-filename "mysitemap.org")
- (lambda (dir) (file-exists-p (expand-file-name "mysitemap.org" dir)))))
-
-
- (should
- (equal "#+TITLE: Sitemap for project test"
- (org-test-publish
- '(:auto-sitemap t)
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (point) (line-end-position)))))))
- (should
- (equal "#+TITLE: My title"
- (org-test-publish
- '(:auto-sitemap t :sitemap-title "My title")
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (point) (line-end-position)))))))
-
- (should
- (equal "
- - [[file:a.org][A]]
- - [[file:b.org][b]]
- - [[file:sub/c.org][C]]"
- (org-test-publish
- '(:auto-sitemap t
- :sitemap-sort-folders ignore
- :sitemap-style list
- :exclude "."
- :include ("a.org" "b.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
- (should
- (equal "
- - [[file:a.org][A]]
- - [[file:b.org][b]]
- - sub
- - [[file:sub/c.org][C]]"
- (org-test-publish
- '(:auto-sitemap t
- :sitemap-style tree
- :exclude "."
- :include ("a.org" "b.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
-
-
- (should
- (equal
- "
- - sub/
- - [[file:a.org][A]]
- - [[file:sub/c.org][C]]"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders first
- :exclude "."
- :include ("a.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
- (should
- (equal
- "
- - [[file:a.org][A]]
- - [[file:sub/c.org][C]]
- - sub/"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders last
- :exclude "."
- :include ("a.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
-
-
- (should
- (let ((case-fold-search t))
- (string-match-p
- "- sub/$"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders t
- :exclude "."
- :include ("a.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max))))))))
- (should-not
- (string-match-p
- "- sub/$"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders ignore
- :exclude "."
- :include ("a.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
-
-
-
- (should
- (equal
- "
- - [[file:a.org][A]]
- - [[file:b.org][b]]
- - [[file:sub/c.org][C]]"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders ignore
- :sitemap-sort-files alphabetically
- :exclude "."
- :include ("a.org" "b.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
- (should
- (equal
- "
- - [[file:b.org][b]]
- - [[file:sub/c.org][C]]
- - [[file:a.org][A]]"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders ignore
- :sitemap-sort-files chronologically
- :exclude "."
- :include ("a.org" "b.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
- (should
- (equal
- "
- - [[file:a.org][A]]
- - [[file:sub/c.org][C]]
- - [[file:b.org][b]]"
- (org-test-publish
- '(:auto-sitemap t
- :recursive t
- :sitemap-style list
- :sitemap-sort-folders ignore
- :sitemap-sort-files anti-chronologically
- :exclude "."
- :include ("a.org" "b.org" "sub/c.org"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
-
-
- (should
- (equal "
- - a.org"
- (org-test-publish
- '(:auto-sitemap t
- :exclude "."
- :include ("a.org")
- :sitemap-format-entry
- (lambda (f _s _p) f))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-substring (line-beginning-position 2) (point-max)))))))
- (should
- (equal "Custom!"
- (org-test-publish
- '(:auto-sitemap t
- :exclude "."
- :include ("a.org")
- :sitemap-function (lambda (_title _f) "Custom!"))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-string))))))
- (should
- (equal "[[file:a.org][A]]"
- (org-test-publish
- '(:auto-sitemap t
- :exclude "."
- :include ("a.org")
- :sitemap-function
- (lambda (_title f) (org-list-to-generic f nil)))
- (lambda (dir)
- (with-temp-buffer
- (insert-file-contents (expand-file-name "sitemap.org" dir))
- (buffer-string)))))))
- (ert-deftest test-org-publish/get-project-from-filename ()
- "Test `org-publish-get-project-from-filename' specifications."
-
- (should
- (let ((org-publish-project-alist '(("p" :base-directory "/base/"))))
- (org-publish-get-project-from-filename "/base/file.org")))
-
- (should-not
- (let ((org-publish-project-alist '(("p" :base-directory "/base/"))))
- (org-publish-get-project-from-filename "/other/file.org")))
-
-
- (should
- (equal "p2"
- (let ((org-publish-project-alist
- '(("p1" :base-directory "/other/")
- ("p2" :base-directory "/base/"))))
- (car (org-publish-get-project-from-filename "/base/file.org")))))
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :recursive t))))
- (org-publish-get-project-from-filename "/base/sub/file.org")))
- (should-not
- (let ((org-publish-project-alist '(("p" :base-directory "/base/"))))
- (org-publish-get-project-from-filename "/base/sub/file.org")))
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :base-extension "txt"))))
- (org-publish-get-project-from-filename "/base/file.txt")))
- (should-not
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :base-extension "org"))))
- (org-publish-get-project-from-filename "/base/file.txt")))
-
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :base-extension any))))
- (org-publish-get-project-from-filename "/base/file.txt")))
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :base-extension any))))
- (org-publish-get-project-from-filename "/base/file")))
-
- (should-not
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :exclude "file"))))
- (org-publish-get-project-from-filename "/base/file.org")))
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :exclude "other"))))
- (org-publish-get-project-from-filename "/base/file.org")))
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :exclude "base"))))
- (org-publish-get-project-from-filename "/base/file.org")))
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :include ("file.txt")))))
- (org-publish-get-project-from-filename "/base/file.txt")))
-
- (should
- (let ((org-publish-project-alist
- '(("p" :base-directory "/base/" :include ("f.txt") :exclude "f"))))
- (org-publish-get-project-from-filename "/base/f.txt")))
-
-
- (should
- (equal "meta"
- (let ((org-publish-project-alist
- '(("meta" :components ("p"))
- ("p" :base-directory "/base/"))))
- (car (org-publish-get-project-from-filename "/base/file.org" t))))))
- (provide 'test-ox-publish)
|