diff options
Diffstat (limited to 'tests/test-cj-org-text-lib-sanitize.el')
| -rw-r--r-- | tests/test-cj-org-text-lib-sanitize.el | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/tests/test-cj-org-text-lib-sanitize.el b/tests/test-cj-org-text-lib-sanitize.el new file mode 100644 index 000000000..a4f8dca32 --- /dev/null +++ b/tests/test-cj-org-text-lib-sanitize.el @@ -0,0 +1,111 @@ +;;; test-cj-org-text-lib-sanitize.el --- Tests for the Org-safe text sanitizers -*- lexical-binding: t; -*- + +;;; Commentary: +;; Unit tests for `cj/org-sanitize-body-text', `cj/org-sanitize-property-value', +;; and `cj/org-sanitize-heading' in cj-org-text-lib.el. Pure string helpers +;; for safely composing Org content from external sources (calendar +;; bodies, web-clipped HTML, mail subjects, AI transcripts). Originally +;; lived in calendar-sync.el under `calendar-sync--sanitize-*' names. + +;;; Code: + +(require 'ert) + +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'cj-org-text-lib) + +;;; cj/org-sanitize-body-text -- Normal cases + +(ert-deftest test-cj-org-sanitize-body-single-asterisk () + "Normal: single leading asterisk replaced with dash." + (should (equal "- item one" (cj/org-sanitize-body-text "* item one")))) + +(ert-deftest test-cj-org-sanitize-body-double-asterisk () + "Normal: double leading asterisks replaced with double dashes." + (should (equal "-- sub-item" (cj/org-sanitize-body-text "** sub-item")))) + +(ert-deftest test-cj-org-sanitize-body-triple-asterisk () + "Normal: triple leading asterisks replaced with triple dashes." + (should (equal "--- deep item" (cj/org-sanitize-body-text "*** deep item")))) + +(ert-deftest test-cj-org-sanitize-body-multiline () + "Normal: multiple lines with leading stars 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 (cj/org-sanitize-body-text input))))) + +(ert-deftest test-cj-org-sanitize-body-mixed-lines () + "Normal: only lines starting with asterisks change." + (let ((input "Normal line\n* Bullet line\nAnother normal line")) + (should (equal "Normal line\n- Bullet line\nAnother normal line" + (cj/org-sanitize-body-text input))))) + +(ert-deftest test-cj-org-sanitize-body-mixed-levels () + "Normal: lines with different asterisk counts each handled independently." + (let ((input "* Top\n** Middle\n*** Bottom")) + (should (equal "- Top\n-- Middle\n--- Bottom" + (cj/org-sanitize-body-text input))))) + +;;; cj/org-sanitize-body-text -- Boundary cases + +(ert-deftest test-cj-org-sanitize-body-nil-input () + "Boundary: nil input returns nil." + (should (null (cj/org-sanitize-body-text nil)))) + +(ert-deftest test-cj-org-sanitize-body-empty-string () + "Boundary: empty string returns empty string." + (should (equal "" (cj/org-sanitize-body-text "")))) + +(ert-deftest test-cj-org-sanitize-body-no-asterisks () + "Boundary: text without leading asterisks is returned unchanged." + (let ((input "Just a normal description\nwith multiple lines")) + (should (equal input (cj/org-sanitize-body-text input))))) + +(ert-deftest test-cj-org-sanitize-body-asterisk-mid-line () + "Boundary: asterisks not at line start are left alone." + (should (equal "Use * for emphasis" (cj/org-sanitize-body-text "Use * for emphasis")))) + +(ert-deftest test-cj-org-sanitize-body-asterisk-no-space () + "Boundary: asterisk at line start without trailing space is not a heading -- left alone." + (should (equal "*bold text*" (cj/org-sanitize-body-text "*bold text*")))) + +(ert-deftest test-cj-org-sanitize-body-asterisk-only () + "Boundary: lone asterisk with space at start of line is sanitized." + (should (equal "- " (cj/org-sanitize-body-text "* ")))) + +;;; cj/org-sanitize-heading + +(ert-deftest test-cj-org-sanitize-heading-flattens-newlines () + "Normal: heading text stays on one Org heading line." + (should (equal "Planning Agenda" + (cj/org-sanitize-heading "Planning\nAgenda")))) + +(ert-deftest test-cj-org-sanitize-heading-replaces-leading-stars () + "Normal: heading text doesn't start with Org heading stars." + (should (equal "- Planning -- Hidden" + (cj/org-sanitize-heading "* Planning\n** Hidden")))) + +(ert-deftest test-cj-org-sanitize-heading-nil-input () + "Boundary: nil input returns nil." + (should (null (cj/org-sanitize-heading nil)))) + +;;; cj/org-sanitize-property-value + +(ert-deftest test-cj-org-sanitize-property-value-flattens-structure () + "Normal: property values do not create extra property drawer lines." + (should (equal "Room 1 :END: * Not a heading" + (cj/org-sanitize-property-value + "Room 1\n:END:\n* Not a heading")))) + +(ert-deftest test-cj-org-sanitize-property-value-trims-and-collapses () + "Normal: property values are compact single-line values." + (should (equal "alpha beta gamma" + (cj/org-sanitize-property-value + " alpha\t beta\n\n gamma ")))) + +(ert-deftest test-cj-org-sanitize-property-value-nil-input () + "Boundary: nil input returns nil." + (should (null (cj/org-sanitize-property-value nil)))) + +(provide 'test-cj-org-text-lib-sanitize) +;;; test-cj-org-text-lib-sanitize.el ends here |
