diff options
| author | Craig Jennings <c@cjennings.net> | 2026-02-05 16:10:09 -0600 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-02-05 16:10:09 -0600 |
| commit | b1d9ca0588f96bb46f2cc3a3ba6c479e0bcc73bd (patch) | |
| tree | 67ab4a48e07cccf0e736b37012f8a28ae730b174 /tests | |
| parent | 399bf44a8883e22590da723cc8c4fd1bf9083fad (diff) | |
| download | dotemacs-b1d9ca0588f96bb46f2cc3a3ba6c479e0bcc73bd.tar.gz dotemacs-b1d9ca0588f96bb46f2cc3a3ba6c479e0bcc73bd.zip | |
fix(calendar-sync): fix heading order, continuation lines, and exception text cleaning
Three bugs found during manual verification of calendar sync output:
1. Heading/timestamp order reversed in event-to-org — nreverse pattern
put timestamp before the org heading. Swap initial list order.
2. get-property continuation line regex broken — the ^ anchor in
"^\n[ \t]" prevented matching at the correct position, truncating
long DESCRIPTION values at the first ICS line fold. Remove anchor,
add explicit position check (matching get-all-property-lines pattern).
3. collect-recurrence-exceptions didn't clean text — exception instances
got raw ICS text (literal \n, HTML tags) replacing the cleaned base
event text. Wrap summary/description/location in clean-text.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-calendar-sync--event-to-org.el | 6 | ||||
| -rw-r--r-- | tests/test-calendar-sync--get-property.el | 20 |
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/test-calendar-sync--event-to-org.el b/tests/test-calendar-sync--event-to-org.el index e6609e203..96ce49d58 100644 --- a/tests/test-calendar-sync--event-to-org.el +++ b/tests/test-calendar-sync--event-to-org.el @@ -26,7 +26,11 @@ :status "accepted" :url "https://meet.google.com/abc-defg-hij"))) (let ((result (calendar-sync--event-to-org event))) - (should (string-match-p "\\* Team Standup" result)) + ;; Verify heading comes before timestamp + (should (string-match "\\* Team Standup" result)) + (let ((heading-pos (match-beginning 0))) + (should (string-match "<[0-9]" result)) + (should (< heading-pos (match-beginning 0)))) (should (string-match-p ":PROPERTIES:" result)) (should (string-match-p ":LOCATION: Conference Room A" result)) (should (string-match-p ":ORGANIZER: John Smith" result)) diff --git a/tests/test-calendar-sync--get-property.el b/tests/test-calendar-sync--get-property.el index 8b71f8e38..205518608 100644 --- a/tests/test-calendar-sync--get-property.el +++ b/tests/test-calendar-sync--get-property.el @@ -133,6 +133,26 @@ (should (equal (calendar-sync--get-property event "DESCRIPTION") "Tasks: setup; review; deploy"))) (test-calendar-sync--get-property-teardown))) +(ert-deftest test-calendar-sync--get-property-boundary-continuation-lines-joined () + "Test extracting property value with RFC 5545 continuation lines. +Folded lines start with a space or tab and should be joined." + (test-calendar-sync--get-property-setup) + (unwind-protect + (let ((event "BEGIN:VEVENT\nDESCRIPTION:This is a long\n description that spans\n multiple lines\nSUMMARY:Test\nEND:VEVENT")) + (should (equal (calendar-sync--get-property event "DESCRIPTION") + "This is a longdescription that spansmultiple lines"))) + (test-calendar-sync--get-property-teardown))) + +(ert-deftest test-calendar-sync--get-property-boundary-continuation-with-html () + "Test that HTML tags split across continuation lines are fully captured." + (test-calendar-sync--get-property-setup) + (unwind-protect + (let ((event "BEGIN:VEVENT\nDESCRIPTION:Created by <a href=\"https://ex\n ample.com\">link</a> here\nEND:VEVENT")) + (let ((value (calendar-sync--get-property event "DESCRIPTION"))) + (should (string-match-p "example.com" value)) + (should (string-match-p "</a>" value)))) + (test-calendar-sync--get-property-teardown))) + ;;; Error Cases (ert-deftest test-calendar-sync--get-property-error-missing-property-returns-nil () |
