aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/rrule-serialization.scm76
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)))))