AtlatestRepositorysigil-web

sigil-web / tree / testtest-dev.sgl

1(import (sigil test)
2 (sigil string)
3 (sigil channels)
4 (sigil web dev))
5
6;; ============================================================
7;; make-dev-broadcast
8;; ============================================================
9
10(test-group "make-dev-broadcast"
11 (test "creates a dev broadcast"
12 (let ((db (make-dev-broadcast)))
13 (assert-true (dev-broadcast? db))))
15 (test "sets current-dev-broadcast parameter"
16 (let ((db (make-dev-broadcast)))
17 (assert-equal db (current-dev-broadcast))))
19 (test "non-broadcast values fail predicate"
20 (assert-false (dev-broadcast? 42))
21 (assert-false (dev-broadcast? "hello"))
22 (assert-false (dev-broadcast? #f))))
24;; Helper: subscribe and receive a message from dev broadcast
25;; channel-try-receive returns (value) as a one-element list, or #f
26(define (receive-from-broadcast db)
27 (let* ((sub (broadcast-subscribe (vector-ref db 1)))
28 (result #f))
29 ;; Return a thunk that sends, then receives
30 (values sub
31 (lambda ()
32 (let ((recv (channel-try-receive sub)))
33 (if (pair? recv)
34 (car recv)
35 #f))))))
37;; ============================================================
38;; dev-reload!
39;; ============================================================
41(test-group "dev-reload!"
42 (test "sends reload event through broadcast"
43 (let ((db (make-dev-broadcast)))
44 (let-values (((sub recv) (receive-from-broadcast db)))
45 (dev-reload!)
46 (let ((msg (recv)))
47 (assert-true (string? msg))
48 (assert-true (string-contains? msg "event: sigil:reload"))
49 (assert-true (string-contains? msg "data: target body"))))))
51 (test "sends reload with custom target"
52 (let ((db (make-dev-broadcast)))
53 (let-values (((sub recv) (receive-from-broadcast db)))
54 (dev-reload! target: "#sidebar")
55 (let ((msg (recv)))
56 (assert-true (string-contains? msg "data: target #sidebar")))))))
58;; ============================================================
59;; dev-morph!
60;; ============================================================
62(test-group "dev-morph!"
63 (test "sends morph event through broadcast"
64 (let ((db (make-dev-broadcast)))
65 (let-values (((sub recv) (receive-from-broadcast db)))
66 (dev-morph! target: "#status" content: '(span "Online"))
67 (let ((msg (recv)))
68 (assert-true (string? msg))
69 (assert-true (string-contains? msg "event: sigil:morph"))
70 (assert-true (string-contains? msg "data: target #status"))
71 (assert-true (string-contains? msg "<span>Online</span>")))))))
73;; ============================================================
74;; dev-error!
75;; ============================================================
77(test-group "dev-error!"
78 (test "sends error overlay through broadcast"
79 (let ((db (make-dev-broadcast)))
80 (let-values (((sub recv) (receive-from-broadcast db)))
81 (dev-error! "Unbound variable: foo")
82 (let ((msg (recv)))
83 (assert-true (string? msg))
84 (assert-true (string-contains? msg "event: sigil:morph"))
85 (assert-true (string-contains? msg "data: target #sg-dev-error"))
86 (assert-true (string-contains? msg "Unbound variable: foo")))))))
88;; ============================================================
89;; dev-clear-error!
90;; ============================================================
92(test-group "dev-clear-error!"
93 (test "sends empty content to error overlay"
94 (let ((db (make-dev-broadcast)))
95 (let-values (((sub recv) (receive-from-broadcast db)))
96 (dev-clear-error!)
97 (let ((msg (recv)))
98 (assert-true (string? msg))
99 (assert-true (string-contains? msg "data: target #sg-dev-error")))))))
101;; ============================================================
102;; dev-connected-clients
103;; ============================================================
105(test-group "dev-connected-clients"
106 (test "returns 0 when no subscribers"
107 (let ((db (make-dev-broadcast)))
108 (assert-equal 0 (dev-connected-clients))))
110 (test "returns subscriber count"
111 (let* ((db (make-dev-broadcast))
112 (sub1 (broadcast-subscribe (vector-ref db 1)))
113 (sub2 (broadcast-subscribe (vector-ref db 1))))
114 (assert-equal 2 (dev-connected-clients)))))
116;; ============================================================
117;; dev-sse-handler
118;; ============================================================
120(test-group "dev-sse-handler"
121 (test "returns a procedure"
122 (let ((db (make-dev-broadcast)))
123 (assert-true (procedure? (dev-sse-handler))))))
125(run-tests)