Closes #63 - Switch from testling to jsdom for browser APIs - Switch from coverify to nyc for coverage reports - Clean up related dead code and tooling - Update Travis to use Node v6 and v8, since we need ES6 features for jsdom.
112 lines
3.9 KiB
JavaScript
112 lines
3.9 KiB
JavaScript
var tape = require("tape")
|
|
|
|
var on = require("../../lib/events/on")
|
|
var off = require("../../lib/events/off")
|
|
var trigger = require("../../lib/events/trigger")
|
|
|
|
var el = document.createElement("div")
|
|
var el2 = document.createElement("span")
|
|
var els = [el, el2]
|
|
// var eventType2 = "resize"
|
|
// var eventsType = "click resize"
|
|
var classCb = function() {
|
|
this.className += "on"
|
|
}
|
|
var attrCb = function() {
|
|
this.setAttribute("data-state", this.getAttribute("data-state") + "ON")
|
|
}
|
|
|
|
tape("test events on/off/trigger for one element, one event", function(t) {
|
|
el.className = ""
|
|
on(el, "click", classCb)
|
|
trigger(el, "click")
|
|
t.equal(el.className, "on", "attached callback has been fired properly")
|
|
|
|
el.className = "off"
|
|
off(el, "click", classCb)
|
|
trigger(el, "click")
|
|
t.equal(el.className, "off", "triggered event didn't fire detached callback")
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test events on/off/trigger for multiple elements, one event", function(t) {
|
|
el.className = ""
|
|
el2.className = ""
|
|
|
|
on(els, "click", classCb)
|
|
trigger(els, "click")
|
|
t.equal(el.className, "on", "attached callback has been fired properly on the first element")
|
|
t.equal(el2.className, "on", "attached callback has been fired properly on the second element")
|
|
|
|
el.className = "off"
|
|
el2.className = "off"
|
|
off(els, "click", classCb)
|
|
trigger(els, "click")
|
|
t.equal(el.className, "off", "triggered event didn't fire detached callback on the first element")
|
|
t.equal(el2.className, "off", "triggered event didn't fire detached callback on the second element")
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test events on/off/trigger for one element, multiple events", function(t) {
|
|
el.className = ""
|
|
on(el, "click mouseover", classCb)
|
|
trigger(el, "click mouseover")
|
|
t.equal(el.className, "onon", "attached callbacks have been fired properly")
|
|
|
|
el.className = "off"
|
|
off(el, "click mouseover", classCb)
|
|
trigger(el, "click mouseover")
|
|
t.equal(el.className, "off", "triggered events didn't fire detached callback")
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test events on/off/trigger for multiple elements, multiple events", function(t) {
|
|
el.className = ""
|
|
el2.className = ""
|
|
el.setAttribute("data-state", "")
|
|
el2.setAttribute("data-state", "")
|
|
on(els, "click mouseover", classCb)
|
|
on(els, "resize scroll", attrCb)
|
|
trigger(els, "click mouseover resize scroll")
|
|
t.equal(el.className, "onon", "attached callbacks has been fired properly on the first element")
|
|
t.equal(el.getAttribute("data-state"), "ONON", "attached callbacks has been fired properly on the first element")
|
|
t.equal(el2.className, "onon", "attached callbacks has been fired properly on the second element")
|
|
t.equal(el2.getAttribute("data-state"), "ONON", "attached callbacks has been fired properly on the second element")
|
|
|
|
el.className = "off"
|
|
el2.className = "off"
|
|
el.setAttribute("data-state", "off")
|
|
el2.setAttribute("data-state", "off")
|
|
off(els, "click mouseover", classCb)
|
|
off(els, "resize scroll", attrCb)
|
|
trigger(els, "click mouseover resize scroll")
|
|
t.equal(el.className, "off", "triggered events didn't fire detached callbacks on the first element")
|
|
t.equal(el.getAttribute("data-state"), "off", "triggered events didn't fire detached callbacks on the first element")
|
|
t.equal(el2.className, "off", "triggered events didn't fire detached callbacks on the first element")
|
|
t.equal(el2.getAttribute("data-state"), "off", "triggered events didn't fire detached callbacks on the first element")
|
|
|
|
t.end()
|
|
})
|
|
|
|
tape("test events on top level elements", function(t) {
|
|
var el = document;
|
|
|
|
el.className = ""
|
|
on(el, "click", classCb)
|
|
trigger(el, "click")
|
|
t.equal(el.className, "on", "attached callback has been fired properly on document")
|
|
|
|
el = window;
|
|
|
|
el.className = ""
|
|
// With jsdom, the default this is global, not window, so we need to explicitly bind to window.
|
|
on(el, "click", classCb.bind(window))
|
|
trigger(el, "click")
|
|
t.equal(el.className, "on", "attached callback has been fired properly on window")
|
|
|
|
t.end()
|
|
})
|