summaryrefslogtreecommitdiff
path: root/tests/test-org-noter--title-to-slug.el
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