2019-03-03 01:37:45 -05:00
|
|
|
var tape = require("tape");
|
2014-05-04 08:44:33 +02:00
|
|
|
|
2019-03-03 01:37:45 -05:00
|
|
|
var on = require("../../lib/events/on");
|
|
|
|
|
var off = require("../../lib/events/off");
|
|
|
|
|
var trigger = require("../../lib/events/trigger");
|
2014-05-04 08:44:33 +02:00
|
|
|
|
2019-03-03 01:37:45 -05:00
|
|
|
var el = document.createElement("div");
|
|
|
|
|
var el2 = document.createElement("span");
|
|
|
|
|
var els = [el, el2];
|
2018-02-02 09:52:44 -05:00
|
|
|
|
2014-05-04 08:44:33 +02:00
|
|
|
var classCb = function() {
|
2019-03-03 01:37:45 -05:00
|
|
|
this.className += "on";
|
|
|
|
|
};
|
2014-05-04 08:44:33 +02:00
|
|
|
var attrCb = function() {
|
2019-03-03 01:37:45 -05:00
|
|
|
this.setAttribute("data-state", this.getAttribute("data-state") + "ON");
|
|
|
|
|
};
|
2014-05-04 08:44:33 +02:00
|
|
|
|
|
|
|
|
tape("test events on/off/trigger for one element, one event", function(t) {
|
2019-03-03 01:37:45 -05:00
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
);
|
2016-01-04 22:42:23 +11:00
|
|
|
|
|
|
|
|
tape("test events on top level elements", function(t) {
|
2019-03-03 01:37:45 -05:00
|
|
|
var el = document;
|
2016-01-04 22:42:23 +11:00
|
|
|
|
2019-03-03 01:37:45 -05:00
|
|
|
el.className = "";
|
|
|
|
|
on(el, "click", classCb);
|
|
|
|
|
trigger(el, "click");
|
|
|
|
|
t.equal(
|
|
|
|
|
el.className,
|
|
|
|
|
"on",
|
|
|
|
|
"attached callback has been fired properly on document"
|
|
|
|
|
);
|
2016-01-04 22:42:23 +11:00
|
|
|
|
2019-03-03 01:37:45 -05:00
|
|
|
el = window;
|
2016-01-04 22:42:23 +11:00
|
|
|
|
2019-03-03 01:37:45 -05:00
|
|
|
el.className = "";
|
2018-01-08 17:21:18 -05:00
|
|
|
// With jsdom, the default this is global, not window, so we need to explicitly bind to window.
|
2019-03-03 01:37:45 -05:00
|
|
|
on(el, "click", classCb.bind(window));
|
|
|
|
|
trigger(el, "click");
|
|
|
|
|
t.equal(
|
|
|
|
|
el.className,
|
|
|
|
|
"on",
|
|
|
|
|
"attached callback has been fired properly on window"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
t.end();
|
|
|
|
|
});
|