A suite to track Project Diva score statistics and ratings / D4DJ event data.
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.
 
 
 
 
 
 
projectdivar/server/node_modules/propagate/tests/index.js

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'))
})