Files
rose-ash/spec/tests/test-cek-try-seq.sx
giles 5c42f4842b Tests: cek-try-seq / htmx / hs-diag / perform-chain + node HS runners
New spec tests: test-cek-try-seq (CEK try/seq), test-htmx (htmx
directive coverage, 292L), test-hs-diag, test-perform-chain (IO
suspension chains).

tests/hs-*.js: Node.js-side hyperscript runners for browser-mode
testing (hs-behavioral-node, hs-behavioral-runner, hs-parse-audit,
hs-run-timed).

Vendors shared/static/scripts/htmx.min.js.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 09:09:27 +00:00

64 lines
2.1 KiB
Plaintext

;; Tests for cek-try sequential execution
;; Bug: hydrate-island fallback leaves hydrating? scope active
(defsuite
"cek-try-sequential"
(deftest
"code after cek-try runs on success"
(let
((result (list)))
(append! result "before")
(cek-try (fn () (append! result "body") 42) (fn (e) nil))
(append! result "after")
(assert= 3 (len result))
(assert= "after" (nth result 2))))
(deftest
"code after cek-try runs on error"
(let
((result (list)))
(append! result "before")
(cek-try (fn () (error "boom")) (fn (e) (append! result "caught")))
(append! result "after")
(assert= 3 (len result))
(assert= "after" (nth result 2))))
(deftest
"error in error handler propagates — skips post-try code"
(let
((result (list)))
(append! result "before")
(guard
(outer-err (true (append! result "outer-caught")))
(cek-try (fn () (error "boom")) (fn (e) (error "handler-boom")))
(append! result "after-try"))
(assert-true (contains? result "before"))
(assert-true (contains? result "outer-caught"))
(assert= false (contains? result "after-try"))))
(deftest
"scope-pop after cek-try executes on error"
(scope-push! "test-scope" "value")
(cek-try (fn () (error "boom")) (fn (e) nil))
(scope-pop! "test-scope")
(assert= nil (scope-peek "test-scope")))
(deftest
"scope-push/pop balanced across cek-try error"
(let
((result nil))
(scope-push! "bal-test" "pushed")
(cek-try (fn () (error "fail")) (fn (e) nil))
(set! result (scope-peek "bal-test"))
(scope-pop! "bal-test")
(assert= "pushed" result)
(assert= nil (scope-peek "bal-test"))))
(deftest
"error handler that errors skips cleanup"
(let
((cleaned false))
(scope-push! "cleanup-test" "val")
(guard
(e (true nil))
(cek-try (fn () (error "first")) (fn (e) (error "second")))
(scope-pop! "cleanup-test")
(set! cleaned true))
(assert= false cleaned)
(assert= "val" (scope-peek "cleanup-test"))
(scope-pop! "cleanup-test"))))