AtlatestRepositorysigil-web
1
(import (sigil test)2
(sigil string)3
(sigil channels)4
(sigil web dev))6
;; ============================================================7
;; make-dev-broadcast8
;; ============================================================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 broadcast25
;; channel-try-receive returns (value) as a one-element list, or #f26
(define (receive-from-broadcast db)27
(let* ((sub (broadcast-subscribe (vector-ref db 1)))28
(result #f))29
;; Return a thunk that sends, then receives30
(values sub31
(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-clients103
;; ============================================================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-handler118
;; ============================================================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)