Tests: group together tests with/without components
This commit is contained in:
parent
eccea68212
commit
d7f39a8254
5 changed files with 145 additions and 142 deletions
|
|
@ -22,20 +22,20 @@ o.spec("mount", function() {
|
||||||
render = coreRenderer($window).render
|
render = coreRenderer($window).render
|
||||||
})
|
})
|
||||||
|
|
||||||
o("throws on invalid `root` DOM node", function() {
|
o("throws on invalid component", function() {
|
||||||
var threw = false
|
var threw = false
|
||||||
try {
|
try {
|
||||||
mount(null, {view: function() {}})
|
mount(root, {})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
threw = true
|
threw = true
|
||||||
}
|
}
|
||||||
o(threw).equals(true)
|
o(threw).equals(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
o("throws on invalid component", function() {
|
o("throws on invalid `root` DOM node", function() {
|
||||||
var threw = false
|
var threw = false
|
||||||
try {
|
try {
|
||||||
mount(root, {})
|
mount(null, {view: function() {}})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
threw = true
|
threw = true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
|
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")
|
||||||
|
|
||||||
|
|
@ -56,6 +57,69 @@ o.spec("onbeforeupdate", function() {
|
||||||
o(root.firstChild.nodeValue).equals("a")
|
o(root.firstChild.nodeValue).equals("a")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
o("does not prevent update if returning true", function() {
|
||||||
|
var onbeforeupdate = function() {return true}
|
||||||
|
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
||||||
|
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
render(root, [updated])
|
||||||
|
|
||||||
|
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
||||||
|
})
|
||||||
|
|
||||||
|
o("accepts arguments for comparison", function() {
|
||||||
|
var count = 0
|
||||||
|
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
||||||
|
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
render(root, [updated])
|
||||||
|
|
||||||
|
function onbeforeupdate(vnode, old) {
|
||||||
|
count++
|
||||||
|
|
||||||
|
o(old.attrs.id).equals("a")
|
||||||
|
o(vnode.attrs.id).equals("b")
|
||||||
|
|
||||||
|
return old.attrs.id !== vnode.attrs.id
|
||||||
|
}
|
||||||
|
|
||||||
|
o(count).equals(1)
|
||||||
|
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
||||||
|
})
|
||||||
|
|
||||||
|
o("is not called on creation", function() {
|
||||||
|
var count = 0
|
||||||
|
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
||||||
|
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
|
||||||
|
function onbeforeupdate(vnode, old) {
|
||||||
|
count++
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
o(count).equals(0)
|
||||||
|
})
|
||||||
|
|
||||||
|
o("is called only once on update", function() {
|
||||||
|
var count = 0
|
||||||
|
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
||||||
|
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
render(root, [updated])
|
||||||
|
|
||||||
|
function onbeforeupdate(vnode, old) {
|
||||||
|
count++
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
o(count).equals(1)
|
||||||
|
})
|
||||||
|
|
||||||
o("prevents update in component", function() {
|
o("prevents update in component", function() {
|
||||||
var component = {
|
var component = {
|
||||||
onbeforeupdate: function() {return false},
|
onbeforeupdate: function() {return false},
|
||||||
|
|
@ -136,17 +200,6 @@ o.spec("onbeforeupdate", function() {
|
||||||
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
||||||
})
|
})
|
||||||
|
|
||||||
o("does not prevent update if returning true", function() {
|
|
||||||
var onbeforeupdate = function() {return true}
|
|
||||||
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
|
||||||
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
render(root, [updated])
|
|
||||||
|
|
||||||
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
|
||||||
})
|
|
||||||
|
|
||||||
o("does not prevent update if returning true from component", function() {
|
o("does not prevent update if returning true from component", function() {
|
||||||
var component = {
|
var component = {
|
||||||
onbeforeupdate: function() {return true},
|
onbeforeupdate: function() {return true},
|
||||||
|
|
@ -163,27 +216,6 @@ o.spec("onbeforeupdate", function() {
|
||||||
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
||||||
})
|
})
|
||||||
|
|
||||||
o("accepts arguments for comparison", function() {
|
|
||||||
var count = 0
|
|
||||||
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
|
||||||
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
render(root, [updated])
|
|
||||||
|
|
||||||
function onbeforeupdate(vnode, old) {
|
|
||||||
count++
|
|
||||||
|
|
||||||
o(old.attrs.id).equals("a")
|
|
||||||
o(vnode.attrs.id).equals("b")
|
|
||||||
|
|
||||||
return old.attrs.id !== vnode.attrs.id
|
|
||||||
}
|
|
||||||
|
|
||||||
o(count).equals(1)
|
|
||||||
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
|
||||||
})
|
|
||||||
|
|
||||||
o("accepts arguments for comparison in component", function() {
|
o("accepts arguments for comparison in component", function() {
|
||||||
var component = {
|
var component = {
|
||||||
onbeforeupdate: onbeforeupdate,
|
onbeforeupdate: onbeforeupdate,
|
||||||
|
|
@ -211,21 +243,6 @@ o.spec("onbeforeupdate", function() {
|
||||||
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
o(root.firstChild.attributes["id"].nodeValue).equals("b")
|
||||||
})
|
})
|
||||||
|
|
||||||
o("is not called on creation", function() {
|
|
||||||
var count = 0
|
|
||||||
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
|
||||||
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
|
|
||||||
function onbeforeupdate(vnode, old) {
|
|
||||||
count++
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
o(count).equals(0)
|
|
||||||
})
|
|
||||||
|
|
||||||
o("is not called on component creation", function() {
|
o("is not called on component creation", function() {
|
||||||
var component = {
|
var component = {
|
||||||
onbeforeupdate: onbeforeupdate,
|
onbeforeupdate: onbeforeupdate,
|
||||||
|
|
@ -248,22 +265,6 @@ o.spec("onbeforeupdate", function() {
|
||||||
o(count).equals(0)
|
o(count).equals(0)
|
||||||
})
|
})
|
||||||
|
|
||||||
o("is called only once on update", function() {
|
|
||||||
var count = 0
|
|
||||||
var vnode = {tag: "div", attrs: {id: "a", onbeforeupdate: onbeforeupdate}}
|
|
||||||
var updated = {tag: "div", attrs: {id: "b", onbeforeupdate: onbeforeupdate}}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
render(root, [updated])
|
|
||||||
|
|
||||||
function onbeforeupdate(vnode, old) {
|
|
||||||
count++
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
o(count).equals(1)
|
|
||||||
})
|
|
||||||
|
|
||||||
o("is called only once on component update", function() {
|
o("is called only once on component update", function() {
|
||||||
var component = {
|
var component = {
|
||||||
onbeforeupdate: onbeforeupdate,
|
onbeforeupdate: onbeforeupdate,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
|
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")
|
||||||
|
|
@ -80,6 +81,38 @@ o.spec("onremove", function() {
|
||||||
o(remove.this).equals(vnode.state)
|
o(remove.this).equals(vnode.state)
|
||||||
o(remove.args[0]).equals(vnode)
|
o(remove.args[0]).equals(vnode)
|
||||||
})
|
})
|
||||||
|
o("does not set onremove as an event handler", function() {
|
||||||
|
var remove = o.spy()
|
||||||
|
var vnode = {tag: "div", attrs: {onremove: remove}, children: []}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
|
||||||
|
o(vnode.dom.onremove).equals(undefined)
|
||||||
|
o(vnode.dom.attributes["onremove"]).equals(undefined)
|
||||||
|
})
|
||||||
|
o("calls onremove on recycle", function() {
|
||||||
|
var remove = o.spy()
|
||||||
|
var vnodes = [{tag: "div", key: 1}]
|
||||||
|
var temp = [{tag: "div", key: 2, attrs: {onremove: remove}}]
|
||||||
|
var updated = [{tag: "div", key: 1}]
|
||||||
|
|
||||||
|
render(root, vnodes)
|
||||||
|
render(root, temp)
|
||||||
|
render(root, updated)
|
||||||
|
|
||||||
|
o(remove.callCount).equals(1)
|
||||||
|
})
|
||||||
|
o("does not recycle when there's an onremove", function() {
|
||||||
|
var remove = o.spy()
|
||||||
|
var vnode = {tag: "div", key: 1, attrs: {onremove: remove}}
|
||||||
|
var updated = {tag: "div", key: 1, attrs: {onremove: remove}}
|
||||||
|
|
||||||
|
render(root, [vnode])
|
||||||
|
render(root, [])
|
||||||
|
render(root, [updated])
|
||||||
|
|
||||||
|
o(vnode.dom).notEquals(updated.dom)
|
||||||
|
})
|
||||||
o("calls onremove on nested component", function() {
|
o("calls onremove on nested component", function() {
|
||||||
var spy = o.spy()
|
var spy = o.spy()
|
||||||
var comp = {
|
var comp = {
|
||||||
|
|
@ -113,36 +146,4 @@ o.spec("onremove", function() {
|
||||||
|
|
||||||
o(spy.callCount).equals(1)
|
o(spy.callCount).equals(1)
|
||||||
})
|
})
|
||||||
o("does not set onremove as an event handler", function() {
|
|
||||||
var remove = o.spy()
|
|
||||||
var vnode = {tag: "div", attrs: {onremove: remove}, children: []}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
|
|
||||||
o(vnode.dom.onremove).equals(undefined)
|
|
||||||
o(vnode.dom.attributes["onremove"]).equals(undefined)
|
|
||||||
})
|
|
||||||
o("calls onremove on recycle", function() {
|
|
||||||
var remove = o.spy()
|
|
||||||
var vnodes = [{tag: "div", key: 1}]
|
|
||||||
var temp = [{tag: "div", key: 2, attrs: {onremove: remove}}]
|
|
||||||
var updated = [{tag: "div", key: 1}]
|
|
||||||
|
|
||||||
render(root, vnodes)
|
|
||||||
render(root, temp)
|
|
||||||
render(root, updated)
|
|
||||||
|
|
||||||
o(remove.callCount).equals(1)
|
|
||||||
})
|
|
||||||
o("does not recycle when there's an onremove", function() {
|
|
||||||
var remove = o.spy()
|
|
||||||
var vnode = {tag: "div", key: 1, attrs: {onremove: remove}}
|
|
||||||
var updated = {tag: "div", key: 1, attrs: {onremove: remove}}
|
|
||||||
|
|
||||||
render(root, [vnode])
|
|
||||||
render(root, [])
|
|
||||||
render(root, [updated])
|
|
||||||
|
|
||||||
o(vnode.dom).notEquals(updated.dom)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"use strict"
|
"use strict"
|
||||||
|
|
||||||
var o = require("../../ospec/ospec")
|
var o = require("../../ospec/ospec")
|
||||||
|
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")
|
||||||
|
|
||||||
|
|
@ -838,38 +839,6 @@ o.spec("updateNodes", function() {
|
||||||
o(root.childNodes[0].nodeName).equals("A")
|
o(root.childNodes[0].nodeName).equals("A")
|
||||||
o(root.childNodes[1].nodeName).equals("B")
|
o(root.childNodes[1].nodeName).equals("B")
|
||||||
})
|
})
|
||||||
o("fragment child toggles from null when followed by null component then tag", function() {
|
|
||||||
var component = {view: function() {return null}}
|
|
||||||
var vnodes = [{tag: "[", children: [{tag: "a"}, {tag: component}, {tag: "b"}]}]
|
|
||||||
var temp = [{tag: "[", children: [null, {tag: component}, {tag: "b"}]}]
|
|
||||||
var updated = [{tag: "[", children: [{tag: "a"}, {tag: component}, {tag: "b"}]}]
|
|
||||||
|
|
||||||
render(root, vnodes)
|
|
||||||
render(root, temp)
|
|
||||||
render(root, updated)
|
|
||||||
|
|
||||||
o(root.childNodes.length).equals(2)
|
|
||||||
o(root.childNodes[0].nodeName).equals("A")
|
|
||||||
o(root.childNodes[1].nodeName).equals("B")
|
|
||||||
})
|
|
||||||
o("fragment child toggles from null in component when followed by null component then tag", function() {
|
|
||||||
var flag = true
|
|
||||||
var a = {view: function() {return flag ? {tag: "a"} : null}}
|
|
||||||
var b = {view: function() {return null}}
|
|
||||||
var vnodes = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
|
||||||
var temp = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
|
||||||
var updated = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
|
||||||
|
|
||||||
render(root, vnodes)
|
|
||||||
flag = false
|
|
||||||
render(root, temp)
|
|
||||||
flag = true
|
|
||||||
render(root, updated)
|
|
||||||
|
|
||||||
o(root.childNodes.length).equals(2)
|
|
||||||
o(root.childNodes[0].nodeName).equals("A")
|
|
||||||
o(root.childNodes[1].nodeName).equals("S")
|
|
||||||
})
|
|
||||||
o("cached, non-keyed nodes skip diff", function () {
|
o("cached, non-keyed nodes skip diff", function () {
|
||||||
var onupdate = o.spy();
|
var onupdate = o.spy();
|
||||||
var cached = {tag:"a", attrs:{onupdate: onupdate}}
|
var cached = {tag:"a", attrs:{onupdate: onupdate}}
|
||||||
|
|
@ -926,7 +895,7 @@ o.spec("updateNodes", function() {
|
||||||
o(update.callCount).equals(2)
|
o(update.callCount).equals(2)
|
||||||
o(remove.callCount).equals(0)
|
o(remove.callCount).equals(0)
|
||||||
})
|
})
|
||||||
o("component is recreated if key changes to undefined", function () {
|
o("node is recreated if key changes to undefined", function () {
|
||||||
var vnode = {tag: "b", key: 1}
|
var vnode = {tag: "b", key: 1}
|
||||||
var updated = {tag: "b"}
|
var updated = {tag: "b"}
|
||||||
|
|
||||||
|
|
@ -936,4 +905,36 @@ o.spec("updateNodes", function() {
|
||||||
|
|
||||||
o(vnode.dom).notEquals(updated.dom)
|
o(vnode.dom).notEquals(updated.dom)
|
||||||
})
|
})
|
||||||
|
o("fragment child toggles from null when followed by null component then tag", function() {
|
||||||
|
var component = {view: function() {return null}}
|
||||||
|
var vnodes = [{tag: "[", children: [{tag: "a"}, {tag: component}, {tag: "b"}]}]
|
||||||
|
var temp = [{tag: "[", children: [null, {tag: component}, {tag: "b"}]}]
|
||||||
|
var updated = [{tag: "[", children: [{tag: "a"}, {tag: component}, {tag: "b"}]}]
|
||||||
|
|
||||||
|
render(root, vnodes)
|
||||||
|
render(root, temp)
|
||||||
|
render(root, updated)
|
||||||
|
|
||||||
|
o(root.childNodes.length).equals(2)
|
||||||
|
o(root.childNodes[0].nodeName).equals("A")
|
||||||
|
o(root.childNodes[1].nodeName).equals("B")
|
||||||
|
})
|
||||||
|
o("fragment child toggles from null in component when followed by null component then tag", function() {
|
||||||
|
var flag = true
|
||||||
|
var a = {view: function() {return flag ? {tag: "a"} : null}}
|
||||||
|
var b = {view: function() {return null}}
|
||||||
|
var vnodes = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
||||||
|
var temp = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
||||||
|
var updated = [{tag: "[", children: [{tag: a}, {tag: b}, {tag: "s"}]}]
|
||||||
|
|
||||||
|
render(root, vnodes)
|
||||||
|
flag = false
|
||||||
|
render(root, temp)
|
||||||
|
flag = true
|
||||||
|
render(root, updated)
|
||||||
|
|
||||||
|
o(root.childNodes.length).equals(2)
|
||||||
|
o(root.childNodes[0].nodeName).equals("A")
|
||||||
|
o(root.childNodes[1].nodeName).equals("S")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,16 @@ o.spec("api", function() {
|
||||||
o(query).equals("a=1&b=2")
|
o(query).equals("a=1&b=2")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
o.spec("m.request", function() {
|
||||||
|
o("works", function() {
|
||||||
|
o(typeof m.request).equals("function") // TODO improve
|
||||||
|
})
|
||||||
|
})
|
||||||
|
o.spec("m.jsonp", function() {
|
||||||
|
o("works", function() {
|
||||||
|
o(typeof m.jsonp).equals("function") // TODO improve
|
||||||
|
})
|
||||||
|
})
|
||||||
o.spec("m.render", function() {
|
o.spec("m.render", function() {
|
||||||
o("works", function() {
|
o("works", function() {
|
||||||
var root = window.document.createElement("div")
|
var root = window.document.createElement("div")
|
||||||
|
|
@ -157,14 +167,4 @@ o.spec("api", function() {
|
||||||
}, FRAME_BUDGET)
|
}, FRAME_BUDGET)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
o.spec("m.request", function() {
|
|
||||||
o("works", function() {
|
|
||||||
o(typeof m.request).equals("function") // TODO improve
|
|
||||||
})
|
|
||||||
})
|
|
||||||
o.spec("m.jsonp", function() {
|
|
||||||
o("works", function() {
|
|
||||||
o(typeof m.jsonp).equals("function") // TODO improve
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue