aboutsummaryrefslogtreecommitdiff
path: root/lisp/seam-test.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/seam-test.el')
-rw-r--r--lisp/seam-test.el258
1 files changed, 188 insertions, 70 deletions
diff --git a/lisp/seam-test.el b/lisp/seam-test.el
index 5d4a562..5bae015 100644
--- a/lisp/seam-test.el
+++ b/lisp/seam-test.el
@@ -39,14 +39,16 @@
(defmacro seam-test-environment (&rest body)
(declare (indent 0))
- `(let* ((seam-test-directory (make-temp-file "seam-test" t))
+ `(let* ((seam-test-directory (file-name-as-directory (make-temp-file "seam-test" t)))
(seam-note-directory seam-test-directory)
(default-directory seam-test-directory)
+ (seam-create-as-draft nil)
(seam-note-types '("private" "public"))
(seam-default-note-type "private")
- (seam-title-formatter (lambda (title _type) title))
+ (seam-title-formatter (lambda (title _type _draft-p) title))
(seam-export-template-file nil)
(seam-export-template-string seam-export-default-template-string)
+ (seam-export-template-values nil)
(seam-export-internal-link-class nil)
(seam-export-alist
`((,(file-name-concat seam-test-directory "html")
@@ -65,16 +67,18 @@
`(seam-test-environment
(let ,options
(let ,(cl-loop for (name . args) in varlist
- collect `(,name (seam-make-note ,@args)))
+ collect `(,name (seam-create-note ,@args)))
+ ;; FIXME: It's quite possible for tests to fail in such a way
+ ;; that this does not kill the buffers.
(unwind-protect (progn ,@body)
(mapcar #'kill-buffer (list ,@(mapcar #'car varlist))))))))
-(defun seam-test-remove-testdir (filename)
- (string-remove-prefix (concat seam-test-directory "/") filename))
+(defun seam-test-strip-testdir (filename)
+ (string-remove-prefix seam-test-directory filename))
(defun seam-test-list-files ()
(mapcar
- #'seam-test-remove-testdir
+ #'seam-test-strip-testdir
(directory-files-recursively seam-test-directory "")))
(defun seam-test-add-contents (buffer contents)
@@ -100,7 +104,7 @@
(cl-loop for ret = (re-search-forward "<a href=\"/\\(.*\\)?\">" nil t)
while ret collect (match-string 1)))))
-(ert-deftest seam-test-make-note-private ()
+(ert-deftest seam-test-create-note-private ()
(should
(equal
'("private/note.org")
@@ -108,7 +112,7 @@
((note "Note"))
(seam-test-list-files)))))
-(ert-deftest seam-test-make-note-public ()
+(ert-deftest seam-test-create-note-public ()
(should
(equal
'("html/note.html" "public/note.org")
@@ -116,12 +120,12 @@
((note "Note" "public"))
(seam-test-list-files)))))
-(ert-deftest seam-test-make-note-weird-filename ()
+(ert-deftest seam-test-create-note-weird-filename ()
(should
(equal
- '("./Weird file name!" ("private/weird-file-name.org"))
+ '("./Weir'd file name!" ("private/weird-file-name.org"))
(seam-test-with-notes ()
- ((weird "./Weird file name! "))
+ ((weird "./Weir'd file name! "))
(list (buffer-name weird)
(seam-test-list-files))))))
@@ -151,22 +155,22 @@
(buffer-name note)
(seam-get-title-from-file (buffer-file-name note))))))
-(ert-deftest seam-test-make-note-invalid-type ()
+(ert-deftest seam-test-create-note-invalid-type ()
(should-error
(seam-test-environment
- (kill-buffer (seam-make-note "Note" "invalid-type")))))
+ (kill-buffer (seam-create-note "Note" "invalid-type")))))
-(ert-deftest seam-test-make-note-name-conflict ()
+(ert-deftest seam-test-create-note-name-conflict ()
(should-error
(seam-test-environment
- (kill-buffer (seam-make-note " Note 1 "))
- (kill-buffer (seam-make-note "Note_1")))))
+ (kill-buffer (seam-create-note " Note 1 "))
+ (kill-buffer (seam-create-note "Note_1")))))
-(ert-deftest seam-test-make-note-name-conflict-different-types ()
+(ert-deftest seam-test-create-note-name-conflict-different-types ()
(should-error
(seam-test-environment
- (kill-buffer (seam-make-note "Note"))
- (kill-buffer (seam-make-note "Note" "public")))))
+ (kill-buffer (seam-create-note "Note"))
+ (kill-buffer (seam-create-note "Note" "public")))))
(ert-deftest seam-test-rename-note ()
(should
@@ -202,14 +206,16 @@
(ert-deftest seam-test-buffer-name-format-custom ()
(should
(equal
- "[private] Note"
+ "[private draft] Note"
(seam-test-with-notes ((seam-title-formatter
- (lambda (title type) (format "[%s] %s" type title))))
- ((note "Note"))
+ (lambda (title type draft-p)
+ (format "[%s%s] %s" type (if draft-p " draft" "") title))))
+ ((note "Note" nil nil t))
(buffer-name note)))))
(ert-deftest seam-test-link-update ()
- "Test that renaming a note updates its HTML and that of notes which link to it."
+ "Test that renaming a note updates its HTML and that of notes
+which link to it."
(should
(equal '(("qux.html")
("public/qux.org")
@@ -222,7 +228,7 @@
(seam-test-replace-contents bar "* qux")
(list
(seam-test-links-from-html "html/foo.html")
- (mapcar #'seam-test-remove-testdir (seam-get-links-from-file (buffer-file-name foo)))
+ (mapcar #'seam-test-strip-testdir (seam-get-links-from-file (buffer-file-name foo)))
(seam-test-list-files)))))))
(ert-deftest seam-test-link-update-no-unnecessary-export ()
@@ -252,8 +258,8 @@ re-export note to which it links."
(re-search-forward "<a href=\"/bar.html\">")))))
(ert-deftest seam-test-link-no-extension ()
- "Test that the :no-extension option causes links to render without .html
-extension."
+ "Test that the :no-extension option causes links to render without
+.html extension."
(should
(identity
(seam-test-with-notes ((seam-export-alist
@@ -270,8 +276,8 @@ extension."
(re-search-forward "<a href=\"/bar\">"))))))
(ert-deftest seam-test-link-internal-class ()
- "Test that setting `seam-export-internal-link-class' correctly renders
-the class."
+ "Test that setting `seam-export-internal-link-class' correctly
+renders the class."
(should
(identity
(seam-test-with-notes ((seam-export-internal-link-class "internal"))
@@ -297,13 +303,13 @@ the class."
(seam-test-add-contents foo (seam-test-link-to-buffer qux))
(seam-test-add-contents bar (seam-test-link-to-buffer qux))
(list
- (mapcar #'seam-test-remove-testdir (seam-get-links-from-file (buffer-file-name foo)))
- (mapcar #'seam-test-remove-testdir (seam-get-links-to-file (buffer-file-name bar)))
- (mapcar #'seam-test-remove-testdir (seam-get-links-to-file (buffer-file-name qux))))))))
+ (mapcar #'seam-test-strip-testdir (seam-get-links-from-file (buffer-file-name foo)))
+ (mapcar #'seam-test-strip-testdir (seam-get-links-to-file (buffer-file-name bar)))
+ (mapcar #'seam-test-strip-testdir (seam-get-links-to-file (buffer-file-name qux))))))))
(ert-deftest seam-test-delete-note ()
- "Test that deleting a note also deletes its HTML and re-exports linking
-notes such that they no longer link to it."
+ "Test that deleting a note also deletes its HTML and re-exports
+linking notes such that they no longer link to it."
(should
(equal
'(nil ("html/foo.html" "public/foo.org"))
@@ -319,10 +325,11 @@ notes such that they no longer link to it."
(seam-test-list-files))))))
(ert-deftest seam-test-backlinks-public ()
- "Test that linking to a note from a public note creates a backlink."
+ "Test that linking to a note from a public note creates a
+backlink."
(should
(identity
- (seam-test-with-notes ((seam-export-template-string "{{backlinks}}"))
+ (seam-test-with-notes ((seam-export-template-string "{{{backlinks}}}"))
((foo "foo" "public")
(bar "bar" "public"))
(with-current-buffer foo
@@ -334,47 +341,53 @@ notes such that they no longer link to it."
(ert-deftest seam-test-backlinks-private ()
"Test that linking to a note from a private note does not create a
backlink."
- (should-error
- (seam-test-with-notes ((seam-export-template-string "{{backlinks}}"))
- ((foo "foo")
- (bar "bar" "public"))
- (with-current-buffer foo
- (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
- (with-temp-buffer
- (insert-file-contents "html/bar.html")
- (re-search-forward "<a href=\"/foo.html\">")))))
+ (should
+ (equal
+ ""
+ (seam-test-with-notes ((seam-export-template-string "{{{backlinks}}}"))
+ ((foo "foo")
+ (bar "bar" "public"))
+ (with-current-buffer foo
+ (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
+ (with-temp-buffer
+ (insert-file-contents "html/bar.html")
+ (buffer-string))))))
(ert-deftest seam-test-backlinks-delete ()
"Test that deleting a note removes backlink."
- (should-error
- (seam-test-with-notes ((seam-export-template-string "{{backlinks}}"))
- ((foo "foo" "public")
- (bar "bar" "public"))
- (with-current-buffer foo
- (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
- (let ((delete-by-moving-to-trash nil))
- (seam-delete-note (buffer-file-name foo)))
- (with-temp-buffer
- (insert-file-contents "html/bar.html")
- (re-search-forward "<a href=\"/foo.html\">")))))
-
-(ert-deftest seam-test-backlinks-comment ()
- "Test that a commented-out link does not add a backlink."
- :expected-result :failed
- (should-error
- (identity
- (seam-test-with-notes ((seam-export-template-string "{{backlinks}}"))
+ (should
+ (equal
+ ""
+ (seam-test-with-notes ((seam-export-template-string "{{{backlinks}}}"))
((foo "foo" "public")
(bar "bar" "public"))
(with-current-buffer foo
- (seam-test-add-contents foo (concat "# " (seam-test-link-to-buffer bar))))
+ (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
+ (let ((delete-by-moving-to-trash nil))
+ (seam-delete-note (buffer-file-name foo)))
(with-temp-buffer
(insert-file-contents "html/bar.html")
- (re-search-forward "<a href=\"/foo.html\">"))))))
+ (buffer-string))))))
+
+(ert-deftest seam-test-backlinks-draft ()
+ "Test that linking to a note from a draft note does not create a
+backlink."
+ (should
+ (equal
+ ""
+ (seam-test-with-notes ((seam-export-template-string "{{{backlinks}}}"))
+ ((foo "foo" "public" nil t)
+ (bar "bar" "public"))
+ (with-current-buffer foo
+ (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
+ (with-temp-buffer
+ (insert-file-contents "html/bar.html")
+ (buffer-string))))))
(ert-deftest seam-test-set-type-private ()
- "Test that setting a public note to private will delete its HTML file and
-update linking HTML files such that they no longer link to it."
+ "Test that setting a public note to private will delete its HTML
+file and update linking HTML files such that they no longer link
+to it."
(should
(equal
'(nil ("html/foo.html" "private/bar.org" "public/foo.org"))
@@ -412,6 +425,59 @@ update linking HTML files such that they link to it."
((foo "foo"))
(seam-set-note-type (buffer-file-name foo) "invalid-type"))))
+(ert-deftest seam-test-create-draft ()
+ (should
+ (equal
+ '("public/-note.org")
+ (seam-test-with-notes ((seam-create-as-draft t))
+ ((note "Note" "public"))
+ (seam-test-list-files)))))
+
+(ert-deftest seam-test-create-draft-override ()
+ (should
+ (equal
+ '("public/-note.org")
+ (seam-test-with-notes ((seam-note-types
+ '(("public" :create-as-draft t))))
+ ((note "Note" "public"))
+ (seam-test-list-files)))))
+
+(ert-deftest seam-test-set-draft ()
+ "Test that toggling a note from non-draft to draft will delete its
+HTML file and update linking HTML files such that they no longer
+link to it."
+ (should
+ (equal
+ '(nil ("html/foo.html" "public/-bar.org" "public/foo.org"))
+ (seam-test-with-notes ()
+ ((foo "foo" "public")
+ (bar "bar" "public"))
+ (with-current-buffer foo
+ (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
+ (with-current-buffer bar
+ (call-interactively 'seam-toggle-draft))
+ (list
+ (seam-test-links-from-html "html/foo.html")
+ (seam-test-list-files))))))
+
+(ert-deftest seam-test-unset-draft ()
+ "Test that toggling a note from draft to non-draft will export its
+HTML file and update linking HTML files such that they link to
+it."
+ (should
+ (equal
+ '(("bar.html") ("html/bar.html" "html/foo.html" "public/bar.org" "public/foo.org"))
+ (seam-test-with-notes ()
+ ((foo "foo" "public")
+ (bar "bar" "public" nil t))
+ (with-current-buffer foo
+ (seam-test-add-contents foo (seam-test-link-to-buffer bar)))
+ (with-current-buffer bar
+ (call-interactively 'seam-toggle-draft))
+ (list
+ (seam-test-links-from-html "html/foo.html")
+ (seam-test-list-files))))))
+
(ert-deftest seam-test-follow-link-existing ()
"Test that following a link to an existing note opens that note."
(should
@@ -427,7 +493,8 @@ update linking HTML files such that they link to it."
(buffer-name))))))
(ert-deftest seam-test-follow-link-new ()
- "Test that following a link to an nonexistent note creates and opens that note."
+ "Test that following a link to an nonexistent note creates and
+opens that note."
(should
(equal
'("bar" ("private/bar.org" "private/foo.org"))
@@ -444,16 +511,36 @@ update linking HTML files such that they link to it."
(seam-test-list-files))
(kill-buffer)))))))
+(ert-deftest seam-test-follow-link-new-draft ()
+ "Test that following a link to an nonexistent draft note creates
+and opens that note."
+ (should
+ (equal
+ '("-bar" ("private/-bar.org" "private/foo.org"))
+ (seam-test-with-notes ()
+ ((foo "foo"))
+ (with-current-buffer foo
+ (seam-test-add-contents foo "[[seam:-bar]]")
+ (goto-char 1)
+ (org-next-link)
+ (org-open-at-point)
+ (unwind-protect
+ (list
+ (buffer-name)
+ (seam-test-list-files))
+ (kill-buffer)))))))
+
(ert-deftest seam-test-escape-title ()
(should
(equal
- "&ldquo;quotes&rdquo; &amp; &lt;symbols&gt;\n"
- (seam-test-with-notes ((seam-export-template-string "{{title}}"))
+ "“quotes” &amp; &lt;symbols&gt;\n&ldquo;quotes&rdquo; &amp; &lt;symbols&gt;\n"
+ (seam-test-with-notes ((seam-export-template-string "{{title}}\n{{{raw-title}}}"))
((note "\"quotes\" & <symbols>" "public"))
(seam-export--file-string "html/quotes-symbols.html")))))
(ert-deftest seam-test-custom-slug ()
- "Test that setting the SEAM_SLUG property saves and exports accordingly."
+ "Test that setting the SEAM_SLUG property saves and exports
+accordingly."
(should
(equal
'("html/c-vs-cpp.html" "public/c-vs-cpp.org")
@@ -462,6 +549,37 @@ update linking HTML files such that they link to it."
(seam-test-add-contents note ":PROPERTIES:\n:SEAM_SLUG: c-vs-cpp\n:END:")
(seam-test-list-files)))))
+(ert-deftest seam-test-removing-type-from-export-alist ()
+ (should
+ (equal
+ '("public/note.org")
+ (seam-test-with-notes ()
+ ((note "Note" "public"))
+ (setq seam-export-alist
+ `((,(file-name-concat seam-test-directory "html")
+ :types ("foo")
+ :root-path "/")))
+ (seam-export-all-notes)
+ (seam-test-list-files)))))
+
+(ert-deftest seam-test-template-values ()
+ "Test that custom variables can be used in templates, and that
+existing ones can be overridden."
+ (should
+ (equal
+ "Qux\nhello, world\n"
+ (seam-test-with-notes
+ ((seam-export-template-values '(("title" . "Bar")
+ ("greeting" . "hello, world")))
+ (seam-export-template-string "{{title}}\n{{greeting}}")
+ (seam-export-alist
+ `((,(file-name-concat seam-test-directory "html")
+ :types ("public")
+ :root-path "/"
+ :template-values (("title" . "Qux"))))))
+ ((foo "Foo" "public"))
+ (seam-export--file-string "html/foo.html")))))
+
(provide 'seam-test)
;;; seam-test.el ends here