From c28ee92cc49444a04ce44440b1e0c4bc1ac87126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 21 Aug 2021 11:57:26 +0200 Subject: Repair BYDAY output for ical serialization. I have no idea why the byday case was commented out while implementing xcal output. Either way it's now fixed, and should hopefully stay fixed with some tests. --- tests/rrule-serialization.scm | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/rrule-serialization.scm (limited to 'tests/rrule-serialization.scm') diff --git a/tests/rrule-serialization.scm b/tests/rrule-serialization.scm new file mode 100644 index 00000000..53365661 --- /dev/null +++ b/tests/rrule-serialization.scm @@ -0,0 +1,76 @@ +( + ;; Yes, this is ugly. But how else would I test a private procedure? + ((guile) @@) + + ((vcomponent recurrence internal) + recur-rule->rrule-string + recur-rule->rrule-sxml + byday + ) + + ((vcomponent recurrence parse) parse-recurrence-rule) + + ((ice-9 peg) + keyword-flatten + ) + ) + + +(test-equal + "Parse of week day" + '(#f . 3) + ((@@ (vcomponent recurrence parse) parse-day-spec) "WE")) + +(test-equal + "Parse of week day with positive offset" + '(1 . 3) + ((@@ (vcomponent recurrence parse) parse-day-spec) "1WE")) + +(test-equal + "Parse of week day with positive offset (and plus)" + '(2 . 3) + ((@@ (vcomponent recurrence parse) parse-day-spec) "+2WE")) + +(test-equal + "Parse of week day with negative offset" + '(-3 . 3) + ((@@ (vcomponent recurrence parse) parse-day-spec) "-3WE")) + + +;; numeric prefixes in the BYDAY list is only valid when +;; FREQ={MONTHLY,YEARLY}, but that should be handled in a +;; later stage since we are just testing the parser here. +;; (p. 41) + + +(define field->string + (@@ (vcomponent recurrence internal) field->string)) + + +(let ((rule (parse-recurrence-rule "BYDAY=MO,TU,WE"))) + (test-equal "Direct return of parsed value" + "MO,TU,WE" + (field->string 'byday (byday rule))) + + (test-equal "Direct return, but as SXML" + '((byday "MO") + (byday "TU") + (byday "WE")) + (filter (lambda (pair) + (eq? 'byday (car pair))) + (keyword-flatten '(interval byday wkst) + (recur-rule->rrule-sxml rule))))) + +(let ((rule (parse-recurrence-rule "BYDAY=+1MO,1TU,-2FR"))) + (test-equal "Direct return of parsed value" + "1MO,1TU,-2FR" + (field->string 'byday (byday rule))) + + (test-equal "Direct return, but as SXML" + '((byday "1MO") + (byday "1TU") + (byday "-2FR")) + (filter (lambda (pair) + (eq? 'byday (car pair))) + (keyword-flatten '(interval byday wkst) + (recur-rule->rrule-sxml rule))))) -- cgit v1.2.3