var delegate = require('../src/delegate'); var simulant = require('simulant'); describe('delegate', function() { before(function() { var html = ''; document.body.innerHTML += html; global.container = document.querySelector('ul'); global.anchor = document.querySelector('a'); global.spy = sinon.spy(global.container, 'removeEventListener'); }); after(function() { global.spy.restore(); document.body.innerHTML = ''; }); it('should add an event listener', function(done) { delegate(global.container, 'a', 'click', function() { done(); }); simulant.fire(global.anchor, simulant('click')); }); it('should remove an event listener', function() { var delegation = delegate(global.container, 'a', 'click', function() {}); delegation.destroy(); assert.ok(global.spy.calledOnce); }); it('should use `document` if the element is unspecified', function(done) { delegate('a', 'click', function() { done(); }); simulant.fire(global.anchor, simulant('click')); }); it('should remove an event listener the unspecified base (`document`)', function() { var delegation = delegate('a', 'click', function() {}); var spy = sinon.spy(document, 'removeEventListener'); delegation.destroy(); assert.ok(spy.calledOnce); spy.restore(); }); it('should add event listeners to all the elements in a base selector', function() { var spy = sinon.spy(); delegate('li', 'a', 'click', spy); var anchors = document.querySelectorAll('a'); simulant.fire(anchors[0], simulant('click')); simulant.fire(anchors[1], simulant('click')); assert.ok(spy.calledTwice); }); it('should remove the event listeners from all the elements in a base selector', function() { var items = document.querySelectorAll('li') var spies = Array.prototype.map.call(items, function (li) { return sinon.spy(li, 'removeEventListener'); }); var delegations = delegate('li', 'a', 'click', function() {}); delegations.forEach(function (delegation) { delegation.destroy(); }); spies.every(function (spy) { var success = spy.calledOnce; spy.restore(); return success; }); }); it('should add event listeners to all the elements in a base array', function() { var spy = sinon.spy(); var items = document.querySelectorAll('li') delegate(items, 'a', 'click', spy); var anchors = document.querySelectorAll('a') simulant.fire(anchors[0], simulant('click')); simulant.fire(anchors[1], simulant('click')); assert.ok(spy.calledTwice); }); it('should remove the event listeners from all the elements in a base array', function() { var items = document.querySelectorAll('li') var spies = Array.prototype.map.call(items, function (li) { return sinon.spy(li, 'removeEventListener'); }); var delegations = delegate(items, 'a', 'click', function() {}); delegations.forEach(function (delegation) { delegation.destroy(); }); spies.every(function (spy) { var success = spy.calledOnce; spy.restore(); return success; }); }); });