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>
64 lines
2.1 KiB
Plaintext
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")))) |