blob: e616c5a2bd9b6907717500af20c7e9372da9496b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
(define-module (test rrule-serialization)
:use-module (srfi srfi-64)
:use-module (srfi srfi-88)
:use-module ((vcomponent recurrence internal)
:select (recur-rule->rrule-string
recur-rule->rrule-sxml
byday))
:use-module ((vcomponent recurrence parse)
:select (parse-recurrence-rule))
:use-module ((ice-9 peg) :select (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)))))
|