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:
2026-03-31 18:27:13 +00:00
parent fcb7e2ccaf
commit e7fe6598c5

View File

@@ -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