Expand WASM browser tests: 28 SX deftest forms
Added 13 new tests covering: - Signal core: create, reset!, swap!, computed, effect re-run, effect cleanup, batch - DOM extended: nested elements, boolean attrs, nil attrs, multiple children, HTML/DOM output match - Reactive attrs: initial value, signal updates, nil removal, multiple attrs on same element, multi-token spread - Island scope: scope detection, disposer collection, context visibility, defcomp rendering - Conditional: if/when/cond/let/begin in render-to-dom 28/28 source, 28/28 bytecode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -168,6 +168,127 @@
|
||||
"outerHTML")
|
||||
"sx-text-center"))))
|
||||
|
||||
(defsuite
|
||||
"wasm-signals-core"
|
||||
(deftest "signal create and deref" (assert-equal 42 (deref (signal 42))))
|
||||
(deftest
|
||||
"reset! changes value"
|
||||
(let
|
||||
((s (signal "old")))
|
||||
(reset! s "new")
|
||||
(assert-equal "new" (deref s))))
|
||||
(deftest
|
||||
"swap! applies function"
|
||||
(let ((s (signal 10))) (swap! s + 5) (assert-equal 15 (deref s))))
|
||||
(deftest
|
||||
"computed derives from signal"
|
||||
(let
|
||||
((s (signal 3)))
|
||||
(let
|
||||
((c (computed (fn () (* (deref s) 2)))))
|
||||
(assert-equal 6 (deref c)))))
|
||||
(deftest
|
||||
"effect runs immediately"
|
||||
(let
|
||||
((log (list)))
|
||||
(effect (fn () (append! log "ran")))
|
||||
(assert-equal 1 (len log))))
|
||||
(deftest
|
||||
"effect re-runs on signal change"
|
||||
(let
|
||||
((log (list)) (s (signal "a")))
|
||||
(effect (fn () (append! log (deref s))))
|
||||
(reset! s "b")
|
||||
(assert-equal 2 (len log))
|
||||
(assert-equal "b" (nth log 1))))
|
||||
(deftest
|
||||
"effect cleanup called on re-run"
|
||||
(let
|
||||
((log (list)) (s (signal 1)))
|
||||
(effect
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((v (deref s)))
|
||||
(append! log (str "run:" v))
|
||||
(fn () (append! log (str "cleanup:" v))))))
|
||||
(reset! s 2)
|
||||
(assert-true (contains? log "cleanup:1"))))
|
||||
(deftest
|
||||
"batch delays notification"
|
||||
(let
|
||||
((count 0) (s (signal 0)))
|
||||
(effect (fn () (deref s) (set! count (+ count 1))))
|
||||
(batch (fn () (reset! s 1) (reset! s 2) (reset! s 3)))
|
||||
(assert-equal 2 count))))
|
||||
|
||||
(defsuite
|
||||
"wasm-conditional-rendering"
|
||||
(deftest
|
||||
"if renders then branch"
|
||||
(assert-true
|
||||
(contains?
|
||||
(host-get
|
||||
(let
|
||||
((d (list)))
|
||||
(with-island-scope
|
||||
(fn (x) (append! d x))
|
||||
(fn
|
||||
()
|
||||
(render-to-dom
|
||||
(quote (if true (div "yes") (div "no")))
|
||||
(global-env)
|
||||
nil))))
|
||||
"outerHTML")
|
||||
"yes")))
|
||||
(deftest
|
||||
"when renders body on true"
|
||||
(assert-true
|
||||
(contains?
|
||||
(host-get
|
||||
(let
|
||||
((d (list)))
|
||||
(with-island-scope
|
||||
(fn (x) (append! d x))
|
||||
(fn
|
||||
()
|
||||
(render-to-dom
|
||||
(quote (when true (div "visible")))
|
||||
(global-env)
|
||||
nil))))
|
||||
"outerHTML")
|
||||
"visible")))
|
||||
(deftest
|
||||
"cond selects correct branch"
|
||||
(assert-true
|
||||
(contains?
|
||||
(host-get
|
||||
(render-to-dom
|
||||
(quote (cond false (div "a") true (div "b") :else (div "c")))
|
||||
(global-env)
|
||||
nil)
|
||||
"outerHTML")
|
||||
"b")))
|
||||
(deftest
|
||||
"render-to-dom with let bindings"
|
||||
(assert-true
|
||||
(contains?
|
||||
(host-get
|
||||
(render-to-dom
|
||||
(quote (let ((x "hello")) (div x)))
|
||||
(global-env)
|
||||
nil)
|
||||
"outerHTML")
|
||||
"hello")))
|
||||
(deftest
|
||||
"render-to-dom with begin"
|
||||
(assert-true
|
||||
(contains?
|
||||
(host-get
|
||||
(render-to-dom (quote (do (div "only-this"))) (global-env) nil)
|
||||
"outerHTML")
|
||||
"only-this"))))
|
||||
|
||||
(defsuite
|
||||
"wasm-signal-propagation"
|
||||
(deftest
|
||||
|
||||
Reference in New Issue
Block a user