dual-emitter
Version:
:tropical_drink: EventEmitter done right and no dependencies. For nodejs and the browser (>= IE8). Can emit custom or DOM events.
107 lines (90 loc) • 2.41 kB
JavaScript
/*!
* dual-emitter <https://github.com/tunnckoCore/dual-emitter>
*
* Copyright (c) 2015 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk)
* Released under the MIT license.
*/
/* jshint asi:true */
var test = require('assertit')
var DualEmitter = require('./index')
test('dual-emitter:', function () {
test('constructor should accept only object', function (done) {
var emitter = new DualEmitter(12345)
test.deepEqual(emitter._events, {})
done()
})
test('should listen `.on` custom event `.emit` few times', function (done) {
var emitter = new DualEmitter()
var count = 0
var results = []
emitter
.on('custom', function onCustom (a, b) {
count++
results.push([a, b])
})
.emit('custom', 'foo', 123)
.emit('custom', 'bar')
.emit('custom')
test.equal(count, 3)
test.deepEqual(results[0], ['foo', 123])
test.deepEqual(results[1], ['bar', undefined])
test.deepEqual(results[2], [undefined, undefined])
done()
})
test('should listen `.once` custom event `.emit` few times', function (done) {
var emitter = new DualEmitter()
var count = 0
emitter
.once('custom', function () {
count++
})
.emit('custom')
.emit('custom')
.emit('custom')
test.equal(count, 1)
done()
})
test('should `.off` event listener after second `.emit`', function (done) {
var emitter = new DualEmitter()
var count = 0
function handler () {
if (count === 2) {
emitter.off('custom', handler)
return
}
count++
}
emitter
.on('custom', handler)
.emit('custom')
.emit('custom')
.emit('custom')
.emit('custom')
test.equal(count, 2)
done()
})
test('should `this` at `.on/.once` be DualEmitter when not DOM usage', function (done) {
var emitter = new DualEmitter()
emitter
.on('custom', function () {
test.equal(typeof this.once, 'function')
done()
})
.emit('custom')
})
test('should support multiple `.on` event', function (done) {
var emitter = new DualEmitter()
var count = 0
function handler () {
count++
}
emitter
.on('custom', handler)
.on('custom', handler)
.on('custom', handler)
.emit('custom')
test.equal(count, 3)
done()
})
})