HS: MutationObserver mock + on mutation dispatch (+7 tests)
Parser: parse-on-feat now consumes `of FILTER` after `mutation` event-name, where FILTER is `attributes`/`childList`/`characterData` ident or `@a [or @b]*` attr-token chain. Emits :of-filter dict on parts. Compiler: scan-on threads of-filter-info; mutation event-name emits `(do (hs-on …) (hs-on-mutation-attach! TARGET MODE ATTRS))`. Runtime: hs-on-mutation-attach! constructs a real MutationObserver with config matched to filter and dispatches "mutation" event with records detail. Runner: HsMutationObserver mock with global registry; prototype hooks on El.setAttribute/appendChild/removeChild/_setInnerHTML fire matching observers synchronously, with __hsMutationActive guard preventing recursion. Generator: dropped 7 mutation tests from skip-list, added evaluate(setAttribute) and evaluate(appendChild) body patterns. hs-upstream-on: 36/70 → 43/70. Smoke 0-195 unchanged at 170/195. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8849,9 +8849,22 @@
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for attribute mutations"
|
||||
(error "SKIP (skip-list): can listen for attribute mutations"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation of attributes put \"Mutated\" into me")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for attribute mutations on other elements"
|
||||
(error "SKIP (skip-list): can listen for attribute mutations on other elements"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-d1 (dom-create-element "div")) (_el-d2 (dom-create-element "div")))
|
||||
(dom-set-attr _el-d1 "id" "d1")
|
||||
(dom-set-attr _el-d2 "id" "d2")
|
||||
(dom-set-attr _el-d2 "_" "on mutation of attributes from #d1 put \"Mutated\" into me")
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(dom-append (dom-body) _el-d2)
|
||||
(hs-activate! _el-d2)
|
||||
))
|
||||
(deftest "can listen for characterData mutation filter out other mutations"
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
@@ -8867,7 +8880,12 @@
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for childList mutations"
|
||||
(error "SKIP (skip-list): can listen for childList mutations"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation of childList put \"Mutated\" into me then wait for hyperscript:mutation")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for events in another element (lazy)"
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")) (_el-d1 (dom-create-element "div")) (_el-d2 (dom-create-element "div")))
|
||||
@@ -8880,13 +8898,33 @@
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for general mutations"
|
||||
(error "SKIP (skip-list): can listen for general mutations"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation put \"Mutated\" into me then wait for hyperscript:mutation")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for multiple mutations"
|
||||
(error "SKIP (skip-list): can listen for multiple mutations"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation of @foo or @bar put \"Mutated\" into me")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for multiple mutations 2"
|
||||
(error "SKIP (skip-list): can listen for multiple mutations 2"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation of @foo or @bar put \"Mutated\" into me")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for specific attribute mutations"
|
||||
(error "SKIP (skip-list): can listen for specific attribute mutations"))
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
(dom-set-attr _el-div "_" "on mutation of @foo put \"Mutated\" into me")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
))
|
||||
(deftest "can listen for specific attribute mutations and filter out other attribute mutations"
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")))
|
||||
|
||||
Reference in New Issue
Block a user