UNPKG

kdf

Version:

KD: a non-document focused UI Framework for web applications.

324 lines (218 loc) 9.55 kB
{ assert } = require('chai') KDEventEmitter = require('../../src/core/eventemitter') describe 'KDEventEmitter', -> it 'exists', -> assert.ok(KDEventEmitter) describe 'KDEventEmitter.registerStaticEmitter', -> it 'creates events holder', -> KDEventEmitter.registerStaticEmitter() assert.isDefined KDEventEmitter._e describe 'KDEventEmitter.emit', -> context "when event holder isn't defined", -> beforeEach -> # This is suspicious # TODO: Talk about it ~Umut KDEventEmitter._e = null it 'throws an error', -> assert.throws (-> KDEventEmitter.emit()), /Static events are not enabled/ context 'when event holder is defined', -> beforeEach -> KDEventEmitter.registerStaticEmitter() it 'registers an event with the name', -> KDEventEmitter.emit 'anEvent' assert.isDefined KDEventEmitter._e['anEvent'] it 'creates event holder if it is not created', -> KDEventEmitter.emit 'anEvent' assert.isDefined KDEventEmitter._e['anEvent'] it 'calls all of the listeners', -> array = [] KDEventEmitter._e['anEvent'] = [] KDEventEmitter._e['anEvent'].push(=> array.push( 1 )) KDEventEmitter._e['anEvent'].push(=> array.push( 2 )) KDEventEmitter.emit 'anEvent' assert.equal array.length, 2 it 'returns itself for chaining', -> ret = KDEventEmitter.emit 'anEvent' assert.equal ret, KDEventEmitter describe 'KDEventEmitter.on', -> context 'when listener is not a function', -> it 'throws an error', -> assert.throws (-> KDEventEmitter.on()), /listener is not a function/ assert.throws (-> KDEventEmitter.on('a', 'b')), /listener is not a function/ assert.throws (-> KDEventEmitter.on('a', 1)), /listener is not a function/ assert.throws (-> KDEventEmitter.on('a', {})), /listener is not a function/ assert.throws (-> KDEventEmitter.on('a', [])), /listener is not a function/ assert.throws (-> KDEventEmitter.on('a', yes)), /listener is not a function/ context "when event holder isn't defined", -> beforeEach -> # This is suspicious # TODO: Talk about it ~Umut KDEventEmitter._e = null it 'throws an error', -> onFn = -> KDEventEmitter.on 'a', -> 'dummy' assert.throws onFn, /Static events are not enabled/ context "when requirements are ok", -> beforeEach -> KDEventEmitter.registerStaticEmitter() it 'emits an event with listener', -> listener = -> yes KDEventEmitter.on 'anEvent', listener assert.isDefined KDEventEmitter._e['newListener'] it 'registers an event', -> listener = -> yes KDEventEmitter.on 'anEvent', listener assert.isDefined KDEventEmitter._e['anEvent'] assert.equal KDEventEmitter._e['anEvent'][0], listener it 'registers multiple events', -> listener = -> yes KDEventEmitter.on ['anEvent', 'otherEvent'], listener assert.isDefined KDEventEmitter._e['anEvent'] assert.equal KDEventEmitter._e['anEvent'][0], listener assert.isDefined KDEventEmitter._e['otherEvent'] assert.equal KDEventEmitter._e['otherEvent'][0], listener it 'returns itself for chaining', -> listener = -> yes onFn = KDEventEmitter.on 'anEvent', listener assert.equal onFn, KDEventEmitter describe 'KDEventEmitter.off', -> beforeEach -> KDEventEmitter.registerStaticEmitter() it 'emits an event', -> listener = -> yes KDEventEmitter.on 'anEvent', listener KDEventEmitter.off 'anEvent', listener assert.isDefined KDEventEmitter._e['listenerRemoved'] it 'unregisters an event', -> listener = -> yes KDEventEmitter.on 'anEvent', listener KDEventEmitter.off 'anEvent', listener assert.equal KDEventEmitter._e['anEvent'].length, 0 it "doesn't unregister a listener doesn't exist on that key", -> listener = -> yes anotherListener = -> no KDEventEmitter.on 'anEvent', listener KDEventEmitter.off 'anEvent', anotherListener assert.deepEqual KDEventEmitter._e['anEvent'], [ listener ] it 'unregisters multiple events', -> listener = -> yes KDEventEmitter.on ['a', 'b'], listener KDEventEmitter.off ['a', 'b'], listener assert.equal KDEventEmitter._e['a'].length, 0 assert.equal KDEventEmitter._e['b'].length, 0 it 'returns itself for chaining', -> listener = -> yes KDEventEmitter.on 'anEvent', listener offFn = KDEventEmitter.off 'anEvent', listener assert.equal offFn, KDEventEmitter context 'Instance Methods', -> describe 'constructor', -> it 'creates events holder', -> emitter = new KDEventEmitter assert.isDefined emitter._e it 'defaults maxlisteners to 10', -> emitter = new KDEventEmitter assert.equal emitter._maxListeners, 10 it 'sets max listeners to option', -> emitter = new KDEventEmitter maxListeners: 30 assert.equal emitter._maxListeners, 30 it "doesn't set max listeners to a negative value", -> emitter = new KDEventEmitter maxListeners: -1 assert.equal emitter._maxListeners, 10 describe 'emit', -> it 'creates an event holder', -> emitter = new KDEventEmitter emitter.emit 'anEvent' assert.isDefined emitter._e['anEvent'] it 'calls listeners', -> array = [] emitter = new KDEventEmitter emitter._e = {} emitter._e['anEvent'] = [] emitter._e['anEvent'].push(=> array.push( 1 )) emitter._e['anEvent'].push(=> array.push( 2 )) emitter.emit 'anEvent' assert.deepEqual array, [1, 2] it 'returns itself for chaining', -> emitter = new KDEventEmitter emitResult = emitter.emit 'anEvent' assert.equal emitResult, emitter describe 'on', -> context 'when listener is not a function', -> it 'throws an error', -> emitter = new KDEventEmitter assert.throws (-> emitter.on()), /listener is not a function/ assert.throws (-> emitter.on('a', 'b')), /listener is not a function/ assert.throws (-> emitter.on('a', 1)), /listener is not a function/ assert.throws (-> emitter.on('a', {})), /listener is not a function/ assert.throws (-> emitter.on('a', [])), /listener is not a function/ assert.throws (-> emitter.on('a', yes)), /listener is not a function/ it 'emits an event with listener', -> listener = -> yes emitter = new KDEventEmitter emitter.on 'anEvent', listener assert.isDefined emitter._e['newListener'] it 'registers an event', -> array = [] listener = (number) -> array.push number emitter = new KDEventEmitter emitter.on 'anEvent', listener emitter.emit 'anEvent', 1 emitter.emit 'anEvent', 2 assert.deepEqual array, [ 1, 2 ] it 'registers multiple events', -> listener = -> yes emitter = new KDEventEmitter emitter.on ['anEvent', 'otherEvent'], listener assert.isDefined emitter._e['anEvent'] assert.equal emitter._e['anEvent'][0], listener assert.isDefined emitter._e['otherEvent'] assert.equal emitter._e['otherEvent'][0], listener it 'returns itself for chaining', -> listener = -> yes emitter = new KDEventEmitter onFn = emitter.on 'anEvent', listener assert.equal onFn, emitter describe 'off', -> it 'emits an event', -> listener = -> yes emitter = new KDEventEmitter emitter.on 'anEvent', listener emitter.off 'anEvent', listener assert.isDefined emitter._e['listenerRemoved'] it 'unregisters an event', -> listener = -> yes emitter = new KDEventEmitter emitter.on 'anEvent', listener emitter.off 'anEvent', listener assert.equal emitter._e['anEvent'].length, 0 it "doesn't unregister a listener doesn't exist on that key", -> emitter = new KDEventEmitter listener = -> yes anotherListener = -> no emitter.on 'anEvent', listener emitter.off 'anEvent', anotherListener assert.deepEqual emitter._e['anEvent'], [ listener ] it 'unregisters multiple events', -> listener = -> yes emitter = new KDEventEmitter emitter.on ['a', 'b'], listener emitter.off ['a', 'b'], listener assert.equal emitter._e['a'].length, 0 assert.equal emitter._e['b'].length, 0 it 'returns itself for chaining', -> listener = -> yes emitter = new KDEventEmitter emitter.on 'anEvent', listener offFn = emitter.off 'anEvent', listener assert.equal offFn, emitter describe 'once', -> it 'registers an event to be called only once', -> array = [] emitter = new KDEventEmitter emitter.once 'anEvent', (number) -> array.push number emitter.emit 'anEvent', 1 emitter.emit 'anEvent', 2 assert.deepEqual array, [ 1 ] it 'returns itself for chaining', -> emitter = new KDEventEmitter onceResult = emitter.once 'anEvent', (->) assert.equal onceResult, emitter