aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/vcomponent/vcomponent-datetime.scm
blob: 3d163e7ada5fd0061fc8b94ae9d3efe9adfa8120 (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
;;; Commentary:
;; Tests that event-clamping (checking how long part of an event
;; overlaps another time span) works.
;;; Code:

(define-module (test vcomponent-datetime)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-88)
  :use-module (datetime)
  :use-module (hnh util lens)
  :use-module (vcomponent datetime)
  :use-module ((vcomponent create) :select (vevent)))


(test-group "overlapping?"
  (test-assert "date, date"
    (overlapping?
     (vevent summary: "A"
             dtstart: (date year: 2020 month: jan day: 1)
             dtend:   (date year: 2022 month: dec day: 31))
     (vevent summary: "B"
             dtstart: (datetime year: 2020 month: apr day: 1 hour: 10)
             dtend:   (datetime year: 2020 month: apr day: 1 hour: 12))))

  ;; (test-assert "date, datetime")

  ;; (test-assert "datetime, date")

  ;; (test-assert "datetime, datetime")
  )

(test-group "event-contains?"
  (let* ((dt (datetime year: 2020 month: jan day: 1
                       hour: 10))
         (ev (vevent dtstart: dt
                     dtend: (datetime+ dt (datetime hour: 5)))))
    (test-assert (event-contains? ev dt))
    (test-assert (not (event-contains? ev (set dt datetime-date day 10))))))

(test-group "event-zero-length?"
  (test-assert (not (event-zero-length? (vevent dtstart: (date)))))
  (test-assert (event-zero-length? (vevent dtstart: (datetime))))
  (test-assert (not (event-zero-length? (vevent dtstart: (datetime)
                                               dtend: (datetime))))))

;; (test-group "ev-time<?")
;; (test-group "event-length")

(test-group "event-length/clamped"
 (let ((ev
        (vevent
         dtstart: (datetime year: 2020 month: 3 day: 29 hour: 17)
         dtend:   (datetime year: 2020 month: 4 day:  1 hour: 10))))

   ;; |-----------------| test interval
   ;;                 |----------| event interval

   (test-equal
       "Correct clamping"
     (datetime hour: 7) ; 2020-03-29T17:00 - 2020-03-30T00:00
     (event-length/clamped
      (date year: 2020 month: 3 day: 23) ; a time way before the start of the event
      (date year: 2020 month: 3 day: 29) ; a time slightly after the end of the event
      ev))

   (define utc-ev
     (vevent
      dtstart: (datetime year: 2020 month: 3 day: 29 hour: 15 tz: "UTC")
      dtend:   (datetime year: 2020 month: 4 day:  1 hour:  8 tz: "UTC")))

   (test-equal
       "Correct clamping UTC"
     (datetime hour: 7)
     (event-length/clamped
      (date year: 2020 month: 3 day: 23)
      (date year: 2020 month: 3 day: 29)
      ev))))

;; (test-group "event-length/day")

(test-group "long-event?"
  (test-assert "DTSTART being date is always a long event"
    (long-event? (vevent dtstart: (date))))
  (test-assert "datetime DTSTART without DTEND is always short"
    (not (long-event? (vevent dtstart: (datetime)))))
  (test-assert "Event longer than 24h"
    (not
     (long-event? (vevent dtstart: (datetime year: 2020 month: 1 day: 1 hour: 10)
                          dtend:   (datetime year: 2020 month: 1 day: 1 hour: 20)))))
  (test-assert "Event shorter than 24h"
    (long-event? (vevent dtstart: (datetime year: 2020 month: 1 day: 1
                                            hour: 1)
                         dtend:   (datetime year: 2020 month: 1 day: 2
                                            hour: 1 minute: 1)))))

;; (test-group "really-long-event?")
;; (test-group "final-spanned-time")
;; (test-group "events-between")
;; (test-group "relevant-zone-entry?")
;; (test-group "relevant-zone-rule?")
;; (test-group "zoneinfo->vtimezone")



'((vcomponent datetime))