mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Add tests for EventEmitter. (#2515)
This commit is contained in:
parent
2d510d640a
commit
871bc4e06b
|
@ -6,6 +6,10 @@ export default class EventEmitter {
|
|||
this.listeners[event] = new Set()
|
||||
}
|
||||
|
||||
if (this.listeners[event].has(cb)) {
|
||||
throw new Error(`The listener already exising in event: ${event}`)
|
||||
}
|
||||
|
||||
this.listeners[event].add(cb)
|
||||
}
|
||||
|
||||
|
@ -15,7 +19,6 @@ export default class EventEmitter {
|
|||
}
|
||||
|
||||
off (event, cb) {
|
||||
if (!this.listeners[event]) return
|
||||
this.listeners[event].delete(cb)
|
||||
}
|
||||
}
|
||||
|
|
82
test/unit/EventEmitter.test.js
Normal file
82
test/unit/EventEmitter.test.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
/* global describe, it, expect */
|
||||
import EventEmitter from '../../dist/lib/EventEmitter'
|
||||
|
||||
describe('EventEmitter', () => {
|
||||
describe('With listeners', () => {
|
||||
it('should listen to a event', (done) => {
|
||||
const ev = new EventEmitter()
|
||||
ev.on('sample', done)
|
||||
ev.emit('sample')
|
||||
})
|
||||
|
||||
it('should listen to multiple listeners', () => {
|
||||
const ev = new EventEmitter()
|
||||
let cnt = 0
|
||||
|
||||
ev.on('sample', () => { cnt += 1 })
|
||||
ev.on('sample', () => { cnt += 1 })
|
||||
|
||||
ev.emit('sample')
|
||||
|
||||
expect(cnt).toBe(2)
|
||||
})
|
||||
|
||||
it('should listen to multiple events', () => {
|
||||
const ev = new EventEmitter()
|
||||
const data = []
|
||||
const cb = (name) => { data.push(name) }
|
||||
|
||||
ev.on('sample1', cb)
|
||||
ev.on('sample2', cb)
|
||||
|
||||
ev.emit('sample1', 'one')
|
||||
ev.emit('sample2', 'two')
|
||||
|
||||
expect(data).toEqual(['one', 'two'])
|
||||
})
|
||||
|
||||
it('should support multiple arguments', () => {
|
||||
const ev = new EventEmitter()
|
||||
let data
|
||||
|
||||
ev.on('sample', (...args) => { data = args })
|
||||
ev.emit('sample', 'one', 'two')
|
||||
|
||||
expect(data).toEqual(['one', 'two'])
|
||||
})
|
||||
|
||||
it('should possible to stop listening an event', () => {
|
||||
const ev = new EventEmitter()
|
||||
let cnt = 0
|
||||
const cb = () => { cnt += 1 }
|
||||
|
||||
ev.on('sample', cb)
|
||||
|
||||
ev.emit('sample')
|
||||
expect(cnt).toBe(1)
|
||||
|
||||
ev.off('sample', cb)
|
||||
|
||||
ev.emit('sample')
|
||||
expect(cnt).toBe(1)
|
||||
})
|
||||
|
||||
it('should throw when try to add the same listener multiple times', () => {
|
||||
const ev = new EventEmitter()
|
||||
const cb = () => {}
|
||||
|
||||
ev.on('sample', cb)
|
||||
|
||||
const run = () => ev.on('sample', cb)
|
||||
|
||||
expect(run).toThrow(/The listener already exising in event: sample/)
|
||||
})
|
||||
})
|
||||
|
||||
describe('Without a listener', () => {
|
||||
it('should not fail to emit', () => {
|
||||
const ev = new EventEmitter()
|
||||
ev.emit('aaaa', 10, 20)
|
||||
})
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue