summaryrefslogtreecommitdiff
path: root/tests/test-calendar-sync--sanitize-org-body.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-calendar-sync--sanitize-org-body.el')
-rw-r--r--tests/test-calendar-sync--sanitize-org-body.el73
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/test-calendar-sync--sanitize-org-body.el b/tests/test-calendar-sync--sanitize-org-body.el
new file mode 100644
index 00000000..c85e763c
--- /dev/null
+++ b/tests/test-calendar-sync--sanitize-org-body.el
@@ -0,0 +1,73 @@
+;;; test-calendar-sync--sanitize-org-body.el --- Tests for org body sanitization -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Unit tests for calendar-sync--sanitize-org-body.
+;; Ensures description text with org-special syntax (leading asterisks)
+;; is escaped to prevent corruption of the org file structure.
+
+;;; Code:
+
+(require 'ert)
+(require 'calendar-sync)
+
+;;; Normal Cases
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-single-asterisk ()
+ "Single leading asterisk replaced with dash."
+ (should (equal "- item one" (calendar-sync--sanitize-org-body "* item one"))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-double-asterisk ()
+ "Double leading asterisks replaced with double dashes."
+ (should (equal "-- sub-item" (calendar-sync--sanitize-org-body "** sub-item"))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-triple-asterisk ()
+ "Triple leading asterisks replaced with triple dashes."
+ (should (equal "--- deep item" (calendar-sync--sanitize-org-body "*** deep item"))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-multiline ()
+ "Multiple lines with asterisks all get sanitized."
+ (let ((input "Format:\n* What did you do yesterday?\n* What are you doing today?\n* Is anything in your way?")
+ (expected "Format:\n- What did you do yesterday?\n- What are you doing today?\n- Is anything in your way?"))
+ (should (equal expected (calendar-sync--sanitize-org-body input)))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-mixed-lines ()
+ "Only lines starting with asterisks are changed."
+ (let ((input "Normal line\n* Bullet line\nAnother normal line"))
+ (should (equal "Normal line\n- Bullet line\nAnother normal line"
+ (calendar-sync--sanitize-org-body input)))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-normal-mixed-levels ()
+ "Lines with different asterisk counts are each handled."
+ (let ((input "* Top\n** Middle\n*** Bottom"))
+ (should (equal "- Top\n-- Middle\n--- Bottom"
+ (calendar-sync--sanitize-org-body input)))))
+
+;;; Boundary Cases
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-nil-input ()
+ "Nil input returns nil."
+ (should (null (calendar-sync--sanitize-org-body nil))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-empty-string ()
+ "Empty string returns empty string."
+ (should (equal "" (calendar-sync--sanitize-org-body ""))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-no-asterisks ()
+ "Text without leading asterisks is returned unchanged."
+ (let ((input "Just a normal description\nwith multiple lines"))
+ (should (equal input (calendar-sync--sanitize-org-body input)))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-asterisk-mid-line ()
+ "Asterisks not at line start are left alone."
+ (should (equal "Use * for emphasis" (calendar-sync--sanitize-org-body "Use * for emphasis"))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-asterisk-no-space ()
+ "Asterisk at line start without trailing space is not a heading — left alone."
+ (should (equal "*bold text*" (calendar-sync--sanitize-org-body "*bold text*"))))
+
+(ert-deftest test-calendar-sync--sanitize-org-body-boundary-asterisk-only ()
+ "Lone asterisk with space at start of line is sanitized."
+ (should (equal "- " (calendar-sync--sanitize-org-body "* "))))
+
+(provide 'test-calendar-sync--sanitize-org-body)
+;;; test-calendar-sync--sanitize-org-body.el ends here