From dba432d1b6e5649e97a0d75e98a66768e8357a46 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Thu, 29 Dec 2016 05:09:47 -0800 Subject: [PATCH] Add tests --- src/EventEmitter.test.ts | 84 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/EventEmitter.test.ts diff --git a/src/EventEmitter.test.ts b/src/EventEmitter.test.ts new file mode 100644 index 00000000..9a0005ba --- /dev/null +++ b/src/EventEmitter.test.ts @@ -0,0 +1,84 @@ +import { assert } from 'chai'; +import { EventEmitter } from './EventEmitter'; + +describe('EventEmitter', () => { + let eventEmitter: EventEmitter; + + beforeEach(() => { + eventEmitter = new EventEmitter(); + }); + + describe('once', () => { + it('should trigger the listener only once', () => { + let count = 0; + const listener = () => count++; + eventEmitter.once('test', listener); + eventEmitter.emit('test'); + assert.equal(count, 1); + eventEmitter.emit('test'); + assert.equal(count, 1); + }); + }); + + describe('emit', () => { + it('should emit events to listeners', () => { + let count1 = 0; + let count2 = 0; + const listener1 = () => count1++; + const listener2 = () => count2++; + eventEmitter.on('test', listener1); + eventEmitter.on('test', listener2); + eventEmitter.emit('test'); + assert.equal(count1, 1); + assert.equal(count2, 1); + eventEmitter.emit('test'); + assert.equal(count1, 2); + assert.equal(count2, 2); + }); + + it('should manage multiple listener types', () => { + let count1 = 0; + let count2 = 0; + const listener1 = () => count1++; + const listener2 = () => count2++; + eventEmitter.on('test', listener1); + eventEmitter.on('foo', listener2); + eventEmitter.emit('test'); + assert.equal(count1, 1); + assert.equal(count2, 0); + eventEmitter.emit('foo'); + assert.equal(count1, 1); + assert.equal(count2, 1); + }); + }); + + describe('listeners', () => { + it('should return listeners for the type requested', () => { + assert.equal(eventEmitter.listeners('test').length, 0); + const listener = () => {}; + eventEmitter.addListener('test', listener); + assert.deepEqual(eventEmitter.listeners('test'), [listener]); + }); + }); + + describe('removeListener', () => { + it('should remove the specific listener', () => { + const listener1 = () => {}; + const listener2 = () => {}; + eventEmitter.addListener('foo', listener1); + eventEmitter.addListener('foo', listener2); + assert.equal(eventEmitter.listeners('foo').length, 2); + eventEmitter.removeListener('foo', listener1); + assert.deepEqual(eventEmitter.listeners('foo'), [listener2]); + }); + }); + + describe('removeAllListeners', () => { + it('should clear all listeners', () => { + eventEmitter.addListener('foo', () => {}); + assert.equal(eventEmitter.listeners('foo').length, 1); + eventEmitter.removeAllListeners('foo'); + assert.equal(eventEmitter.listeners('foo').length, 0); + }); + }); +});