diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2021-08-21 11:57:26 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2021-08-21 11:57:26 +0200 |
commit | c28ee92cc49444a04ce44440b1e0c4bc1ac87126 (patch) | |
tree | d8f51c23326632865fd90485190f53c358d4708b /tests | |
parent | Make zero-length events be part of day flow. (diff) | |
download | calp-c28ee92cc49444a04ce44440b1e0c4bc1ac87126.tar.gz calp-c28ee92cc49444a04ce44440b1e0c4bc1ac87126.tar.xz |
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.
Diffstat (limited to '')
-rw-r--r-- | tests/rrule-serialization.scm | 76 |
1 files changed, 76 insertions, 0 deletions
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))))) |