var listen = require('../src/listen');
|
var simulant = require('simulant');
|
|
describe('good-listener', function() {
|
before(function() {
|
global.node = document.createElement('div');
|
global.node.setAttribute('id', 'foo');
|
global.node.setAttribute('class', 'foo');
|
document.body.appendChild(global.node);
|
});
|
|
after(function() {
|
document.body.innerHTML = '';
|
});
|
|
describe('listen', function() {
|
it('should throw an error since arguments were not passed', function(done) {
|
try {
|
listen();
|
}
|
catch(error) {
|
assert.equal(error.message, 'Missing required arguments');
|
done();
|
}
|
});
|
|
it('should throw an error since "target" was invalid', function(done) {
|
try {
|
listen(null, 'click', function() {});
|
}
|
catch(error) {
|
assert.equal(error.message, 'First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
|
done();
|
}
|
});
|
|
it('should throw an error since "type" was invalid', function(done) {
|
try {
|
listen('.btn', false, function() {});
|
}
|
catch(error) {
|
assert.equal(error.message, 'Second argument must be a String');
|
done();
|
}
|
});
|
|
it('should throw an error since "callback" was invalid', function(done) {
|
try {
|
listen('.btn', 'click', []);
|
}
|
catch(error) {
|
assert.equal(error.message, 'Third argument must be a Function');
|
done();
|
}
|
});
|
});
|
|
describe('listenNode', function() {
|
before(function() {
|
global.target = document.querySelector('#foo');
|
global.spy = sinon.spy(global.target, 'removeEventListener');
|
});
|
|
after(function() {
|
global.spy.restore();
|
});
|
|
it('should add an event listener', function(done) {
|
listen(global.target, 'click', function() {
|
done();
|
});
|
|
simulant.fire(global.target, simulant('click'));
|
});
|
|
it('should remove an event listener', function() {
|
var listener = listen(global.target, 'click', function() {});
|
|
listener.destroy();
|
assert.ok(global.spy.calledOnce);
|
});
|
});
|
|
describe('listenNodeList', function() {
|
before(function() {
|
global.targets = document.querySelectorAll('.foo');
|
global.spy = sinon.spy(global.targets[0], 'removeEventListener');
|
});
|
|
after(function() {
|
global.spy.restore();
|
});
|
|
it('should add an event listener', function(done) {
|
listen(global.targets, 'click', function() {
|
done();
|
});
|
|
simulant.fire(global.targets[0], simulant('click'));
|
});
|
|
it('should remove an event listener', function() {
|
var listener = listen(global.targets, 'click', function() {});
|
|
listener.destroy();
|
assert.ok(global.spy.calledOnce);
|
});
|
});
|
|
describe('listenSelector', function() {
|
before(function() {
|
global.target = document.querySelector('.foo');
|
global.spy = sinon.spy(document.body, 'removeEventListener');
|
});
|
|
after(function() {
|
global.spy.restore();
|
});
|
|
it('should add an event listener', function(done) {
|
listen('.foo', 'click', function() {
|
done();
|
});
|
|
simulant.fire(global.target, simulant('click'));
|
});
|
|
it('should remove an event listener', function() {
|
var listener = listen('.foo', 'click', function() {});
|
|
listener.destroy();
|
assert.ok(global.spy.calledOnce);
|
});
|
});
|
});
|