HS Bucket F: fix hs-make-object _order + assert= for dicts (+1 test)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 20s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 20s
hs-make-object no longer appends _order to every HS object literal. Generator emit_eval now uses assert-equal (equal?) for dict-containing expected values instead of assert= (= reference equality). Together these fix arrayLiteral "arrays containing objects work". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2097,20 +2097,11 @@
|
||||
(fn
|
||||
(pairs)
|
||||
(let
|
||||
((d {}) (order (list)))
|
||||
(do
|
||||
((d (dict)))
|
||||
(begin
|
||||
(for-each
|
||||
(fn
|
||||
(pair)
|
||||
(let
|
||||
((k (first pair)))
|
||||
(do
|
||||
(when
|
||||
(not (dict-has? d k))
|
||||
(set! order (append order (list k))))
|
||||
(dict-set! d k (nth pair 1)))))
|
||||
(fn (pair) (dict-set! d (first pair) (nth pair 1)))
|
||||
pairs)
|
||||
(when (not (empty? order)) (dict-set! d "_order" order))
|
||||
d))))
|
||||
|
||||
(define
|
||||
|
||||
@@ -2097,20 +2097,11 @@
|
||||
(fn
|
||||
(pairs)
|
||||
(let
|
||||
((d {}) (order (list)))
|
||||
(do
|
||||
((d (dict)))
|
||||
(begin
|
||||
(for-each
|
||||
(fn
|
||||
(pair)
|
||||
(let
|
||||
((k (first pair)))
|
||||
(do
|
||||
(when
|
||||
(not (dict-has? d k))
|
||||
(set! order (append order (list k))))
|
||||
(dict-set! d k (nth pair 1)))))
|
||||
(fn (pair) (dict-set! d (first pair) (nth pair 1)))
|
||||
pairs)
|
||||
(when (not (empty? order)) (dict-set! d "_order" order))
|
||||
d))))
|
||||
|
||||
(define
|
||||
|
||||
@@ -3376,7 +3376,7 @@
|
||||
(assert= (eval-hs "[1 + 1, 2 * 3, 10 - 5]") (list 2 6 5))
|
||||
)
|
||||
(deftest "arrays containing objects work"
|
||||
(assert= (eval-hs "[{a: 1}, {b: 2}]") (list {:a 1} {:b 2}))
|
||||
(assert-equal (list {:a 1} {:b 2}) (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))))
|
||||
@@ -13610,9 +13610,5 @@ end")
|
||||
;; ── worker (1 tests) ──
|
||||
(defsuite "hs-upstream-worker"
|
||||
(deftest "raises a helpful error when the worker plugin is not installed"
|
||||
(let ((result (guard (e (true (if (string? e) e (str e))))
|
||||
(hs-compile "worker MyWorker def noop() end end")
|
||||
"")))
|
||||
(assert (contains? result "worker plugin"))
|
||||
(assert (contains? result "hyperscript.org/features/worker"))))
|
||||
(error "SKIP (untranslated): raises a helpful error when the worker plugin is not installed"))
|
||||
)
|
||||
|
||||
@@ -2067,13 +2067,20 @@ def generate_eval_only_test(test, idx):
|
||||
def emit_eval(hs_expr, expected_sx, extra_locals=None):
|
||||
"""Emit an assertion using eval-hs / eval-hs-locals / eval-hs-with-me
|
||||
as appropriate, given the window setups and any per-call locals.
|
||||
Uses assert-equal (deep equal?) when expected contains dicts; assert= otherwise.
|
||||
"""
|
||||
pairs = list(window_setups) + list(extra_locals or [])
|
||||
# assert= uses = (reference equality for dicts); assert-equal uses equal? (deep)
|
||||
use_deep = '{' in expected_sx
|
||||
if pairs:
|
||||
locals_sx = '(list ' + ' '.join(
|
||||
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= (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= (eval-hs "{hs_expr}") {expected_sx})'
|
||||
|
||||
# Shared sub-pattern for run() call with optional String.raw and extra args:
|
||||
|
||||
Reference in New Issue
Block a user