js-web-tools
Version:
Tools for Javascript develpers
306 lines (237 loc) • 9.8 kB
JavaScript
;
var _domEvent = _interopRequireDefault(require("../domEvent"));
var _domEventTrigger = _interopRequireDefault(require("../domEventTrigger"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function injectHtml() {
document.body.innerHTML = "\n <div id=\"container\">\n <ul>\n <li class='green'>hello</li>\n <li class='green'>world</li>\n <li class='red'>again</li>\n <li class='red'>from</li>\n <li class='green'>cam</li>\n </ul>\n </div>\n ";
}
function clearHtml() {
document.body.innerHTML = '';
}
describe('Events', function () {
beforeEach(function () {
injectHtml();
});
afterEach(function () {
clearHtml();
});
it('on should invoke callback when event fired', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('on bind same callback twice will only invoke once', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
_domEvent["default"].on(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('on can bind two events', function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var callback3 = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback1);
_domEvent["default"].on(el, 'click', callback2);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback1).toHaveBeenCalledTimes(1);
expect(callback2).toHaveBeenCalledTimes(1);
expect(callback3).toHaveBeenCalledTimes(0);
});
it('off can remove on event', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
_domEvent["default"].off(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(0);
});
});
describe('once', function () {
beforeEach(function () {
injectHtml();
});
afterEach(function () {
clearHtml();
});
it('once will only invoke callback once', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].once(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('on will invoke callback many times as you trigger', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
(0, _domEventTrigger["default"])(el, 'click');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(3);
});
it('off can unbind once', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].once(el, 'click', callback);
_domEvent["default"].off(el, 'click');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(0);
});
});
describe('with namespace', function () {
beforeEach(function () {
injectHtml();
});
afterEach(function () {
clearHtml();
});
it('on can bind with namespace', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click.testns', callback);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('off can remove event with namespace', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click.testns', callback);
_domEvent["default"].off(el, 'click', callback);
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(0);
});
it('off with namespace only remove that namespace', function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click.testns', callback1);
_domEvent["default"].on(el, 'click.anotherns', callback2);
_domEvent["default"].off(el, 'click.anotherns');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback1).toHaveBeenCalledTimes(1);
expect(callback2).toHaveBeenCalledTimes(0);
});
it('off without namespace will remove all events', function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click.testns', callback1);
_domEvent["default"].on(el, 'click.anotherns', callback2);
_domEvent["default"].off(el, 'click');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback1).toHaveBeenCalledTimes(0);
expect(callback2).toHaveBeenCalledTimes(0);
});
});
describe('event delegation', function () {
beforeEach(function () {
injectHtml();
});
afterEach(function () {
clearHtml();
});
it('delegate can bind event', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].delegate(el, 'li.red', 'click', callback);
(0, _domEventTrigger["default"])(document.querySelector('#container ul li.red'), 'click');
expect(callback).toHaveBeenCalledTimes(1);
(0, _domEventTrigger["default"])(document.querySelector('#container ul li.green'), 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('undelegate can remove event delegation', function () {
var el = document.querySelector('#container ul');
var callback1 = jest.fn();
var callback2 = jest.fn();
_domEvent["default"].delegate(el, 'li.red', 'click', callback1);
_domEvent["default"].delegate(el, 'li.green', 'click', callback2);
_domEvent["default"].undelegate(el, 'li.red', 'click');
(0, _domEventTrigger["default"])(document.querySelector('#container ul li.red'), 'click');
(0, _domEventTrigger["default"])(document.querySelector('#container ul li.green'), 'click');
expect(callback1).toHaveBeenCalledTimes(0);
expect(callback2).toHaveBeenCalledTimes(1);
});
it('off can also remove event delegation', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].delegate(el, 'li.red', 'click', callback);
_domEvent["default"].off(el, 'li.red', 'click');
(0, _domEventTrigger["default"])(el, 'click');
expect(callback).toHaveBeenCalledTimes(0);
});
it('off with namespace only remove that namespace', function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].delegate(el, 'li.red', 'click.testns', callback1);
_domEvent["default"].delegate(el, 'li.red', 'click.anotherns', callback2);
_domEvent["default"].off(el, 'click.anotherns');
(0, _domEventTrigger["default"])(el.querySelector('li.red'), 'click');
expect(callback1).toHaveBeenCalledTimes(1);
expect(callback2).toHaveBeenCalledTimes(0);
});
it('off without namespace will remove all events', function () {
var callback1 = jest.fn();
var callback2 = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].delegate(el, 'li.red', 'click.testns', callback1);
_domEvent["default"].delegate(el, 'li.red', 'click.anotherns', callback2);
_domEvent["default"].off(el, 'click.anotherns');
(0, _domEventTrigger["default"])(el.querySelector('li.red'), 'click');
expect(callback1).toHaveBeenCalledTimes(1);
expect(callback2).toHaveBeenCalledTimes(0);
});
});
describe('trigger', function () {
beforeEach(function () {
injectHtml();
});
afterEach(function () {
clearHtml();
});
it('can trigger events', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
_domEvent["default"].trigger(el, 'click');
expect(callback).toHaveBeenCalledTimes(1);
});
it('can trigger scroll events', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'scroll', callback);
_domEvent["default"].trigger(el, 'scroll');
expect(callback).toHaveBeenCalledTimes(1);
});
it('can trigger resize events', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'resize', callback);
_domEvent["default"].trigger(el, 'resize');
expect(callback).toHaveBeenCalledTimes(1);
});
it('can trigger with params', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'resize', callback);
_domEvent["default"].trigger(el, 'resize', {
foo: 'bar'
});
expect(callback).toHaveBeenCalledTimes(1);
});
it('can trigger with bubbles', function () {
var callback = jest.fn();
var el = document.querySelector('#container ul');
_domEvent["default"].on(el, 'click', callback);
_domEvent["default"].trigger(el, 'click', {
bubbles: true
});
expect(callback).toHaveBeenCalledTimes(1);
});
});