aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/vcomponent/duration.scm
blob: 4293c880de2e992471b61f20bdab430f9f669711 (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
(define-module (test duration)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-64 test-error)
  :use-module (srfi srfi-71)
  :use-module (srfi srfi-88)
  :use-module (datetime)
  :use-module (vcomponent duration))

;;; Tests extracted from RFC5545 through the following script
;; #!/bin/sh
;; dur_day="[0-9]+D"
;; dur_second="[0-9]+S"
;; dur_minute="[0-9]+M($dur_second)?"
;; dur_hour="[0-9]+H($dur_minute)?"
;; dur_week="[0-9]+W"
;; dur_time="T($dur_hour|$dur_minute|$dur_second)"
;; dur_date="$dur_day($dur_time)?"
;; dur_value="[+-]?P($dur_date|$dur_time|$dur_week)"
;; grep -o -E "$dur_value" ~/.local/doc/rfc/rfc5545.txt


(test-group "Parse duration"
 (test-equal (duration day: 15
                       time: (time hour: 5 second: 20))
   (parse-duration "P15DT5H0M20S"))
 (test-equal (duration sign: '- day: 2) (parse-duration "-P2D"))
 (test-equal (duration week: 7) (parse-duration "P7W"))
 (test-equal (duration sign: '- time: (time minute: 15))
   (parse-duration "-PT15M"))
 (test-equal (duration time: (time minute: 15))
   (parse-duration "PT15M"))
 (test-equal (duration time: (time hour: 1))
   (parse-duration "PT1H"))
 (test-equal (duration time: (time hour: 1))
   (parse-duration "PT1H0M0S"))
 (test-equal (duration sign: '- time: (time minute: 30))
   (parse-duration "-PT30M"))
 (test-equal (duration time: (time hour: 3))
   (parse-duration "PT3H"))
 (test-equal (duration time: (time hour: 5 minute: 30))
   (parse-duration "PT5H30M"))
 (test-equal (duration time: (time minute: 5))
   (parse-duration "PT5M"))
 (test-equal (duration time: (time hour: 6 minute: 30))
   (parse-duration "PT6H30M"))
 (test-equal (duration time: (time hour: 8 minute: 30))
   (parse-duration "PT8H30M")))

(test-group "Format duration"
  (test-equal "P15DT5H1M20S"
    (format-duration (duration
                      day: 15
                      time: (time hour: 5 minute: 1 second: 20))))
  (test-equal "-P7W"
    (format-duration (duration week: 7 sign: '-))))

(test-error "Failure to construct invalid duration"
  'misc-error
  (duration week: 1 day: 1))

(test-error "Completely wrong duration"
  'parse-error
  (parse-duration "Something weird"))

(test-error "Duration with extra fluff at end"
  'warning
  (parse-duration "-P7WH"))



'((vcomponent duration))