aboutsummaryrefslogtreecommitdiff
path: root/tests/test/vcomponent.scm
blob: a69897766d0ea337b6759d44b66da595cd6b58d6 (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
;;; Commentary:
;; Test that vcomponent parsing works at all.
;;; Code:

(define-module (test vcomponent)
  :use-module (srfi srfi-17)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-88)
  :use-module ((vcomponent base)
               :select (prop make-vcomponent reparent! abandon!
                             copy-vcomponent
                             type parent children)))

(define ev
  (let ((ev (make-vcomponent 'DUMMY)))
    (set! (prop ev 'X-KEY) "value")
    ev))

(test-assert (eq? #f (prop ev 'MISSING)))

(test-assert (prop ev 'X-KEY))

(test-equal "value" (prop ev 'X-KEY))

(define calendar (make-vcomponent 'VCALENDAR))

(reparent! calendar ev)
(test-equal 1 (length (children calendar)))
(abandon! calendar ev)
(test-equal 0 (length (children calendar)))


(test-group "Copy VComponent"
  (let ((ev1 (make-vcomponent 'A))
        (ev2 (make-vcomponent 'B))
        (ev3 (make-vcomponent 'C)))
    (set! (prop ev3 'TEST) (list 1 2 3))
    (reparent! ev1 ev2)
    (reparent! ev2 ev3)
    (let* ((ev2* (copy-vcomponent ev2))
           (ev3* (car (children ev2*))))
      ;; NOTE replace this with `vcomponent=?' if that gets written
      (test-group "New object is equivalent to old one"
        (test-equal (type ev2) (type ev2*))
        (test-equal (length (children ev2)) (length (children ev2*))))
      (test-eq ev1 (parent ev2))

      (set! (car (prop ev3* 'TEST)) 10)
      (test-equal "Property values aren't deep copied"
        '(10 2 3) (prop ev3 'TEST))
      (test-equal '(10 2 3) (prop ev3* 'TEST))
      )))