listen-js
Version:
Easily add, remove, and trigger events on anything
74 lines (66 loc) • 3.11 kB
JavaScript
var sinon = require('sinon');
var TestUtils = require('test-utils');
var assert = require('assert');
describe('Listen', function () {
it('registering an event listener on an object and then triggering it calls the listener function', function () {
var Listen = require('../src/listen');
var eventName = 'test:event';
var eventObj = {};
Listen.createTarget(eventObj);
var eventListener = sinon.spy();
eventObj.addEventListener(eventName, eventListener);
eventObj.dispatchEvent(eventName);
assert.equal(eventListener.callCount, 1);
Listen.destroyTarget(eventObj);
});
it('un-registering an event listener on an object and then triggering it does not call the listener function', function () {
var Listen = require('../src/listen');
var eventName = 'my:event';
var eventObj = {};
Listen.createTarget(eventObj);
var eventListener = sinon.spy();
eventObj.addEventListener(eventName, eventListener);
eventObj.removeEventListener(eventName, eventListener);
eventObj.dispatchEvent(eventName);
assert.equal(eventListener.callCount, 0);
Listen.destroyTarget(eventObj);
});
it('should call a listener who has been added to an object, even if createTarget is called on it again', function () {
var Listen = require('../src/listen');
var eventName = 'evt:event2';
var eventObj = {};
var eventListener = sinon.spy();
Listen.createTarget(eventObj);
eventObj.addEventListener(eventName, eventListener);
Listen.createTarget(eventObj);
eventObj.dispatchEvent(eventName);
assert.equal(eventListener.callCount, 1);
Listen.destroyTarget(eventObj);
});
it('should not call a listener after its target is destroyed', function () {
var Listen = require('../src/listen');
var eventName = 'destroyed:event';
var eventObj = {};
Listen.createTarget(eventObj);
var eventListener = sinon.spy();
eventObj.addEventListener(eventName, eventListener);
eventObj.removeEventListener(eventName, eventListener);
Listen.destroyTarget(eventObj);
eventObj.dispatchEvent(eventName);
assert.equal(eventListener.callCount, 0);
});
it('registering multiple event listeners on an object and then triggering it calls each listener function', function () {
var Listen = require('../src/listen');
var eventName = 'test:event';
var eventObj = {};
Listen.createTarget(eventObj);
var firstEventListener = sinon.spy();
var secondEventListener = sinon.spy();
eventObj.addEventListener(eventName, firstEventListener);
eventObj.addEventListener(eventName, secondEventListener);
eventObj.dispatchEvent(eventName);
assert.equal(firstEventListener.callCount, 1, 'first listener was called');
assert.equal(secondEventListener.callCount, 1, 'second listener was called');
Listen.destroyTarget(eventObj);
});
});