Files
pjax/tests/lib/events.js

178 lines
4.3 KiB
JavaScript
Raw Permalink Normal View History

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];
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 = "";
// 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();
});