Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions render/fragment.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var hyperscriptVnode = require("./hyperscriptVnode")
module.exports = function(attrs, ...children) {
var vnode = hyperscriptVnode(attrs, children)

if (vnode.attrs == null) vnode.attrs = {}
vnode.tag = "["
vnode.children = Vnode.normalizeChildren(vnode.children)
return vnode
Expand Down
1 change: 1 addition & 0 deletions render/hyperscript.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ function hyperscript(selector, attrs, ...children) {
if (selector !== "[") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)
}

if (vnode.attrs == null) vnode.attrs = {}
vnode.tag = selector
return vnode
}
Expand Down
25 changes: 25 additions & 0 deletions render/tests/test-fragment.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,50 +44,59 @@ function runTest(name, fragment) {
o("handles string single child", function() {
var vnode = fragment(["a"])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("a")
})
o("handles falsy string single child", function() {
var vnode = fragment([""])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("")
})
o("handles number single child", function() {
var vnode = fragment([1])

o(vnode.attrs).deepEquals({})
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.attrs).deepEquals({})
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.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles falsy boolean single child", function() {
var vnode = fragment([false])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles null single child", function() {
var vnode = fragment([null])

o(vnode.attrs).deepEquals({})
o(vnode.children[0]).equals(null)
})
o("handles undefined single child", function() {
var vnode = fragment([undefined])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles multiple string children", function() {
var vnode = fragment(["", "a"])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("")
o(vnode.children[1].tag).equals("#")
Expand All @@ -96,6 +105,7 @@ function runTest(name, fragment) {
o("handles multiple number children", function() {
var vnode = fragment([0, 1])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("0")
o(vnode.children[1].tag).equals("#")
Expand All @@ -104,16 +114,19 @@ function runTest(name, fragment) {
o("handles multiple boolean children", function() {
var vnode = fragment([false, true])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null, null])
})
o("handles multiple null/undefined child", function() {
var vnode = fragment([null, undefined])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null, null])
})
o("handles falsy number single child without attrs", function() {
var vnode = fragment(0)

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("0")
})
Expand All @@ -122,50 +135,59 @@ function runTest(name, fragment) {
o("handles string single child", function() {
var vnode = fragment({}, ["a"])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("a")
})
o("handles falsy string single child", function() {
var vnode = fragment({}, [""])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("")
})
o("handles number single child", function() {
var vnode = fragment({}, [1])

o(vnode.attrs).deepEquals({})
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.attrs).deepEquals({})
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.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles falsy boolean single child", function() {
var vnode = fragment({}, [false])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles null single child", function() {
var vnode = fragment({}, [null])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles undefined single child", function() {
var vnode = fragment({}, [undefined])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null])
})
o("handles multiple string children", function() {
var vnode = fragment({}, ["", "a"])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("")
o(vnode.children[1].tag).equals("#")
Expand All @@ -174,6 +196,7 @@ function runTest(name, fragment) {
o("handles multiple number children", function() {
var vnode = fragment({}, [0, 1])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("#")
o(vnode.children[0].children).equals("0")
o(vnode.children[1].tag).equals("#")
Expand All @@ -182,11 +205,13 @@ function runTest(name, fragment) {
o("handles multiple boolean children", function() {
var vnode = fragment({}, [false, true])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null, null])
})
o("handles multiple null/undefined child", function() {
var vnode = fragment({}, [null, undefined])

o(vnode.attrs).deepEquals({})
o(vnode.children).deepEquals([null, null])
})
})
Expand Down
56 changes: 56 additions & 0 deletions render/tests/test-hyperscript.js
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,26 @@ o.spec("hyperscript", function() {
o(vnode.children[0].tag).equals("i")
o(vnode.children[1].tag).equals("s")
})
o("handles children without attr (fragment)", function() {
var vnode = m("[", [m("i"), m("s")])

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("i")
o(vnode.children[1].tag).equals("s")
})
o("handles child without attr unwrapped (fragment)", function() {
var vnode = m("[", m("i"))

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("i")
})
o("handles children without attr unwrapped (fragment)", function() {
var vnode = m("[", m("i"), m("s"))

o(vnode.attrs).deepEquals({})
o(vnode.children[0].tag).equals("i")
o(vnode.children[1].tag).equals("s")
})
o("handles shared attrs", function() {
var attrs = {a: "b"}

Expand Down Expand Up @@ -664,5 +684,41 @@ o.spec("hyperscript", function() {
o(vnode.children.length).equals(1)
o(vnode.children[0]).equals("b")
})
o("works with POJOs (without attrs)", function() {
var component = {
view: function() {}
}
var vnode = m(component, "b")

o(vnode.tag).equals(component)
o(vnode.attrs).deepEquals({})
o(vnode.children.length).equals(1)
o(vnode.children[0]).equals("b")
})
o("works with constructibles (without attrs)", function() {
var component = o.spy()
component.prototype.view = function() {}

var vnode = m(component, "b")

o(component.callCount).equals(0)

o(vnode.tag).equals(component)
o(vnode.attrs).deepEquals({})
o(vnode.children.length).equals(1)
o(vnode.children[0]).equals("b")
})
o("works with closures (without attrs)", function () {
var component = o.spy()

var vnode = m(component, "b")

o(component.callCount).equals(0)

o(vnode.tag).equals(component)
o(vnode.attrs).deepEquals({})
o(vnode.children.length).equals(1)
o(vnode.children[0]).equals("b")
})
})
})
Loading