aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/vcomponent/vcomponent.scm
blob: ebd0b1ff7b176cf413d2def33fbf31f312cf043c (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:
;; Test base functionallity of vcomponent structures.
;;; Code:

(define-module (test vcomponent)
  :use-module (srfi srfi-17)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-88)
  :use-module (hnh util table)
  :use-module (datetime)
  :use-module (vcomponent base))




(define ev
  (prop (vcomponent type: 'DUMMY)
        'X-KEY "value"))

(test-eqv "Non-existant properties return #f"
  #f (prop ev 'MISSING))

(test-assert "Existing property is non-false"
  (prop ev 'X-KEY))

(test-equal "Getting value of existing property"
  "value" (prop ev 'X-KEY))

(define calendar (add-child (vcomponent type: 'VCALENDAR)
                            ev))

(test-equal 1 (length (children calendar)))

;;; TODO remove child
;; (abandon! calendar ev)
;; (test-equal 0 (length (children calendar)))



(define vline*
  (vline
   key: 'DTSTART
   vline-value: (date year: 2020 month: 01 day: 02)
   vline-parameters: (alist->table
                      '((VALUE . "DATE")))
   vline-source: "DTSTART;VALUE=DATE:2020-01-02"))

(test-group "vline"
 (test-assert "Type check works as expected"
   (vline? vline*)))

(define vcomponent*
  (vcomponent type: 'VEVENT))

(test-assert "Type check works as expected"
  (vcomponent? vcomponent*))

(define child
  (vcomponent type: 'CHILD))


(test-eqv
    "An added component extends length"
  1 (length (children (add-child vcomponent* child))))

(test-eqv
    "But the source isn't modified"
  0 (length (children vcomponent*)))

(test-equal "Setting property"
  (list (list 'KEY (vline key: 'KEY vline-value: "Value")))
  (properties
   (prop vcomponent* 'KEY "Value")))

(let ((vl (vline key: 'KEY vline-value: "Value")))
  (test-equal "Setting property vline"
    (list (list 'KEY vl))
    (properties
     (prop* vcomponent* 'KEY vl))))

(test-equal "Set properties test"
  '(K1 K2)
  (map car
   (properties
    (apply set-properties
           vcomponent*
           `((K1 . "V1")
             (K2 . "V2"))))))

;; remove-property

;; extract extract*


;; remove-parameter
;; value
;; param

;; parameters
;; properties

;; x-property?
;; internal-field?

'((vcomponent base))