mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
15bb1c5e79
- Replaces taskr-babel with taskr-typescript for the `next` package - Makes sure Node 8+ is used, no unneeded transpilation - Compile Next.js client side files through babel the same way pages are - Compile Next.js client side files to esmodules, not commonjs, so that tree shaking works. - Move error-debug.js out of next-server as it's only used/require in development - Drop ansi-html as dependency from next-server - Make next/link esmodule (for tree-shaking) - Make next/router esmodule (for tree-shaking) - add typescript compilation to next-server - Remove last remains of Flow - Move hoist-non-react-statics to next, out of next-server - Move htmlescape to next, out of next-server - Remove runtime-corejs2 from next-server
107 lines
2.5 KiB
JavaScript
107 lines
2.5 KiB
JavaScript
/* eslint-env jest */
|
|
import EventEmitter from 'next-server/dist/lib/event-emitter'
|
|
|
|
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(/Listener already exists for router event: `sample`/)
|
|
})
|
|
|
|
it('should support chaining like the nodejs EventEmitter', () => {
|
|
const emitter = new EventEmitter()
|
|
let calledA = false
|
|
let calledB = false
|
|
|
|
emitter
|
|
.on('a', () => { calledA = true })
|
|
.on('b', () => { calledB = true })
|
|
|
|
emitter.emit('a')
|
|
emitter.emit('b')
|
|
|
|
expect(calledA).toEqual(true)
|
|
expect(calledB).toEqual(true)
|
|
})
|
|
|
|
it('should return an indication on emit if there were listeners', () => {
|
|
const emitter = new EventEmitter()
|
|
emitter.on('a', () => { })
|
|
|
|
expect(emitter.emit('a')).toEqual(true)
|
|
expect(emitter.emit('b')).toEqual(false)
|
|
})
|
|
})
|
|
|
|
describe('Without a listener', () => {
|
|
it('should not fail to emit', () => {
|
|
const ev = new EventEmitter()
|
|
ev.emit('aaaa', 10, 20)
|
|
})
|
|
})
|
|
})
|