* Handle `[` fragment selector. Fix #2349 * Update tests * Simplify hyperscript function
This commit is contained in:
parent
1aaa2ff568
commit
39c20bdb34
2 changed files with 186 additions and 173 deletions
|
|
@ -90,11 +90,12 @@ function hyperscript(selector) {
|
||||||
var vnode = hyperscriptVnode.apply(1, arguments)
|
var vnode = hyperscriptVnode.apply(1, arguments)
|
||||||
|
|
||||||
if (typeof selector === "string") {
|
if (typeof selector === "string") {
|
||||||
return execSelector(selectorCache[selector] || compileSelector(selector), vnode)
|
vnode.children = Vnode.normalizeChildren(vnode.children)
|
||||||
} else {
|
if (selector !== "[") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)
|
||||||
vnode.tag = selector
|
|
||||||
return vnode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vnode.tag = selector
|
||||||
|
return vnode
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = hyperscript
|
module.exports = hyperscript
|
||||||
|
|
|
||||||
|
|
@ -2,196 +2,208 @@
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
var fragment = require("../../render/fragment")
|
var fragment = require("../../render/fragment")
|
||||||
|
var m = require("../../render/hyperscript")
|
||||||
|
|
||||||
o.spec("fragment", function() {
|
function fragmentStr() {
|
||||||
o("works", function() {
|
var args = [].slice.call(arguments);
|
||||||
var attrs = {foo: 5}
|
args.unshift("[");
|
||||||
var child = {tag: "p"}
|
return m.apply(null, args)
|
||||||
var frag = fragment(attrs, [child])
|
}
|
||||||
|
|
||||||
o(frag.tag).equals("[")
|
function runTest(name, fragment) {
|
||||||
|
o.spec(name, function() {
|
||||||
|
o("works", function() {
|
||||||
|
var attrs = {foo: 5}
|
||||||
|
var child = {tag: "p"}
|
||||||
|
var frag = fragment(attrs, [child])
|
||||||
|
|
||||||
o(Array.isArray(frag.children)).equals(true)
|
o(frag.tag).equals("[")
|
||||||
o(frag.children.length).equals(1)
|
|
||||||
o(frag.children[0]).equals(child)
|
|
||||||
|
|
||||||
o(frag.attrs).equals(attrs)
|
o(Array.isArray(frag.children)).equals(true)
|
||||||
|
o(frag.children.length).equals(1)
|
||||||
|
o(frag.children[0]).equals(child)
|
||||||
|
|
||||||
o(frag.key).equals(undefined)
|
o(frag.attrs).equals(attrs)
|
||||||
})
|
|
||||||
o("supports keys", function() {
|
|
||||||
var attrs = {key: 7}
|
|
||||||
var frag = fragment(attrs, [])
|
|
||||||
o(frag.tag).equals("[")
|
|
||||||
|
|
||||||
o(Array.isArray(frag.children)).equals(true)
|
o(frag.key).equals(undefined)
|
||||||
o(frag.children.length).equals(0)
|
|
||||||
|
|
||||||
o(frag.attrs).equals(attrs)
|
|
||||||
o(frag.attrs.key).equals(7)
|
|
||||||
|
|
||||||
o(frag.key).equals(7)
|
|
||||||
})
|
|
||||||
o.spec("children with no attrs", function() {
|
|
||||||
o("handles string single child", function() {
|
|
||||||
var vnode = fragment(["a"])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals("a")
|
|
||||||
})
|
})
|
||||||
o("handles falsy string single child", function() {
|
o("supports keys", function() {
|
||||||
var vnode = fragment([""])
|
var attrs = {key: 7}
|
||||||
|
var frag = fragment(attrs, [])
|
||||||
|
o(frag.tag).equals("[")
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(Array.isArray(frag.children)).equals(true)
|
||||||
o(vnode.children[0].children).equals("")
|
o(frag.children.length).equals(0)
|
||||||
|
|
||||||
|
o(frag.attrs).equals(attrs)
|
||||||
|
o(frag.attrs.key).equals(7)
|
||||||
|
|
||||||
|
o(frag.key).equals(7)
|
||||||
})
|
})
|
||||||
o("handles number single child", function() {
|
o.spec("children with no attrs", function() {
|
||||||
var vnode = fragment([1])
|
o("handles string single child", function() {
|
||||||
|
var vnode = fragment(["a"])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals(1)
|
o(vnode.children[0].children).equals("a")
|
||||||
|
})
|
||||||
|
o("handles falsy string single child", function() {
|
||||||
|
var vnode = fragment([""])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals("")
|
||||||
|
})
|
||||||
|
o("handles number single child", function() {
|
||||||
|
var vnode = fragment([1])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals(1)
|
||||||
|
})
|
||||||
|
o("handles falsy number single child", function() {
|
||||||
|
var vnode = fragment([0])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals(0)
|
||||||
|
})
|
||||||
|
o("handles boolean single child", function() {
|
||||||
|
var vnode = fragment([true])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals(true)
|
||||||
|
})
|
||||||
|
o("handles falsy boolean single child", function() {
|
||||||
|
var vnode = fragment([false])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals("")
|
||||||
|
})
|
||||||
|
o("handles null single child", function() {
|
||||||
|
var vnode = fragment([null])
|
||||||
|
|
||||||
|
o(vnode.children[0]).equals(null)
|
||||||
|
})
|
||||||
|
o("handles undefined single child", function() {
|
||||||
|
var vnode = fragment([undefined])
|
||||||
|
|
||||||
|
o(vnode.children[0]).equals(undefined)
|
||||||
|
})
|
||||||
|
o("handles multiple string children", function() {
|
||||||
|
var vnode = fragment(["", "a"])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals("")
|
||||||
|
o(vnode.children[1].tag).equals("#")
|
||||||
|
o(vnode.children[1].children).equals("a")
|
||||||
|
})
|
||||||
|
o("handles multiple number children", function() {
|
||||||
|
var vnode = fragment([0, 1])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals(0)
|
||||||
|
o(vnode.children[1].tag).equals("#")
|
||||||
|
o(vnode.children[1].children).equals(1)
|
||||||
|
})
|
||||||
|
o("handles multiple boolean children", function() {
|
||||||
|
var vnode = fragment([false, true])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals("")
|
||||||
|
o(vnode.children[1].tag).equals("#")
|
||||||
|
o(vnode.children[1].children).equals(true)
|
||||||
|
})
|
||||||
|
o("handles multiple null/undefined child", function() {
|
||||||
|
var vnode = fragment([null, undefined])
|
||||||
|
|
||||||
|
o(vnode.children[0]).equals(null)
|
||||||
|
o(vnode.children[1]).equals(undefined)
|
||||||
|
})
|
||||||
|
o("handles falsy number single child without attrs", function() {
|
||||||
|
var vnode = fragment(0)
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals(0)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
o("handles falsy number single child", function() {
|
o.spec("children with attrs", function() {
|
||||||
var vnode = fragment([0])
|
o("handles string single child", function() {
|
||||||
|
var vnode = fragment({}, ["a"])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals(0)
|
o(vnode.children[0].children).equals("a")
|
||||||
})
|
})
|
||||||
o("handles boolean single child", function() {
|
o("handles falsy string single child", function() {
|
||||||
var vnode = fragment([true])
|
var vnode = fragment({}, [""])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals(true)
|
o(vnode.children[0].children).equals("")
|
||||||
})
|
})
|
||||||
o("handles falsy boolean single child", function() {
|
o("handles number single child", function() {
|
||||||
var vnode = fragment([false])
|
var vnode = fragment({}, [1])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals("")
|
o(vnode.children[0].children).equals(1)
|
||||||
})
|
})
|
||||||
o("handles null single child", function() {
|
o("handles falsy number single child", function() {
|
||||||
var vnode = fragment([null])
|
var vnode = fragment({}, [0])
|
||||||
|
|
||||||
o(vnode.children[0]).equals(null)
|
o(vnode.children[0].tag).equals("#")
|
||||||
})
|
o(vnode.children[0].children).equals(0)
|
||||||
o("handles undefined single child", function() {
|
})
|
||||||
var vnode = fragment([undefined])
|
o("handles boolean single child", function() {
|
||||||
|
var vnode = fragment({}, [true])
|
||||||
|
|
||||||
o(vnode.children[0]).equals(undefined)
|
o(vnode.children[0].tag).equals("#")
|
||||||
})
|
o(vnode.children[0].children).equals(true)
|
||||||
o("handles multiple string children", function() {
|
})
|
||||||
var vnode = fragment(["", "a"])
|
o("handles falsy boolean single child", function() {
|
||||||
|
var vnode = fragment({}, [false])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals("")
|
o(vnode.children[0].children).equals("")
|
||||||
o(vnode.children[1].tag).equals("#")
|
})
|
||||||
o(vnode.children[1].children).equals("a")
|
o("handles null single child", function() {
|
||||||
})
|
var vnode = fragment({}, [null])
|
||||||
o("handles multiple number children", function() {
|
|
||||||
var vnode = fragment([0, 1])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0]).equals(null)
|
||||||
o(vnode.children[0].children).equals(0)
|
})
|
||||||
o(vnode.children[1].tag).equals("#")
|
o("handles undefined single child", function() {
|
||||||
o(vnode.children[1].children).equals(1)
|
var vnode = fragment({}, [undefined])
|
||||||
})
|
|
||||||
o("handles multiple boolean children", function() {
|
|
||||||
var vnode = fragment([false, true])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0]).equals(undefined)
|
||||||
o(vnode.children[0].children).equals("")
|
})
|
||||||
o(vnode.children[1].tag).equals("#")
|
o("handles multiple string children", function() {
|
||||||
o(vnode.children[1].children).equals(true)
|
var vnode = fragment({}, ["", "a"])
|
||||||
})
|
|
||||||
o("handles multiple null/undefined child", function() {
|
|
||||||
var vnode = fragment([null, undefined])
|
|
||||||
|
|
||||||
o(vnode.children[0]).equals(null)
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[1]).equals(undefined)
|
o(vnode.children[0].children).equals("")
|
||||||
})
|
o(vnode.children[1].tag).equals("#")
|
||||||
o("handles falsy number single child without attrs", function() {
|
o(vnode.children[1].children).equals("a")
|
||||||
var vnode = fragment(0)
|
})
|
||||||
|
o("handles multiple number children", function() {
|
||||||
|
var vnode = fragment({}, [0, 1])
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
o(vnode.children[0].tag).equals("#")
|
||||||
o(vnode.children[0].children).equals(0)
|
o(vnode.children[0].children).equals(0)
|
||||||
|
o(vnode.children[1].tag).equals("#")
|
||||||
|
o(vnode.children[1].children).equals(1)
|
||||||
|
})
|
||||||
|
o("handles multiple boolean children", function() {
|
||||||
|
var vnode = fragment({}, [false, true])
|
||||||
|
|
||||||
|
o(vnode.children[0].tag).equals("#")
|
||||||
|
o(vnode.children[0].children).equals("")
|
||||||
|
o(vnode.children[1].tag).equals("#")
|
||||||
|
o(vnode.children[1].children).equals(true)
|
||||||
|
})
|
||||||
|
o("handles multiple null/undefined child", function() {
|
||||||
|
var vnode = fragment({}, [null, undefined])
|
||||||
|
|
||||||
|
o(vnode.children[0]).equals(null)
|
||||||
|
o(vnode.children[1]).equals(undefined)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
o.spec("children with attrs", function() {
|
}
|
||||||
o("handles string single child", function() {
|
|
||||||
var vnode = fragment({}, ["a"])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
runTest("fragment", fragment);
|
||||||
o(vnode.children[0].children).equals("a")
|
runTest("fragment-string-selector", fragmentStr);
|
||||||
})
|
|
||||||
o("handles falsy string single child", function() {
|
|
||||||
var vnode = fragment({}, [""])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals("")
|
|
||||||
})
|
|
||||||
o("handles number single child", function() {
|
|
||||||
var vnode = fragment({}, [1])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals(1)
|
|
||||||
})
|
|
||||||
o("handles falsy number single child", function() {
|
|
||||||
var vnode = fragment({}, [0])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals(0)
|
|
||||||
})
|
|
||||||
o("handles boolean single child", function() {
|
|
||||||
var vnode = fragment({}, [true])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals(true)
|
|
||||||
})
|
|
||||||
o("handles falsy boolean single child", function() {
|
|
||||||
var vnode = fragment({}, [false])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals("")
|
|
||||||
})
|
|
||||||
o("handles null single child", function() {
|
|
||||||
var vnode = fragment({}, [null])
|
|
||||||
|
|
||||||
o(vnode.children[0]).equals(null)
|
|
||||||
})
|
|
||||||
o("handles undefined single child", function() {
|
|
||||||
var vnode = fragment({}, [undefined])
|
|
||||||
|
|
||||||
o(vnode.children[0]).equals(undefined)
|
|
||||||
})
|
|
||||||
o("handles multiple string children", function() {
|
|
||||||
var vnode = fragment({}, ["", "a"])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals("")
|
|
||||||
o(vnode.children[1].tag).equals("#")
|
|
||||||
o(vnode.children[1].children).equals("a")
|
|
||||||
})
|
|
||||||
o("handles multiple number children", function() {
|
|
||||||
var vnode = fragment({}, [0, 1])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals(0)
|
|
||||||
o(vnode.children[1].tag).equals("#")
|
|
||||||
o(vnode.children[1].children).equals(1)
|
|
||||||
})
|
|
||||||
o("handles multiple boolean children", function() {
|
|
||||||
var vnode = fragment({}, [false, true])
|
|
||||||
|
|
||||||
o(vnode.children[0].tag).equals("#")
|
|
||||||
o(vnode.children[0].children).equals("")
|
|
||||||
o(vnode.children[1].tag).equals("#")
|
|
||||||
o(vnode.children[1].children).equals(true)
|
|
||||||
})
|
|
||||||
o("handles multiple null/undefined child", function() {
|
|
||||||
var vnode = fragment({}, [null, undefined])
|
|
||||||
|
|
||||||
o(vnode.children[0]).equals(null)
|
|
||||||
o(vnode.children[1]).equals(undefined)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue