blob: b6880cf6105ae13b2ee89ac951d3bbc855d1516f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
;;; test-org-noter--title-to-slug.el --- Tests for cj/org-noter--title-to-slug -*- lexical-binding: t; -*-
;;; Commentary:
;; ERT tests for the title-to-slug function used in org-noter workflow.
;; Tests cover normal, boundary, and error cases.
;;; Code:
(require 'ert)
(require 'org-noter-config)
;;; Normal Cases
(ert-deftest test-org-noter--title-to-slug-normal-simple-title ()
"Normal case: Simple title with spaces."
(should (equal (cj/org-noter--title-to-slug "The Pragmatic Programmer")
"the-pragmatic-programmer")))
(ert-deftest test-org-noter--title-to-slug-normal-single-word ()
"Normal case: Single word title."
(should (equal (cj/org-noter--title-to-slug "Dune")
"dune")))
(ert-deftest test-org-noter--title-to-slug-normal-with-numbers ()
"Normal case: Title with numbers."
(should (equal (cj/org-noter--title-to-slug "1984 by George Orwell")
"1984-by-george-orwell")))
(ert-deftest test-org-noter--title-to-slug-normal-mixed-case ()
"Normal case: Title with mixed case."
(should (equal (cj/org-noter--title-to-slug "SICP Structure and Interpretation")
"sicp-structure-and-interpretation")))
;;; Boundary Cases
(ert-deftest test-org-noter--title-to-slug-boundary-special-chars ()
"Boundary case: Title with special characters."
(should (equal (cj/org-noter--title-to-slug "C++: The Complete Guide")
"c-the-complete-guide")))
(ert-deftest test-org-noter--title-to-slug-boundary-punctuation ()
"Boundary case: Title with punctuation."
(should (equal (cj/org-noter--title-to-slug "Why's (Poignant) Guide to Ruby")
"why-s-poignant-guide-to-ruby")))
(ert-deftest test-org-noter--title-to-slug-boundary-leading-special ()
"Boundary case: Title starting with special character."
(should (equal (cj/org-noter--title-to-slug "...And Then There Were None")
"and-then-there-were-none")))
(ert-deftest test-org-noter--title-to-slug-boundary-trailing-special ()
"Boundary case: Title ending with special character."
(should (equal (cj/org-noter--title-to-slug "What Is This Thing Called Love?")
"what-is-this-thing-called-love")))
(ert-deftest test-org-noter--title-to-slug-boundary-multiple-spaces ()
"Boundary case: Title with multiple consecutive spaces."
(should (equal (cj/org-noter--title-to-slug "The Great Gatsby")
"the-great-gatsby")))
(ert-deftest test-org-noter--title-to-slug-boundary-underscores ()
"Boundary case: Title with underscores."
(should (equal (cj/org-noter--title-to-slug "file_name_example")
"file-name-example")))
(ert-deftest test-org-noter--title-to-slug-boundary-hyphens ()
"Boundary case: Title with existing hyphens."
(should (equal (cj/org-noter--title-to-slug "Self-Reliance")
"self-reliance")))
(ert-deftest test-org-noter--title-to-slug-boundary-all-numbers ()
"Boundary case: Title that is all numbers."
(should (equal (cj/org-noter--title-to-slug "2001")
"2001")))
;;; Edge Cases
(ert-deftest test-org-noter--title-to-slug-edge-empty-string ()
"Edge case: Empty string."
(should (equal (cj/org-noter--title-to-slug "")
"")))
(ert-deftest test-org-noter--title-to-slug-edge-only-special-chars ()
"Edge case: Only special characters."
(should (equal (cj/org-noter--title-to-slug "!@#$%^&*()")
"")))
(ert-deftest test-org-noter--title-to-slug-edge-unicode ()
"Edge case: Title with unicode characters."
(should (equal (cj/org-noter--title-to-slug "Café au Lait")
"caf-au-lait")))
(ert-deftest test-org-noter--title-to-slug-edge-long-title ()
"Edge case: Very long title."
(let ((long-title "The Absolutely Incredibly Long Title of This Book That Goes On and On"))
(should (equal (cj/org-noter--title-to-slug long-title)
"the-absolutely-incredibly-long-title-of-this-book-that-goes-on-and-on"))))
(provide 'test-org-noter--title-to-slug)
;;; test-org-noter--title-to-slug.el ends here
|