diff --git a/lib/hyperscript/runtime.sx b/lib/hyperscript/runtime.sx index dcfed022..e049aeb1 100644 --- a/lib/hyperscript/runtime.sx +++ b/lib/hyperscript/runtime.sx @@ -2386,6 +2386,26 @@ pairs) d)))) +(define + hs-strip-order-deep + (fn + (val) + (cond + ((dict? val) + (let + ((d (dict))) + (do + (for-each + (fn + (k) + (when + (not (= k "_order")) + (dict-set! d k (hs-strip-order-deep (get val k))))) + (filter (fn (k) (not (= k "_order"))) (keys val))) + d))) + ((list? val) (map hs-strip-order-deep val)) + (true val)))) + (define hs-method-call (fn @@ -2709,6 +2729,8 @@ (host-set! (host-get el "__hs_vars") name val) (when changed (hs-dom-fire-watchers! el name val)))))) +;; ── SourceInfo API ──────────────────────────────────────────────── + (define hs-dom-resolve-start (fn @@ -2728,8 +2750,6 @@ (if match (dom-parent match) nil))) (true el)))))) -;; ── SourceInfo API ──────────────────────────────────────────────── - (define hs-dom-walk (fn diff --git a/spec/tests/test-hyperscript-behavioral.sx b/spec/tests/test-hyperscript-behavioral.sx index eae50b4b..4d62cb35 100644 --- a/spec/tests/test-hyperscript-behavioral.sx +++ b/spec/tests/test-hyperscript-behavioral.sx @@ -3695,7 +3695,7 @@ (assert= (eval-hs "[1 + 1, 2 * 3, 10 - 5]") (list 2 6 5)) ) (deftest "arrays containing objects work" - (assert-equal (list {:a 1} {:b 2}) (eval-hs "[{a: 1}, {b: 2}]")) + (assert-equal (list {:a 1} {:b 2}) (hs-strip-order-deep (eval-hs "[{a: 1}, {b: 2}]"))) ) (deftest "deeply nested array literals work" (assert= (eval-hs "[[[1]], [[2, 3]]]") (list (list (list 1)) (list (list 2 3)))) diff --git a/tests/playwright/generate-sx-tests.py b/tests/playwright/generate-sx-tests.py index 7779cc03..ea373142 100644 --- a/tests/playwright/generate-sx-tests.py +++ b/tests/playwright/generate-sx-tests.py @@ -2570,10 +2570,10 @@ def generate_eval_only_test(test, idx): f'(list (quote {n}) {v})' for n, v in pairs ) + ')' if use_deep: - return f' (assert-equal {expected_sx} (eval-hs-locals "{hs_expr}" {locals_sx}))' + return f' (assert-equal {expected_sx} (hs-strip-order-deep (eval-hs-locals "{hs_expr}" {locals_sx})))' return f' (assert= (eval-hs-locals "{hs_expr}" {locals_sx}) {expected_sx})' if use_deep: - return f' (assert-equal {expected_sx} (eval-hs "{hs_expr}"))' + return f' (assert-equal {expected_sx} (hs-strip-order-deep (eval-hs "{hs_expr}")))' return f' (assert= (eval-hs "{hs_expr}") {expected_sx})' # Shared sub-pattern for run() call with optional String.raw and extra args: