Non-mutating m.fragment/m.trust references

This commit is contained in:
Barney Carroll 2021-04-15 08:46:26 +01:00 committed by Stephan Hoyer
parent a3983c9655
commit d021271be8
13 changed files with 130 additions and 130 deletions

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.trust = require("../../render/trust") var trust = require("../../render/trust")
o.spec("attributes", function() { o.spec("attributes", function() {
var $window, root, render var $window, root, render
@ -678,7 +678,7 @@ o.spec("attributes", function() {
o(succeeded).equals(true) o(succeeded).equals(true)
}) })
o("tolerating trusted content", function() { o("tolerating trusted content", function() {
var div = m("div", {contenteditable: true}, m.trust("<a></a>")) var div = m("div", {contenteditable: true}, trust("<a></a>"))
var succeeded = false var succeeded = false
try { try {

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("createFragment", function() { o.spec("createFragment", function() {
var $window, root, render var $window, root, render
@ -15,27 +15,27 @@ o.spec("createFragment", function() {
}) })
o("creates fragment", function() { o("creates fragment", function() {
var vnode = m.fragment(m("a")) var vnode = fragment(m("a"))
render(root, vnode) render(root, vnode)
o(vnode.dom.nodeName).equals("A") o(vnode.dom.nodeName).equals("A")
}) })
o("handles empty fragment", function() { o("handles empty fragment", function() {
var vnode = m.fragment() var vnode = fragment()
render(root, vnode) render(root, vnode)
o(vnode.dom).equals(null) o(vnode.dom).equals(null)
o(vnode.domSize).equals(0) o(vnode.domSize).equals(0)
}) })
o("handles childless fragment", function() { o("handles childless fragment", function() {
var vnode = m.fragment() var vnode = fragment()
render(root, vnode) render(root, vnode)
o(vnode.dom).equals(null) o(vnode.dom).equals(null)
o(vnode.domSize).equals(0) o(vnode.domSize).equals(0)
}) })
o("handles multiple children", function() { o("handles multiple children", function() {
var vnode = m.fragment(m("a"), m("b")) var vnode = fragment(m("a"), m("b"))
render(root, vnode) render(root, vnode)
o(vnode.domSize).equals(2) o(vnode.domSize).equals(2)
@ -43,7 +43,7 @@ o.spec("createFragment", function() {
o(vnode.dom.nextSibling.nodeName).equals("B") o(vnode.dom.nextSibling.nodeName).equals("B")
}) })
o("handles td", function() { o("handles td", function() {
var vnode = m.fragment(m("td")) var vnode = fragment(m("td"))
render(root, vnode) render(root, vnode)
o(vnode.dom).notEquals(null) o(vnode.dom).notEquals(null)

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.trust = require("../../render/trust") var trust = require("../../render/trust")
o.spec("createHTML", function() { o.spec("createHTML", function() {
var $window, root, render var $window, root, render
@ -15,26 +15,26 @@ o.spec("createHTML", function() {
}) })
o("creates HTML", function() { o("creates HTML", function() {
var vnode = m.trust("<a></a>") var vnode = trust("<a></a>")
render(root, vnode) render(root, vnode)
o(vnode.dom.nodeName).equals("A") o(vnode.dom.nodeName).equals("A")
}) })
o("creates text HTML", function() { o("creates text HTML", function() {
var vnode = m.trust("a") var vnode = trust("a")
render(root, vnode) render(root, vnode)
o(vnode.dom.nodeValue).equals("a") o(vnode.dom.nodeValue).equals("a")
}) })
o("handles empty HTML", function() { o("handles empty HTML", function() {
var vnode = m.trust("") var vnode = trust("")
render(root, vnode) render(root, vnode)
o(vnode.dom).equals(null) o(vnode.dom).equals(null)
o(vnode.domSize).equals(0) o(vnode.domSize).equals(0)
}) })
o("handles multiple children in HTML", function() { o("handles multiple children in HTML", function() {
var vnode = m.trust("<a></a><b></b>") var vnode = trust("<a></a><b></b>")
render(root, vnode) render(root, vnode)
o(vnode.domSize).equals(2) o(vnode.domSize).equals(2)
@ -47,34 +47,34 @@ o.spec("createHTML", function() {
var tags = ["a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", "b", "base", "basefont", "bdi", "bdo", "big", "blockquote", /*"body",*/ "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "datalist", "dd", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "font", "footer", "form", /*"frame", "frameset",*/ "h1", "h2", "h3", "h4", "h5", "h6", /*"head",*/ "header", "hr", /*"html",*/ "i", "iframe", "img", "input", "ins", "kbd", /*"keygen", */"label", "legend", "li", "link", "main", "map", "mark", "menu", "menuitem", "meta", "meter", "nav", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"] var tags = ["a", "abbr", "acronym", "address", "applet", "area", "article", "aside", "audio", "b", "base", "basefont", "bdi", "bdo", "big", "blockquote", /*"body",*/ "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "datalist", "dd", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "font", "footer", "form", /*"frame", "frameset",*/ "h1", "h2", "h3", "h4", "h5", "h6", /*"head",*/ "header", "hr", /*"html",*/ "i", "iframe", "img", "input", "ins", "kbd", /*"keygen", */"label", "legend", "li", "link", "main", "map", "mark", "menu", "menuitem", "meta", "meter", "nav", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]
tags.forEach(function(tag) { tags.forEach(function(tag) {
var vnode = m.trust("<" + tag + " />") var vnode = trust("<" + tag + " />")
render(root, vnode) render(root, vnode)
o(vnode.dom.nodeName).equals(tag.toUpperCase()) o(vnode.dom.nodeName).equals(tag.toUpperCase())
}) })
}) })
o("creates SVG", function() { o("creates SVG", function() {
var vnode = m.trust("<g></g>") var vnode = trust("<g></g>")
render(root, m("svg", vnode)) render(root, m("svg", vnode))
o(vnode.dom.nodeName).equals("g") o(vnode.dom.nodeName).equals("g")
o(vnode.dom.namespaceURI).equals("http://www.w3.org/2000/svg") o(vnode.dom.namespaceURI).equals("http://www.w3.org/2000/svg")
}) })
o("creates text SVG", function() { o("creates text SVG", function() {
var vnode = m.trust("a") var vnode = trust("a")
render(root, m("svg", vnode)) render(root, m("svg", vnode))
o(vnode.dom.nodeValue).equals("a") o(vnode.dom.nodeValue).equals("a")
}) })
o("handles empty SVG", function() { o("handles empty SVG", function() {
var vnode = m.trust("") var vnode = trust("")
render(root, m("svg", vnode)) render(root, m("svg", vnode))
o(vnode.dom).equals(null) o(vnode.dom).equals(null)
o(vnode.domSize).equals(0) o(vnode.domSize).equals(0)
}) })
o("handles multiple children in SVG", function() { o("handles multiple children in SVG", function() {
var vnode = m.trust("<g></g><text></text>") var vnode = trust("<g></g><text></text>")
render(root, m("svg", vnode)) render(root, m("svg", vnode))
o(vnode.domSize).equals(2) o(vnode.domSize).equals(2)
@ -84,7 +84,7 @@ o.spec("createHTML", function() {
o(vnode.dom.nextSibling.namespaceURI).equals("http://www.w3.org/2000/svg") o(vnode.dom.nextSibling.namespaceURI).equals("http://www.w3.org/2000/svg")
}) })
o("creates the dom correctly with a contenteditable parent", function() { o("creates the dom correctly with a contenteditable parent", function() {
var div = m("div", {contenteditable: true}, m.trust("<a></a>")) var div = m("div", {contenteditable: true}, trust("<a></a>"))
render(root, div) render(root, div)
var tags = [] var tags = []

View file

@ -4,8 +4,8 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
m.trust = require("../../render/trust") var trust = require("../../render/trust")
o.spec("createNodes", function() { o.spec("createNodes", function() {
var $window, root, render var $window, root, render
@ -19,8 +19,8 @@ o.spec("createNodes", function() {
var vnodes = [ var vnodes = [
m("a"), m("a"),
"b", "b",
m.trust("c"), trust("c"),
m.fragment("d"), fragment("d"),
] ]
render(root, vnodes) render(root, vnodes)
@ -35,8 +35,8 @@ o.spec("createNodes", function() {
m("a"), m("a"),
"b", "b",
null, null,
m.trust("c"), trust("c"),
m.fragment("d"), fragment("d"),
] ]
render(root, vnodes) render(root, vnodes)
@ -51,8 +51,8 @@ o.spec("createNodes", function() {
m("a"), m("a"),
"b", "b",
undefined, undefined,
m.trust("c"), trust("c"),
m.fragment("d"), fragment("d"),
] ]
render(root, vnodes) render(root, vnodes)

View file

@ -7,7 +7,7 @@ var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var Promise = require("../../promise/promise") var Promise = require("../../promise/promise")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("onbeforeremove", function() { o.spec("onbeforeremove", function() {
var $window, root, render var $window, root, render
@ -58,7 +58,7 @@ o.spec("onbeforeremove", function() {
} }
}) })
o("calls onbeforeremove when removing fragment", function(done) { o("calls onbeforeremove when removing fragment", function(done) {
var vnode = m.fragment({onbeforeremove: remove}, m("div")) var vnode = fragment({onbeforeremove: remove}, m("div"))
render(root, vnode) render(root, vnode)
render(root, []) render(root, [])
@ -77,7 +77,7 @@ o.spec("onbeforeremove", function() {
}) })
o("calls remove after onbeforeremove resolves", function(done) { o("calls remove after onbeforeremove resolves", function(done) {
var spy = o.spy() var spy = o.spy()
var vnode = m.fragment({onbeforeremove: remove, onremove: spy}, "a") var vnode = fragment({onbeforeremove: remove, onremove: spy}, "a")
render(root, vnode) render(root, vnode)
render(root, []) render(root, [])

View file

@ -5,7 +5,7 @@ var components = require("../../test-utils/components")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/hyperscript") var fragment = require("../../render/fragment")
o.spec("onbeforeupdate", function() { o.spec("onbeforeupdate", function() {
var $window, root, render var $window, root, render
@ -28,8 +28,8 @@ o.spec("onbeforeupdate", function() {
o("prevents update in fragment", function() { o("prevents update in fragment", function() {
var onbeforeupdate = function() {return false} var onbeforeupdate = function() {return false}
var vnode = m.fragment({onbeforeupdate: onbeforeupdate}, "a") var vnode = fragment({onbeforeupdate: onbeforeupdate}, "a")
var updated = m.fragment({onbeforeupdate: onbeforeupdate}, "b") var updated = fragment({onbeforeupdate: onbeforeupdate}, "b")
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("oncreate", function() { o.spec("oncreate", function() {
var $window, root, render var $window, root, render
@ -26,7 +26,7 @@ o.spec("oncreate", function() {
}) })
o("calls oncreate when creating fragment", function() { o("calls oncreate when creating fragment", function() {
var callback = o.spy() var callback = o.spy()
var vnode = m.fragment({oncreate: callback}) var vnode = fragment({oncreate: callback})
render(root, vnode) render(root, vnode)

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/hyperscript") var fragment = require("../../render/fragment")
o.spec("oninit", function() { o.spec("oninit", function() {
var $window, root, render var $window, root, render
@ -26,7 +26,7 @@ o.spec("oninit", function() {
}) })
o("calls oninit when creating fragment", function() { o("calls oninit when creating fragment", function() {
var callback = o.spy() var callback = o.spy()
var vnode = m.fragment({oninit: callback}) var vnode = fragment({oninit: callback})
render(root, vnode) render(root, vnode)

View file

@ -5,7 +5,7 @@ var components = require("../../test-utils/components")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("onremove", function() { o.spec("onremove", function() {
var $window, root, render var $window, root, render
@ -51,7 +51,7 @@ o.spec("onremove", function() {
}) })
o("calls onremove when removing fragment", function() { o("calls onremove when removing fragment", function() {
var remove = o.spy() var remove = o.spy()
var vnode = m.fragment({onremove: remove}) var vnode = fragment({onremove: remove})
render(root, vnode) render(root, vnode)
render(root, []) render(root, [])
@ -231,9 +231,9 @@ o.spec("onremove", function() {
function update(id, showParent, showChild) { function update(id, showParent, showChild) {
render(root, render(root,
m("div", m("div",
showParent && m.fragment( showParent && fragment(
"", // Required "", // Required
showChild && m.fragment({ showChild && fragment({
onbeforeremove: function () { onbeforeremove: function () {
return {then: function (r) { resolve = r }} return {then: function (r) { resolve = r }}
}, },
@ -334,9 +334,9 @@ o.spec("onremove", function() {
function update(id, showParent, showChild) { function update(id, showParent, showChild) {
render(root, render(root,
m("div", m("div",
showParent && m.fragment( showParent && fragment(
"", // Required "", // Required
showChild && m.fragment({ showChild && fragment({
onbeforeremove: function () { onbeforeremove: function () {
return {then: function (res, rej) { return {then: function (res, rej) {
resolve = res resolve = res

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("onupdate", function() { o.spec("onupdate", function() {
var $window, root, render var $window, root, render
@ -114,8 +114,8 @@ o.spec("onupdate", function() {
o("calls onupdate when updating fragment", function() { o("calls onupdate when updating fragment", function() {
var create = o.spy() var create = o.spy()
var update = o.spy() var update = o.spy()
var vnode = m.fragment({onupdate: create}) var vnode = fragment({onupdate: create})
var updated = m.fragment({onupdate: update}) var updated = fragment({onupdate: update})
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
o.spec("updateFragment", function() { o.spec("updateFragment", function() {
var $window, root, render var $window, root, render
@ -15,8 +15,8 @@ o.spec("updateFragment", function() {
}) })
o("updates fragment", function() { o("updates fragment", function() {
var vnode = m.fragment(m("a")) var vnode = fragment(m("a"))
var updated = m.fragment(m("b")) var updated = fragment(m("b"))
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -25,8 +25,8 @@ o.spec("updateFragment", function() {
o(updated.dom.nodeName).equals("B") o(updated.dom.nodeName).equals("B")
}) })
o("adds els", function() { o("adds els", function() {
var vnode = m.fragment() var vnode = fragment()
var updated = m.fragment(m("a"), m("b")) var updated = fragment(m("a"), m("b"))
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -38,8 +38,8 @@ o.spec("updateFragment", function() {
o(root.childNodes[1].nodeName).equals("B") o(root.childNodes[1].nodeName).equals("B")
}) })
o("removes els", function() { o("removes els", function() {
var vnode = m.fragment(m("a"), m("b")) var vnode = fragment(m("a"), m("b"))
var updated = m.fragment() var updated = fragment()
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -49,8 +49,8 @@ o.spec("updateFragment", function() {
o(root.childNodes.length).equals(0) o(root.childNodes.length).equals(0)
}) })
o("updates from childless fragment", function() { o("updates from childless fragment", function() {
var vnode = m.fragment() var vnode = fragment()
var updated = m.fragment(m("a")) var updated = fragment(m("a"))
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -59,8 +59,8 @@ o.spec("updateFragment", function() {
o(updated.dom.nodeName).equals("A") o(updated.dom.nodeName).equals("A")
}) })
o("updates to childless fragment", function() { o("updates to childless fragment", function() {
var vnode = m.fragment(m("a")) var vnode = fragment(m("a"))
var updated = m.fragment() var updated = fragment()
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)

View file

@ -4,7 +4,7 @@ var o = require("ospec")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.trust = require("../../render/trust") var trust = require("../../render/trust")
o.spec("updateHTML", function() { o.spec("updateHTML", function() {
var $window, root, render var $window, root, render
@ -15,8 +15,8 @@ o.spec("updateHTML", function() {
}) })
o("updates html", function() { o("updates html", function() {
var vnode = m.trust("a") var vnode = trust("a")
var updated = m.trust("b") var updated = trust("b")
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -26,8 +26,8 @@ o.spec("updateHTML", function() {
o(updated.dom.nodeValue).equals("b") o(updated.dom.nodeValue).equals("b")
}) })
o("adds html", function() { o("adds html", function() {
var vnode = m.trust("") var vnode = trust("")
var updated = m.trust("<a></a><b></b>") var updated = trust("<a></a><b></b>")
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -39,8 +39,8 @@ o.spec("updateHTML", function() {
o(root.childNodes[1].nodeName).equals("B") o(root.childNodes[1].nodeName).equals("B")
}) })
o("removes html", function() { o("removes html", function() {
var vnode = m.trust("<a></a><b></b>") var vnode = trust("<a></a><b></b>")
var updated = m.trust("") var updated = trust("")
render(root, vnode) render(root, vnode)
render(root, updated) render(root, updated)
@ -60,14 +60,14 @@ o.spec("updateHTML", function() {
return result return result
} }
o("updates the dom correctly with a contenteditable parent", function() { o("updates the dom correctly with a contenteditable parent", function() {
var div = m("div", {contenteditable: true}, m.trust("<a></a>")) var div = m("div", {contenteditable: true}, trust("<a></a>"))
render(root, div) render(root, div)
o(childKeysOf(div.dom, "nodeName")).deepEquals(["A"]) o(childKeysOf(div.dom, "nodeName")).deepEquals(["A"])
}) })
o("updates dom with multiple text children", function() { o("updates dom with multiple text children", function() {
var vnode = ["a", m.trust("<a></a>"), m.trust("<b></b>")] var vnode = ["a", trust("<a></a>"), trust("<b></b>")]
var replacement = ["a", m.trust("<c></c>"), m.trust("<d></d>")] var replacement = ["a", trust("<c></c>"), trust("<d></d>")]
render(root, vnode) render(root, vnode)
render(root, replacement) render(root, replacement)
@ -76,12 +76,12 @@ o.spec("updateHTML", function() {
}) })
o("updates dom with multiple text children in other parents", function() { o("updates dom with multiple text children in other parents", function() {
var vnode = [ var vnode = [
m("div", "a", m.trust("<a></a>")), m("div", "a", trust("<a></a>")),
m("div", "b", m.trust("<b></b>")), m("div", "b", trust("<b></b>")),
] ]
var replacement = [ var replacement = [
m("div", "c", m.trust("<c></c>")), m("div", "c", trust("<c></c>")),
m("div", "d", m.trust("<d></d>")), m("div", "d", trust("<d></d>")),
] ]
render(root, vnode) render(root, vnode)
@ -95,20 +95,20 @@ o.spec("updateHTML", function() {
}) })
o("correctly diffs if followed by another trusted vnode", function() { o("correctly diffs if followed by another trusted vnode", function() {
render(root, [ render(root, [
m.trust("<span>A</span>"), trust("<span>A</span>"),
m.trust("<span>A</span>"), trust("<span>A</span>"),
]) ])
o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"]) o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"])
o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["A", "A"]) o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["A", "A"])
render(root, [ render(root, [
m.trust("<span>B</span>"), trust("<span>B</span>"),
m.trust("<span>A</span>"), trust("<span>A</span>"),
]) ])
o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"]) o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"])
o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["B", "A"]) o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["B", "A"])
render(root, [ render(root, [
m.trust("<span>B</span>"), trust("<span>B</span>"),
m.trust("<span>B</span>"), trust("<span>B</span>"),
]) ])
o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"]) o(childKeysOf(root, "nodeName")).deepEquals(["SPAN", "SPAN"])
o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["B", "B"]) o(childKeysOf(root, "firstChild.nodeValue")).deepEquals(["B", "B"])

View file

@ -5,8 +5,8 @@ var components = require("../../test-utils/components")
var domMock = require("../../test-utils/domMock") var domMock = require("../../test-utils/domMock")
var vdom = require("../../render/render") var vdom = require("../../render/render")
var m = require("../../render/hyperscript") var m = require("../../render/hyperscript")
m.fragment = require("../../render/fragment") var fragment = require("../../render/fragment")
m.trust = require("../../render/trust") var trust = require("../../render/trust")
function vnodify(str) { function vnodify(str) {
return str.split(",").map(function(k) {return m(k, {key: k})}) return str.split(",").map(function(k) {return m(k, {key: k})})
@ -77,8 +77,8 @@ o.spec("updateNodes", function() {
o(root.childNodes[0].nodeValue).equals("0") o(root.childNodes[0].nodeValue).equals("0")
}) })
o("handles html noop", function() { o("handles html noop", function() {
var vnodes = m.trust("a") var vnodes = trust("a")
var updated = m.trust("a") var updated = trust("a")
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -88,8 +88,8 @@ o.spec("updateNodes", function() {
o(updated.dom).equals(root.childNodes[0]) o(updated.dom).equals(root.childNodes[0])
}) })
o("handles fragment noop", function() { o("handles fragment noop", function() {
var vnodes = m.fragment(m("a")) var vnodes = fragment(m("a"))
var updated = m.fragment(m("a")) var updated = fragment(m("a"))
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -99,8 +99,8 @@ o.spec("updateNodes", function() {
o(updated.dom).equals(root.childNodes[0]) o(updated.dom).equals(root.childNodes[0])
}) })
o("handles fragment noop w/ text child", function() { o("handles fragment noop w/ text child", function() {
var vnodes = m.fragment("a") var vnodes = fragment("a")
var updated = m.fragment("a") var updated = fragment("a")
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -284,8 +284,8 @@ o.spec("updateNodes", function() {
o(updated[2].dom).equals(root.childNodes[2]) o(updated[2].dom).equals(root.childNodes[2])
}) })
o("adds to empty fragment followed by el", function() { o("adds to empty fragment followed by el", function() {
var vnodes = [m.fragment({key: 1}), m("b", {key: 2})] var vnodes = [fragment({key: 1}), m("b", {key: 2})]
var updated = [m.fragment({key: 1}, m("a")), m("b", {key: 2})] var updated = [fragment({key: 1}, m("a")), m("b", {key: 2})]
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -297,8 +297,8 @@ o.spec("updateNodes", function() {
o(updated[1].dom).equals(root.childNodes[1]) o(updated[1].dom).equals(root.childNodes[1])
}) })
o("reverses followed by el", function() { o("reverses followed by el", function() {
var vnodes = [m.fragment({key: 1}, m("a", {key: 2}), m("b", {key: 3})), m("i", {key: 4})] var vnodes = [fragment({key: 1}, m("a", {key: 2}), m("b", {key: 3})), m("i", {key: 4})]
var updated = [m.fragment({key: 1}, m("b", {key: 3}), m("a", {key: 2})), m("i", {key: 4})] var updated = [fragment({key: 1}, m("b", {key: 3}), m("a", {key: 2})), m("i", {key: 4})]
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -312,8 +312,8 @@ o.spec("updateNodes", function() {
o(updated[1].dom).equals(root.childNodes[2]) o(updated[1].dom).equals(root.childNodes[2])
}) })
o("updates empty fragment to html without key", function() { o("updates empty fragment to html without key", function() {
var vnodes = m.fragment() var vnodes = fragment()
var updated = m.trust("<a></a><b></b>") var updated = trust("<a></a><b></b>")
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -326,8 +326,8 @@ o.spec("updateNodes", function() {
o(updated.dom.nextSibling).equals(root.childNodes[1]) o(updated.dom.nextSibling).equals(root.childNodes[1])
}) })
o("updates empty html to fragment without key", function() { o("updates empty html to fragment without key", function() {
var vnodes = m.trust() var vnodes = trust()
var updated = m.fragment(m("a"), m("b")) var updated = fragment(m("a"), m("b"))
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -340,8 +340,8 @@ o.spec("updateNodes", function() {
o(updated.dom.nextSibling).equals(root.childNodes[1]) o(updated.dom.nextSibling).equals(root.childNodes[1])
}) })
o("updates fragment to html without key", function() { o("updates fragment to html without key", function() {
var vnodes = m.fragment(m("a"), m("b")) var vnodes = fragment(m("a"), m("b"))
var updated = m.trust("<i></i><s></s>") var updated = trust("<i></i><s></s>")
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -354,8 +354,8 @@ o.spec("updateNodes", function() {
o(updated.dom.nextSibling).equals(root.childNodes[1]) o(updated.dom.nextSibling).equals(root.childNodes[1])
}) })
o("updates html to fragment without key", function() { o("updates html to fragment without key", function() {
var vnodes = m.trust("<a></a><b></b>") var vnodes = trust("<a></a><b></b>")
var updated = m.fragment(m("i"), m("s")) var updated = fragment(m("i"), m("s"))
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -368,8 +368,8 @@ o.spec("updateNodes", function() {
o(updated.dom.nextSibling).equals(root.childNodes[1]) o(updated.dom.nextSibling).equals(root.childNodes[1])
}) })
o("populates fragment followed by el keyed", function() { o("populates fragment followed by el keyed", function() {
var vnodes = [m.fragment({key: 1}), m("i", {key: 2})] var vnodes = [fragment({key: 1}), m("i", {key: 2})]
var updated = [m.fragment({key: 1}, m("a"), m("b")), m("i", {key: 2})] var updated = [fragment({key: 1}, m("a"), m("b")), m("i", {key: 2})]
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -384,20 +384,20 @@ o.spec("updateNodes", function() {
o(updated[1].dom).equals(root.childNodes[2]) o(updated[1].dom).equals(root.childNodes[2])
}) })
o("throws if fragment followed by null then el on first render keyed", function() { o("throws if fragment followed by null then el on first render keyed", function() {
var vnodes = [m.fragment({key: 1}), null, m("i", {key: 2})] var vnodes = [fragment({key: 1}), null, m("i", {key: 2})]
o(function () { render(root, vnodes) }).throws(TypeError) o(function () { render(root, vnodes) }).throws(TypeError)
}) })
o("throws if fragment followed by null then el on next render keyed", function() { o("throws if fragment followed by null then el on next render keyed", function() {
var vnodes = [m.fragment({key: 1}), m("i", {key: 2})] var vnodes = [fragment({key: 1}), m("i", {key: 2})]
var updated = [m.fragment({key: 1}, m("a"), m("b")), null, m("i", {key: 2})] var updated = [fragment({key: 1}, m("a"), m("b")), null, m("i", {key: 2})]
render(root, vnodes) render(root, vnodes)
o(function () { render(root, updated) }).throws(TypeError) o(function () { render(root, updated) }).throws(TypeError)
}) })
o("populates childless fragment replaced followed by el keyed", function() { o("populates childless fragment replaced followed by el keyed", function() {
var vnodes = [m.fragment({key: 1}), m("i", {key: 2})] var vnodes = [fragment({key: 1}), m("i", {key: 2})]
var updated = [m.fragment({key: 1}, m("a"), m("b")), m("i", {key: 2})] var updated = [fragment({key: 1}, m("a"), m("b")), m("i", {key: 2})]
render(root, vnodes) render(root, vnodes)
render(root, updated) render(root, updated)
@ -412,8 +412,8 @@ o.spec("updateNodes", function() {
o(updated[1].dom).equals(root.childNodes[2]) o(updated[1].dom).equals(root.childNodes[2])
}) })
o("throws if childless fragment replaced followed by null then el keyed", function() { o("throws if childless fragment replaced followed by null then el keyed", function() {
var vnodes = [m.fragment({key: 1}), m("i", {key: 2})] var vnodes = [fragment({key: 1}), m("i", {key: 2})]
var updated = [m.fragment({key: 1}, m("a"), m("b")), null, m("i", {key: 2})] var updated = [fragment({key: 1}, m("a"), m("b")), null, m("i", {key: 2})]
render(root, vnodes) render(root, vnodes)
o(function () { render(root, updated) }).throws(TypeError) o(function () { render(root, updated) }).throws(TypeError)
@ -697,7 +697,7 @@ o.spec("updateNodes", function() {
m("#", "a") m("#", "a")
) )
var updated = m("div", var updated = m("div",
m.fragment(m("#", "b")), fragment(m("#", "b")),
undefined, undefined,
undefined undefined
) )
@ -796,9 +796,9 @@ o.spec("updateNodes", function() {
o(root.childNodes[1].nodeName).equals("B") o(root.childNodes[1].nodeName).equals("B")
}) })
o("mixed unkeyed vnode types are not broken by recycle", function() { o("mixed unkeyed vnode types are not broken by recycle", function() {
var vnodes = [m.fragment(m("a")), m("b")] var vnodes = [fragment(m("a")), m("b")]
var temp = [m("b")] var temp = [m("b")]
var updated = [m.fragment(m("a")), m("b")] var updated = [fragment(m("a")), m("b")]
render(root, vnodes) render(root, vnodes)
render(root, temp) render(root, temp)
@ -946,38 +946,38 @@ o.spec("updateNodes", function() {
}) })
o("don't add back elements from fragments that are restored from the pool #1991", function() { o("don't add back elements from fragments that are restored from the pool #1991", function() {
render(root, [ render(root, [
m.fragment(), fragment(),
m.fragment() fragment()
]) ])
render(root, [ render(root, [
m.fragment(), fragment(),
m.fragment( fragment(
m("div") m("div")
) )
]) ])
render(root, [ render(root, [
m.fragment(null) fragment(null)
]) ])
render(root, [ render(root, [
m.fragment(), fragment(),
m.fragment() fragment()
]) ])
o(root.childNodes.length).equals(0) o(root.childNodes.length).equals(0)
}) })
o("don't add back elements from fragments that are being removed #1991", function() { o("don't add back elements from fragments that are being removed #1991", function() {
render(root, [ render(root, [
m.fragment(), fragment(),
m("p"), m("p"),
]) ])
render(root, [ render(root, [
m.fragment( fragment(
m("div", 5) m("div", 5)
) )
]) ])
render(root, [ render(root, [
m.fragment(), fragment(),
m.fragment() fragment()
]) ])
o(root.childNodes.length).equals(0) o(root.childNodes.length).equals(0)
@ -1021,9 +1021,9 @@ o.spec("updateNodes", function() {
} }
}) })
o("don't fetch the nextSibling from the pool", function() { o("don't fetch the nextSibling from the pool", function() {
render(root, [m.fragment(m("div", {key: 1}), m("div", {key: 2})), m("p")]) render(root, [fragment(m("div", {key: 1}), m("div", {key: 2})), m("p")])
render(root, [m.fragment(), m("p")]) render(root, [fragment(), m("p")])
render(root, [m.fragment(m("div", {key: 2}), m("div", {key: 1})), m("p")]) render(root, [fragment(m("div", {key: 2}), m("div", {key: 1})), m("p")])
o([].map.call(root.childNodes, function(el) {return el.nodeName})).deepEquals(["DIV", "DIV", "P"]) o([].map.call(root.childNodes, function(el) {return el.nodeName})).deepEquals(["DIV", "DIV", "P"])
}) })
@ -1172,9 +1172,9 @@ o.spec("updateNodes", function() {
o("fragment child toggles from null when followed by null component then tag", function() { o("fragment child toggles from null when followed by null component then tag", function() {
var component = createComponent({view: function() {return null}}) var component = createComponent({view: function() {return null}})
var vnodes = [m.fragment(m("a"), m(component), m("b"))] var vnodes = [fragment(m("a"), m(component), m("b"))]
var temp = [m.fragment(null, m(component), m("b"))] var temp = [fragment(null, m(component), m("b"))]
var updated = [m.fragment(m("a"), m(component), m("b"))] var updated = [fragment(m("a"), m(component), m("b"))]
render(root, vnodes) render(root, vnodes)
render(root, temp) render(root, temp)
@ -1188,9 +1188,9 @@ o.spec("updateNodes", function() {
var flag = true var flag = true
var a = createComponent({view: function() {return flag ? m("a") : null}}) var a = createComponent({view: function() {return flag ? m("a") : null}})
var b = createComponent({view: function() {return null}}) var b = createComponent({view: function() {return null}})
var vnodes = [m.fragment(m(a), m(b), m("s"))] var vnodes = [fragment(m(a), m(b), m("s"))]
var temp = [m.fragment(m(a), m(b), m("s"))] var temp = [fragment(m(a), m(b), m("s"))]
var updated = [m.fragment(m(a), m(b), m("s"))] var updated = [fragment(m(a), m(b), m("s"))]
render(root, vnodes) render(root, vnodes)
flag = false flag = false
@ -1204,7 +1204,7 @@ o.spec("updateNodes", function() {
}) })
o("removing a component that returns a fragment doesn't throw (regression test for incidental bug introduced while debugging some Flems)", function() { o("removing a component that returns a fragment doesn't throw (regression test for incidental bug introduced while debugging some Flems)", function() {
var component = createComponent({ var component = createComponent({
view: function() {return m.fragment(m("a"), m("b"))} view: function() {return fragment(m("a"), m("b"))}
}) })
try { try {
render(root, [m(component)]) render(root, [m(component)])