You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
3.4 KiB
168 lines
3.4 KiB
'use strict'
|
|
|
|
const { test } = require('tap')
|
|
const { EventEmitter } = require('events')
|
|
const propagate = require('..')
|
|
|
|
test('propagates events', t => {
|
|
t.plan(16)
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
propagate(ee1, ee2)
|
|
|
|
ee2.on('event-1', (a, b, c) => {
|
|
t.equal(a, 'a')
|
|
t.equal(b, 'b')
|
|
t.equal(c, undefined)
|
|
})
|
|
|
|
ee2.on('event-2', (a, b, c) => {
|
|
t.equal(a, 'c')
|
|
t.equal(b, 'd')
|
|
t.equal(c, undefined)
|
|
})
|
|
|
|
t.true(ee1.emit('event-1', 'a', 'b'))
|
|
t.true(ee1.emit('event-1', 'a', 'b'))
|
|
t.true(ee1.emit('event-2', 'c', 'd'))
|
|
t.true(ee1.emit('event-2', 'c', 'd'))
|
|
})
|
|
|
|
test('propagates can end', t => {
|
|
t.plan(3)
|
|
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
const prop = propagate(ee1, ee2)
|
|
|
|
ee2.on('event', () => {
|
|
t.ok('true', 'propagated')
|
|
})
|
|
|
|
t.true(ee1.emit('event'))
|
|
prop.end()
|
|
t.false(ee1.emit('event'))
|
|
})
|
|
|
|
test('after propagation old one still emits', t => {
|
|
t.plan(4)
|
|
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
const prop = propagate(ee1, ee2)
|
|
|
|
ee1.on('event', () => {
|
|
t.ok('true', 'propagated')
|
|
})
|
|
|
|
t.true(ee1.emit('event'))
|
|
prop.end()
|
|
t.true(ee1.emit('event'))
|
|
})
|
|
|
|
test('emit on source before destination', t => {
|
|
t.plan(2)
|
|
|
|
const source = new EventEmitter()
|
|
const dest = new EventEmitter()
|
|
|
|
// Set up test case for "propagate all"
|
|
// `count` should have been incremented by handler on source when handler on dest is invoked
|
|
let count = 0
|
|
propagate(source, dest)
|
|
source.on('event', () => {
|
|
count++
|
|
})
|
|
dest.on('event', () => {
|
|
t.equal(count, 1, 'emit on source first')
|
|
})
|
|
|
|
// Emit the events for assertion
|
|
t.true(source.emit('event'))
|
|
})
|
|
|
|
test('is able to propagate only certain events', t => {
|
|
t.plan(6)
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
// propagate only event-1 and event-2, leaving out
|
|
const p = propagate(['event-1', 'event-2'], ee1, ee2)
|
|
|
|
ee2.on('event-1', () => {
|
|
t.ok(true, 'event 1 received')
|
|
})
|
|
|
|
ee2.on('event-2', (a, b, c) => {
|
|
t.ok(true, 'event 2 received')
|
|
})
|
|
|
|
ee2.on('event-3', (a, b, c) => {
|
|
t.fail('event 3 should not have been received')
|
|
})
|
|
|
|
t.true(ee1.emit('event-1'))
|
|
t.true(ee1.emit('event-2'))
|
|
t.false(ee1.emit('event-3'))
|
|
|
|
p.end()
|
|
|
|
t.false(ee1.emit('event-1'))
|
|
})
|
|
|
|
test('is able to propagate and map certain events', t => {
|
|
t.plan(6)
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
// propagate only event-1 and event-2, leaving out
|
|
const p = propagate(
|
|
{
|
|
'event-1': 'other-event-1',
|
|
'event-2': 'other-event-2',
|
|
},
|
|
ee1,
|
|
ee2
|
|
)
|
|
|
|
ee2.on('other-event-1', () => {
|
|
t.ok(true, 'event 1 received')
|
|
})
|
|
|
|
ee2.on('other-event-2', (a, b, c) => {
|
|
t.ok(true, 'event 2 received')
|
|
})
|
|
|
|
ee2.on('event-3', (a, b, c) => {
|
|
t.fail('event 3 should not have been received')
|
|
})
|
|
|
|
t.true(ee1.emit('event-1'))
|
|
t.true(ee1.emit('event-2'))
|
|
t.false(ee1.emit('event-3'))
|
|
|
|
p.end()
|
|
|
|
t.false(ee1.emit('event-1'))
|
|
})
|
|
|
|
test('is able to propagate a single event', t => {
|
|
t.plan(5)
|
|
const ee1 = new EventEmitter()
|
|
const ee2 = new EventEmitter()
|
|
const p = propagate('event-1', ee1, ee2)
|
|
|
|
ee2.on('event-1', () => {
|
|
t.ok(true, 'event 1 received')
|
|
})
|
|
|
|
ee2.on('event-2', (a, b, c) => {
|
|
t.fail('event 3 should not have been received')
|
|
})
|
|
|
|
t.true(ee1.emit('event-1'))
|
|
t.false(ee1.emit('event-2'))
|
|
|
|
p.end()
|
|
|
|
t.false(ee1.emit('event-1'))
|
|
t.false(ee1.emit('event-2'))
|
|
})
|
|
|