summaryrefslogtreecommitdiff
path: root/tests/test-org-noter-config--title-to-slug.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-org-noter-config--title-to-slug.el')
-rw-r--r--tests/test-org-noter-config--title-to-slug.el50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/test-org-noter-config--title-to-slug.el b/tests/test-org-noter-config--title-to-slug.el
new file mode 100644
index 00000000..3122086d
--- /dev/null
+++ b/tests/test-org-noter-config--title-to-slug.el
@@ -0,0 +1,50 @@
+;;; test-org-noter-config--title-to-slug.el --- Tests for cj/org-noter--title-to-slug -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Tests for `cj/org-noter--title-to-slug'. The function lowercases its
+;; input, replaces every run of non-alphanumeric characters with a
+;; single hyphen, and trims leading/trailing hyphens. It's used to
+;; turn a book title into a filename-safe slug.
+
+;;; Code:
+
+(require 'ert)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(require 'user-constants)
+(require 'keybindings)
+(require 'org-noter-config)
+
+(ert-deftest test-org-noter-config-title-to-slug-multi-word ()
+ "Normal: a multi-word title becomes hyphen-separated lowercase."
+ (should (equal "the-pragmatic-programmer"
+ (cj/org-noter--title-to-slug "The Pragmatic Programmer"))))
+
+(ert-deftest test-org-noter-config-title-to-slug-single-word ()
+ "Normal: a single-word lowercase title is unchanged."
+ (should (equal "anaphora" (cj/org-noter--title-to-slug "anaphora"))))
+
+(ert-deftest test-org-noter-config-title-to-slug-mixed-punctuation ()
+ "Boundary: punctuation is collapsed into single hyphens."
+ (should (equal "godel-escher-bach"
+ (cj/org-noter--title-to-slug "Godel, Escher, Bach!"))))
+
+(ert-deftest test-org-noter-config-title-to-slug-leading-trailing-non-alnum ()
+ "Boundary: leading and trailing non-alnum runs are trimmed."
+ (should (equal "title"
+ (cj/org-noter--title-to-slug " ...title!?? "))))
+
+(ert-deftest test-org-noter-config-title-to-slug-collapses-multiple-non-alnum ()
+ "Boundary: a run of non-alnum chars in the middle becomes one hyphen."
+ (should (equal "a-b" (cj/org-noter--title-to-slug "a --- b"))))
+
+(ert-deftest test-org-noter-config-title-to-slug-numbers-preserved ()
+ "Boundary: digits are preserved as-is."
+ (should (equal "1984" (cj/org-noter--title-to-slug "1984"))))
+
+(ert-deftest test-org-noter-config-title-to-slug-empty-string ()
+ "Error: empty input yields empty string."
+ (should (equal "" (cj/org-noter--title-to-slug ""))))
+
+(provide 'test-org-noter-config--title-to-slug)
+;;; test-org-noter-config--title-to-slug.el ends here