summaryrefslogtreecommitdiff
path: root/tests/test-calendar-sync--get-all-property-lines.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-calendar-sync--get-all-property-lines.el')
-rw-r--r--tests/test-calendar-sync--get-all-property-lines.el61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/test-calendar-sync--get-all-property-lines.el b/tests/test-calendar-sync--get-all-property-lines.el
new file mode 100644
index 00000000..c95041c9
--- /dev/null
+++ b/tests/test-calendar-sync--get-all-property-lines.el
@@ -0,0 +1,61 @@
+;;; test-calendar-sync--get-all-property-lines.el --- Tests for get-all-property-lines -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Unit tests for calendar-sync--get-all-property-lines function.
+;; Like get-property-line but returns ALL matching lines.
+;; Needed because ATTENDEE appears multiple times in an event.
+;; Covers Normal, Boundary, and Error cases.
+
+;;; Code:
+
+(require 'ert)
+(require 'testutil-calendar-sync)
+(require 'calendar-sync)
+
+;;; Normal Cases
+
+(ert-deftest test-calendar-sync--get-all-property-lines-normal-multiple ()
+ "Test extracting multiple ATTENDEE lines."
+ (let ((event "BEGIN:VEVENT\nATTENDEE;CN=Alice:mailto:alice@example.com\nATTENDEE;CN=Bob:mailto:bob@example.com\nEND:VEVENT"))
+ (let ((result (calendar-sync--get-all-property-lines event "ATTENDEE")))
+ (should (= 2 (length result)))
+ (should (string-match-p "Alice" (nth 0 result)))
+ (should (string-match-p "Bob" (nth 1 result))))))
+
+(ert-deftest test-calendar-sync--get-all-property-lines-normal-single ()
+ "Test extracting single matching line."
+ (let ((event "BEGIN:VEVENT\nATTENDEE;CN=Alice:mailto:alice@example.com\nSUMMARY:Test\nEND:VEVENT"))
+ (let ((result (calendar-sync--get-all-property-lines event "ATTENDEE")))
+ (should (= 1 (length result)))
+ (should (string-match-p "Alice" (car result))))))
+
+;;; Boundary Cases
+
+(ert-deftest test-calendar-sync--get-all-property-lines-boundary-no-match ()
+ "Test no matching property returns empty list."
+ (let ((event "BEGIN:VEVENT\nSUMMARY:Test\nEND:VEVENT"))
+ (should (null (calendar-sync--get-all-property-lines event "ATTENDEE")))))
+
+(ert-deftest test-calendar-sync--get-all-property-lines-boundary-continuation ()
+ "Test handling of continuation lines (lines starting with space)."
+ (let ((event "BEGIN:VEVENT\nATTENDEE;CN=Very Long Name;PARTSTAT=ACCEPTED:\n mailto:longname@example.com\nSUMMARY:Test\nEND:VEVENT"))
+ (let ((result (calendar-sync--get-all-property-lines event "ATTENDEE")))
+ (should (= 1 (length result)))
+ (should (string-match-p "longname@example.com" (car result))))))
+
+;;; Error Cases
+
+(ert-deftest test-calendar-sync--get-all-property-lines-error-nil-event ()
+ "Test nil event returns nil."
+ (should (null (calendar-sync--get-all-property-lines nil "ATTENDEE"))))
+
+(ert-deftest test-calendar-sync--get-all-property-lines-error-nil-property ()
+ "Test nil property returns nil."
+ (should (null (calendar-sync--get-all-property-lines "BEGIN:VEVENT\nEND:VEVENT" nil))))
+
+(ert-deftest test-calendar-sync--get-all-property-lines-error-empty-event ()
+ "Test empty event string returns nil."
+ (should (null (calendar-sync--get-all-property-lines "" "ATTENDEE"))))
+
+(provide 'test-calendar-sync--get-all-property-lines)
+;;; test-calendar-sync--get-all-property-lines.el ends here