HS: hyperscript:before:init / :after:init events (+2 tests)
integration.sx hs-activate! now wraps the activation block in a cancelable hyperscript:before:init event (dispatched on the el via dom-dispatch which returns the dispatchEvent boolean — true unless preventDefault was called). On success it dispatches hyperscript:after:init at the end. Both events bubble so listeners on a containing wa work-area receive them. Generator gets two hand-rolled deftests that exercise the new dispatch via hs-boot-subtree!: one captures both events into a list, the other preventDefaults before:init and asserts data-hyperscript-powered is absent. hs-upstream-core/bootstrap: 20/26 → 22/26. Smoke 0-195: 170 → 172. Remaining 4 cluster-29 tests need stricter parser error-rejection (hs-upstream-core/parser, parse-error event); larger than a single cluster budget — leave as untranslated for now. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1881,6 +1881,39 @@ def generate_eval_only_test(test, idx):
|
||||
f' (assert= (eval-hs "cookies.length") 0))'
|
||||
)
|
||||
|
||||
# Special case: cluster-29 init events. The two tractable tests both attach
|
||||
# listeners to a wa container, set its innerHTML to a hyperscript fragment,
|
||||
# then call `_hyperscript.processNode(wa)`. Hand-roll deftests using
|
||||
# hs-boot-subtree! which now dispatches hyperscript:before:init / :after:init.
|
||||
if test.get('name') == 'fires hyperscript:before:init and hyperscript:after:init':
|
||||
return (
|
||||
f' (deftest "{safe_name}"\n'
|
||||
f' (hs-cleanup!)\n'
|
||||
f' (let ((wa (dom-create-element "div"))\n'
|
||||
f' (events (list)))\n'
|
||||
f' (dom-listen wa "hyperscript:before:init"\n'
|
||||
f' (fn (e) (set! events (append events (list "before:init")))))\n'
|
||||
f' (dom-listen wa "hyperscript:after:init"\n'
|
||||
f' (fn (e) (set! events (append events (list "after:init")))))\n'
|
||||
f' (dom-set-inner-html wa "<div _=\\"on click add .foo\\"></div>")\n'
|
||||
f' (hs-boot-subtree! wa)\n'
|
||||
f' (assert= events (list "before:init" "after:init")))\n'
|
||||
f' )'
|
||||
)
|
||||
if test.get('name') == 'hyperscript:before:init can cancel initialization':
|
||||
return (
|
||||
f' (deftest "{safe_name}"\n'
|
||||
f' (hs-cleanup!)\n'
|
||||
f' (let ((wa (dom-create-element "div")))\n'
|
||||
f' (dom-listen wa "hyperscript:before:init"\n'
|
||||
f' (fn (e) (host-call e "preventDefault")))\n'
|
||||
f' (dom-set-inner-html wa "<div _=\\"on click add .foo\\"></div>")\n'
|
||||
f' (hs-boot-subtree! wa)\n'
|
||||
f' (let ((d (host-call wa "querySelector" "div")))\n'
|
||||
f' (assert= (host-call d "hasAttribute" "data-hyperscript-powered") false)))\n'
|
||||
f' )'
|
||||
)
|
||||
|
||||
# Special case: logAll config test. Body sets `_hyperscript.config.logAll = true`,
|
||||
# then mutates an element's innerHTML and calls `_hyperscript.processNode`.
|
||||
# Our runtime exposes this via hs-set-log-all! + hs-log-captured; we reuse
|
||||
|
||||
Reference in New Issue
Block a user