aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2023-10-18 13:32:48 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2023-10-18 13:32:48 +0200
commitf42293deac4fe3f70c912e257ad47e14be2be83f (patch)
treedb43347c272d20d2eab31dc16f4beef4f8b426df
parentMove vcomponent geo to new object system. (diff)
downloadcalp-f42293deac4fe3f70c912e257ad47e14be2be83f.tar.gz
calp-f42293deac4fe3f70c912e257ad47e14be2be83f.tar.xz
Add tests for (vcomponent duration).
-rw-r--r--tests/unit/vcomponent/duration.scm71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/unit/vcomponent/duration.scm b/tests/unit/vcomponent/duration.scm
new file mode 100644
index 00000000..4293c880
--- /dev/null
+++ b/tests/unit/vcomponent/duration.scm
@@ -0,0 +1,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))