diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/delegate/test/delegate.js | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/delegate/test/delegate.js')
| -rw-r--r-- | node_modules/delegate/test/delegate.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/node_modules/delegate/test/delegate.js b/node_modules/delegate/test/delegate.js new file mode 100644 index 00000000..669738f6 --- /dev/null +++ b/node_modules/delegate/test/delegate.js @@ -0,0 +1,116 @@ +var delegate = require('../src/delegate'); +var simulant = require('simulant'); + +describe('delegate', function() { + before(function() { + var html = '<ul>' + + '<li><a>Item 1</a></li>' + + '<li><a>Item 2</a></li>' + + '<li><a>Item 3</a></li>' + + '<li><a>Item 4</a></li>' + + '<li><a>Item 5</a></li>' + + '</ul>'; + + 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; + }); + }); +}); |
