diff options
Diffstat (limited to 'tests/test-calendar-sync--sanitize-org-body.el')
| -rw-r--r-- | tests/test-calendar-sync--sanitize-org-body.el | 73 |
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 |
