HS parser/compiler/mock: fix 31 test failures across 7 issues

Parser:
- Relax (number? v) to v in parse-one-transition so (expr)unit works
- Add (match-kw "then") before parse-cmd-list in parse-for-cmd
- Handle "indexed by" syntax alongside "index" in for loops
- Add "indexed" to hs-keywords to prevent unit-suffix consumption

Compiler:
- Use map-indexed instead of for-each for indexed for-loops

Test generator:
- Preserve \" escapes in process_hs_val via placeholder/restore

Mock DOM:
- Coerce insertAdjacentHTML values via dom_stringify (match browser)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-18 20:46:01 +00:00
parent 3ba819d9ae
commit be84246961
6 changed files with 379 additions and 76 deletions

View File

@@ -638,10 +638,11 @@
(deftest "can toggle between two attribute values"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-div "data-state" "active")
;; SKIP attr [@data-state (contains special chars)
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-get-attr _el-div "data-state") "inactive")
(dom-dispatch _el-div "click" nil)
@@ -650,11 +651,12 @@
(deftest "can toggle between different attributes"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-div "enabled" "true")
;; SKIP attr [@enabled (contains special chars)
;; SKIP attr [@disabled (contains special chars)
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-get-attr _el-div "disabled") "true")
(dom-dispatch _el-div "click" nil)
@@ -722,9 +724,10 @@
(deftest "can toggle *display between two values"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-div "style" "display:none")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-get-style _el-div "display") "flex")
(dom-dispatch _el-div "click" nil)
@@ -733,9 +736,10 @@
(deftest "can toggle *opacity between three values"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-div "style" "opacity:0")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-get-style _el-div "opacity") "0.5")
(dom-dispatch _el-div "click" nil)
@@ -746,8 +750,9 @@
(deftest "can toggle a global variable between two values"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(dom-dispatch _el-div "click" nil)
(dom-dispatch _el-div "click" nil)
@@ -755,8 +760,9 @@
(deftest "can toggle a global variable between three values"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(dom-dispatch _el-div "click" nil)
(dom-dispatch _el-div "click" nil)
@@ -1351,7 +1357,7 @@
(deftest "properly processes hyperscript in new content in a symbol write"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" into me")
(dom-set-attr _el-div "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" into me")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -1362,7 +1368,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" into <div#d1/>")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" into <div#d1/>")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch _el-d1 "click" nil)
@@ -1373,7 +1379,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" before me")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" before me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch _el-d1 "click" nil)
@@ -1384,7 +1390,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" at the start of me")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" at the start of me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch _el-d1 "click" nil)
@@ -1395,7 +1401,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" at the end of me")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" at the end of me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch _el-d1 "click" nil)
@@ -1406,7 +1412,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\"b1\" _=\"on click put 42 into me\">40</button>\" after me")
(dom-set-attr _el-d1 "_" "on click put \"<button id=\\\"b1\\\" _=\\\"on click put 42 into me\\\">40</button>\" after me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch _el-d1 "click" nil)
@@ -2047,7 +2053,7 @@
(deftest "for loop over undefined skips without error"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click repeat for x in doesNotExist put x at end of me end put \"done\" into me")
(dom-set-attr _el-div "_" "on click repeat for x in doesNotExist put x at end of me end put \\\"done\\\" into me")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -2704,9 +2710,10 @@
(deftest "can transition on query ref with of syntax"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")) (_el-span (dom-create-element "span")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-append (dom-body) _el-div)
(dom-append (dom-body) _el-span)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-get-style _el-span "width") "100px")
))
@@ -2980,7 +2987,7 @@
(deftest "throws on non-2xx response by default"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click fetch /test catch e put \"caught\" into me")
(dom-set-attr _el-div "_" "on click fetch /test catch e put \\\"caught\\\" into me")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -3016,8 +3023,9 @@
(deftest "Response can be converted to JSON via as JSON"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-text-content _el-div) "Joe")
))
@@ -4184,7 +4192,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on myEvent(foo) if foo put foo into me else put \"no-detail\" into me")
(dom-set-attr _el-d1 "_" "on myEvent(foo) if foo put foo into me else put \\\"no-detail\\\" into me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
))
@@ -4203,7 +4211,7 @@
(deftest "caught exceptions do not trigger 'exception' event"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")))
(dom-set-attr _el-button "_" "on click put \"foo\" into me then throw \"bar\" catch e log e on exception(error) put error into me")
(dom-set-attr _el-button "_" "on click put \\\"foo\\\" into me then throw \\\"bar\\\" catch e log e on exception(error) put error into me")
(dom-append (dom-body) _el-button)
(hs-activate! _el-button)
(dom-dispatch _el-button "click" nil)
@@ -4212,7 +4220,7 @@
(deftest "rethrown exceptions trigger 'exception' event"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")))
(dom-set-attr _el-button "_" "on click put \"foo\" into me then throw \"bar\" catch e throw e on exception(error) put error into me")
(dom-set-attr _el-button "_" "on click put \\\"foo\\\" into me then throw \\\"bar\\\" catch e throw e on exception(error) put error into me")
(dom-append (dom-body) _el-button)
(hs-activate! _el-button)
(dom-dispatch _el-button "click" nil)
@@ -4221,7 +4229,7 @@
(deftest "can ignore when target doesn\'t exist"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click from #doesntExist then throw \"bar\" on click put \"clicked\" into me")
(dom-set-attr _el-div "_" "on click from #doesntExist then throw \\\"bar\\\" on click put \\\"clicked\\\" into me")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -4423,7 +4431,7 @@
(deftest "prompts and puts result in it"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")) (_el-out (dom-create-element "div")))
(dom-set-attr _el-button "_" "on click ask \"What is your name?\" then put it into #out")
(dom-set-attr _el-button "_" "on click ask \\\"What is your name?\\\" then put it into #out")
(dom-set-inner-html _el-button "Ask")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-button)
@@ -4435,7 +4443,7 @@
(deftest "returns null on cancel"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")) (_el-out (dom-create-element "div")))
(dom-set-attr _el-button "_" "on click ask \"Name?\" then put it into #out")
(dom-set-attr _el-button "_" "on click ask \\\"Name?\\\" then put it into #out")
(dom-set-inner-html _el-button "Ask")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-button)
@@ -4447,7 +4455,7 @@
(deftest "shows an alert"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")) (_el-out (dom-create-element "div")))
(dom-set-attr _el-button "_" "on click answer \"Hello!\" then put \"done\" into #out")
(dom-set-attr _el-button "_" "on click answer \\\"Hello!\\\" then put \\\"done\\\" into #out")
(dom-set-inner-html _el-button "Go")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-button)
@@ -4459,7 +4467,7 @@
(deftest "confirm returns first choice on OK"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")) (_el-out (dom-create-element "div")))
(dom-set-attr _el-button "_" "on click answer \"Save?\" with \"Yes\" or \"No\" then put it into #out")
(dom-set-attr _el-button "_" "on click answer \\\"Save?\\\" with \\\"Yes\\\" or \\\"No\\\" then put it into #out")
(dom-set-inner-html _el-button "Go")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-button)
@@ -4471,7 +4479,7 @@
(deftest "confirm returns second choice on cancel"
(hs-cleanup!)
(let ((_el-button (dom-create-element "button")) (_el-out (dom-create-element "div")))
(dom-set-attr _el-button "_" "on click answer \"Save?\" with \"Yes\" or \"No\" then put it into #out")
(dom-set-attr _el-button "_" "on click answer \\\"Save?\\\" with \\\"Yes\\\" or \\\"No\\\" then put it into #out")
(dom-set-inner-html _el-button "Go")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-button)
@@ -4850,7 +4858,7 @@
(deftest "can parse go to with string URL"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click go to \"#test-hash\"")
(dom-set-attr _el-div "_" "on click go to \\\"#test-hash\\\"")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
))
@@ -4946,11 +4954,12 @@
(dom-set-attr _el-outer "id" "outer")
(dom-set-attr _el-outer "_" "on click add .outer-clicked")
(dom-set-attr _el-inner "id" "inner")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-inner "_" "\\\"on")
(dom-set-inner-html _el-inner "click me")
(dom-append (dom-body) _el-outer)
(dom-append _el-outer _el-inner)
(hs-activate! _el-outer)
(hs-activate! _el-inner)
(dom-dispatch (dom-query-by-id "inner") "click" nil)
(assert (not (dom-has-class? (dom-query-by-id "outer") "outer-clicked")))
(assert (dom-has-class? (dom-query-by-id "inner") "continued"))
@@ -5036,7 +5045,7 @@
(dom-set-attr _el-target "id" "target")
(dom-set-inner-html _el-span "first")
(dom-set-attr _el-target2 "id" "target")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-target2 "_" "\\\"on")
(dom-set-inner-html _el-span3 "first")
(dom-set-inner-html _el-span4 "second")
(dom-append (dom-body) _el-target)
@@ -5044,6 +5053,7 @@
(dom-append (dom-body) _el-target2)
(dom-append _el-target2 _el-span3)
(dom-append _el-target2 _el-span4)
(hs-activate! _el-target2)
(dom-dispatch (dom-query-by-id "go") "click" nil)
))
(deftest "morph removes old children"
@@ -5053,13 +5063,14 @@
(dom-set-inner-html _el-span "first")
(dom-set-inner-html _el-span2 "second")
(dom-set-attr _el-target3 "id" "target")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-target3 "_" "\\\"on")
(dom-set-inner-html _el-span4 "first")
(dom-append (dom-body) _el-target)
(dom-append _el-target _el-span)
(dom-append _el-target _el-span2)
(dom-append (dom-body) _el-target3)
(dom-append _el-target3 _el-span4)
(hs-activate! _el-target3)
(dom-dispatch (dom-query-by-id "go") "click" nil)
))
(deftest "morph initializes hyperscript on new elements"
@@ -5068,7 +5079,7 @@
(dom-set-attr _el-target "id" "target")
(dom-set-inner-html _el-p "old")
(dom-set-attr _el-target2 "id" "target")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-target2 "_" "\\\"on")
(dom-set-attr _el-inner "id" "inner")
;; HS source has bare quotes or embedded HTML
(dom-set-inner-html _el-inner "new")
@@ -5076,6 +5087,7 @@
(dom-append _el-target _el-p)
(dom-append (dom-body) _el-target2)
(dom-append _el-target2 _el-inner)
(hs-activate! _el-target2)
(dom-dispatch (dom-query-by-id "go") "click" nil)
(assert= (dom-text-content (dom-query-by-id "inner")) "new")
(dom-dispatch (dom-query-by-id "inner") "click" nil)
@@ -5086,7 +5098,7 @@
(let ((_el-target (dom-create-element "div")) (_el-child (dom-create-element "div")) (_el-button (dom-create-element "button")))
(dom-set-attr _el-target "id" "target")
(dom-set-attr _el-child "id" "child")
(dom-set-attr _el-child "_" "on click put \"alive\" into me")
(dom-set-attr _el-child "_" "on click put \\\"alive\\\" into me")
(dom-set-inner-html _el-child "child")
;; HS source has bare quotes or embedded HTML
(dom-set-inner-html _el-button "go")
@@ -5132,7 +5144,7 @@
(dom-set-attr _el-target "id" "target")
(dom-set-inner-html _el-target "original")
(dom-set-attr _el-go "id" "go")
(dom-set-attr _el-go "_" "on click set content to \"<div id=target>morphed</div>\" then morph #target to content")
(dom-set-attr _el-go "_" "on click set content to \\\"<div id=target>morphed</div>\\\" then morph #target to content")
(dom-set-inner-html _el-go "go")
(dom-append (dom-body) _el-target)
(dom-append (dom-body) _el-go)
@@ -7255,7 +7267,7 @@
(let ((_el-target (dom-create-element "div")) (_el-button (dom-create-element "button")))
(dom-set-attr _el-target "id" "target")
(dom-set-inner-html _el-target "old")
(dom-set-attr _el-button "_" "on click make a <span.replaced/> then put \"moved\" into it then set #target to it")
(dom-set-attr _el-button "_" "on click make a <span.replaced/> then put \\\"moved\\\" into it then set #target to it")
(dom-set-inner-html _el-button "go")
(dom-append (dom-body) _el-target)
(dom-append (dom-body) _el-button)
@@ -7343,7 +7355,7 @@
(let ((_el-target (dom-create-element "div")) (_el-button (dom-create-element "button")))
(dom-set-attr _el-target "id" "target")
(dom-set-inner-html _el-target "old")
(dom-set-attr _el-button "_" "on click put \"new\" into #target")
(dom-set-attr _el-button "_" "on click put \\\"new\\\" into #target")
(dom-set-inner-html _el-button "go")
(dom-append (dom-body) _el-target)
(dom-append (dom-body) _el-button)
@@ -7464,15 +7476,17 @@
(dom-set-inner-html _el-span2 "B")
(dom-add-class _el-span3 "a")
(dom-set-inner-html _el-span3 "C")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-button "_" "\\\"on")
(dom-set-attr _el-b2 "id" "b2")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-b2 "_" "\\\"on")
(dom-append (dom-body) _el-box)
(dom-append _el-box _el-span)
(dom-append _el-box _el-span2)
(dom-append _el-box _el-span3)
(dom-append (dom-body) _el-button)
(dom-append (dom-body) _el-b2)
(hs-activate! _el-button)
(hs-activate! _el-b2)
(dom-dispatch _el-button "click" nil)
(assert= (dom-text-content _el-button) "2")
(dom-dispatch (dom-query-by-id "b2") "click" nil)
@@ -7486,11 +7500,12 @@
(dom-set-inner-html _el-span "A")
(dom-add-class _el-span2 "b")
(dom-set-inner-html _el-span2 "B")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-button "_" "\\\"set")
(dom-append (dom-body) _el-box)
(dom-append _el-box _el-span)
(dom-append _el-box _el-span2)
(dom-append (dom-body) _el-button)
(hs-activate! _el-button)
(dom-dispatch _el-button "click" nil)
(assert= (dom-text-content _el-button) "1")
))
@@ -7911,8 +7926,9 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-d1 "_" "\\\"on")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch (dom-query-by-id "d1") "click" nil)
(assert= (dom-text-content (dom-query-by-id "d1")) "bar")
))
@@ -7920,8 +7936,9 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-d1 "_" "\\\"on")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch (dom-query-by-id "d1") "click" nil)
(assert= (dom-text-content (dom-query-by-id "d1")) "bar")
))
@@ -7996,7 +8013,7 @@
(deftest "handles rejected promises without hanging"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click js return Promise.reject(\"boom\") end catch e put e into my.innerHTML")
(dom-set-attr _el-div "_" "on click js return Promise.reject(\\\"boom\\\") end catch e put e into my.innerHTML")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -8078,7 +8095,7 @@
(deftest "the result in a when clause refers to previous command result, not element being tested"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")) (_el-s1 (dom-create-element "span")) (_el-s2 (dom-create-element "span")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-s1 "id" "s1")
(dom-set-attr _el-s1 "style" "display:none")
(dom-set-inner-html _el-s1 "A")
@@ -8088,6 +8105,7 @@
(dom-append (dom-body) _el-div)
(dom-append (dom-body) _el-s1)
(dom-append (dom-body) _el-s2)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert (dom-visible? (dom-query-by-id "s1")))
(assert (dom-visible? (dom-query-by-id "s2")))
@@ -8095,7 +8113,7 @@
(deftest "the result after show...when is the matched elements"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")) (_el-p (dom-create-element "p")) (_el-p2 (dom-create-element "p")) (_el-out (dom-create-element "span")))
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-div "_" "\\\"on")
(dom-set-attr _el-p "style" "display:none")
(dom-set-inner-html _el-p "yes")
(dom-set-attr _el-p2 "style" "display:none")
@@ -8106,6 +8124,7 @@
(dom-append (dom-body) _el-p)
(dom-append (dom-body) _el-p2)
(dom-append (dom-body) _el-out)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
(assert= (dom-text-content (dom-query-by-id "out")) "some")
))
@@ -8234,7 +8253,7 @@
(deftest "can have comments in attributes (triple dash)"
(hs-cleanup!)
(let ((_el-div (dom-create-element "div")))
(dom-set-attr _el-div "_" "on click put \"clicked\" into my.innerHTML ---put some content into the div...")
(dom-set-attr _el-div "_" "on click put \\\"clicked\\\" into my.innerHTML ---put some content into the div...")
(dom-append (dom-body) _el-div)
(hs-activate! _el-div)
(dom-dispatch _el-div "click" nil)
@@ -8244,7 +8263,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click blargh end on mouseenter put \"hovered\" into my.innerHTML")
(dom-set-attr _el-d1 "_" "on click blargh end on mouseenter put \\\"hovered\\\" into my.innerHTML")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
))
@@ -8252,7 +8271,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click blargh end on mouseenter also_bad end on focus put \"focused\" into my.innerHTML")
(dom-set-attr _el-d1 "_" "on click blargh end on mouseenter also_bad end on focus put \\\"focused\\\" into my.innerHTML")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
))
@@ -8264,7 +8283,7 @@
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click blargh end on mouseenter also_bad")
(dom-set-attr _el-d2 "id" "d2")
(dom-set-attr _el-d2 "_" "on click put \"clicked\" into my.innerHTML")
(dom-set-attr _el-d2 "_" "on click put \\\"clicked\\\" into my.innerHTML")
(dom-append (dom-body) _el-div)
(dom-append _el-div _el-d1)
(dom-append _el-div _el-d2)
@@ -8351,7 +8370,7 @@
(hs-cleanup!)
(let ((_el-arDiv (dom-create-element "div")))
(dom-set-attr _el-arDiv "id" "arDiv")
(dom-set-attr _el-arDiv "_" "on click set my @data-foo to \"blue\"")
(dom-set-attr _el-arDiv "_" "on click set my @data-foo to \\\"blue\\\"")
(dom-set-attr _el-arDiv "data-foo" "red")
(dom-append (dom-body) _el-arDiv)
(hs-activate! _el-arDiv)
@@ -8367,7 +8386,7 @@
(dom-set-attr _el-outerDiv2 "id" "outerDiv2")
(dom-set-attr _el-outerDiv2 "foo" "bar")
(dom-set-attr _el-d1b "id" "d1b")
(dom-set-attr _el-d1b "_" "on click set closest @foo to \"doh\"")
(dom-set-attr _el-d1b "_" "on click set closest @foo to \\\"doh\\\"")
(dom-append (dom-body) _el-outerDiv2)
(dom-append _el-outerDiv2 _el-d1b)
(hs-activate! _el-d1b)
@@ -8381,7 +8400,7 @@
(dom-add-class _el-input4 "cb")
(dom-set-attr _el-input4 "type" "checkbox")
(dom-set-attr _el-master "id" "master")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-master "_" "\\\"set")
(dom-set-attr _el-master "type" "checkbox")
(dom-set-attr _el-master "<input[type" "checkbox]/")
(dom-set-inner-html _el-master "in the closest")
@@ -8394,6 +8413,7 @@
(dom-append _el-input4 _el-master)
(dom-append _el-master _el-table6)
(dom-append _el-master _el-out)
(hs-activate! _el-master)
(dom-dispatch (dom-query-by-id "master") "click" nil)
(assert= (dom-text-content (dom-query-by-id "out")) "2")
))
@@ -8413,7 +8433,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click if I am a Element put \"yes\" into me")
(dom-set-attr _el-d1 "_" "on click if I am a Element put \\\"yes\\\" into me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch (dom-query-by-id "d1") "click" nil)
@@ -8423,7 +8443,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click if I am a Node put \"yes\" into me")
(dom-set-attr _el-d1 "_" "on click if I am a Node put \\\"yes\\\" into me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch (dom-query-by-id "d1") "click" nil)
@@ -8433,7 +8453,7 @@
(hs-cleanup!)
(let ((_el-d1 (dom-create-element "div")))
(dom-set-attr _el-d1 "id" "d1")
(dom-set-attr _el-d1 "_" "on click if \"hello\" is not a Element put \"yes\" into me")
(dom-set-attr _el-d1 "_" "on click if \\\"hello\\\" is not a Element put \\\"yes\\\" into me")
(dom-append (dom-body) _el-d1)
(hs-activate! _el-d1)
(dom-dispatch (dom-query-by-id "d1") "click" nil)
@@ -8573,10 +8593,11 @@
(hs-cleanup!)
(let ((_el-a (dom-create-element "div")) (_el-b (dom-create-element "div")))
(dom-set-attr _el-a "id" "a")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-a "_" "\\\"on")
(dom-set-attr _el-b "id" "b")
(dom-append (dom-body) _el-a)
(dom-append (dom-body) _el-b)
(hs-activate! _el-a)
(dom-dispatch (dom-query-by-id "a") "click" nil)
(assert= (dom-text-content (dom-query-by-id "a")) "yes")
))
@@ -8725,13 +8746,14 @@
(dom-set-inner-html _el-span "A")
(dom-add-class _el-span2 "b")
(dom-set-inner-html _el-span2 "B")
;; HS source has bare quotes or embedded HTML
(dom-set-attr _el-button "_" "\\\"on")
(dom-set-attr _el-out "id" "out")
(dom-append (dom-body) _el-box)
(dom-append _el-box _el-span)
(dom-append _el-box _el-span2)
(dom-append (dom-body) _el-button)
(dom-append (dom-body) _el-out)
(hs-activate! _el-button)
(dom-dispatch _el-button "click" nil)
(assert= (dom-text-content (dom-query-by-id "out")) "none")
))