|
'use strict';
|
|
const tape = require( 'tape' )
|
const co = require( 'co' )
|
const IO = require( '../' )
|
|
const application = require( './helpers/utils' ).application
|
const connection = require( './helpers/utils' ).connection
|
|
|
tape( 'An event handler can be associated with an event', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
io.on( 'req', ctx => {
|
t.pass( 'The event handler has been triggered' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
})
|
|
tape( 'Multiple events can be set listening', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
io.on( 'req', ctx => {
|
count++
|
})
|
io.on( 'req2', ctx => {
|
count++
|
t.equal( count, 2, 'Both events were triggered' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
client.emit( 'req2' )
|
})
|
|
tape( 'Multiple handlers can be connected to an event', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
io.on( 'req', ctx => {
|
// First handler
|
count++
|
})
|
io.on( 'req', ctx => {
|
// Second handler
|
count++
|
})
|
io.on( 'end', ctx => {
|
t.equal( count, 2, 'Both handlers should have been triggered' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
client.emit( 'end' )
|
})
|
|
tape( 'A handler can be removed', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
function add() {
|
count++
|
}
|
|
io.on( 'req', add )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
io.off( 'req', add )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.equal( count, 1, 'Add function is called only once' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
tape( 'A handler can be removed from a multiple handler event', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
function add() {
|
count++
|
}
|
function plus() {
|
count++
|
}
|
|
io.on( 'req', add )
|
io.on( 'req', plus )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.equal( count, 2, 'Both handlers should have been called' )
|
io.off( 'req', add )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.equal( count, 3, 'After removal only one handler will have been triggered' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
tape( 'A specific handler can be removed from an event - front', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count1 = 0
|
var count2 = 0
|
|
function add() {
|
count1++
|
}
|
function plus() {
|
count2++
|
}
|
|
io.on( 'req', add )
|
io.on( 'req', plus )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.ok( count1 === 1 && count2 === 1, 'Both handlers should have been called' )
|
io.off( 'req', add )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.ok( count1 === 1 && count2 === 2, 'A specific handler has been removed from the start of the list' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
tape( 'A specific handler can be removed from an event - last', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count1 = 0
|
var count2 = 0
|
|
function add() {
|
count1++
|
}
|
function plus() {
|
count2++
|
}
|
|
io.on( 'req', add )
|
io.on( 'req', plus )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.ok( count1 === 1 && count2 === 1, 'Both handlers should have been called' )
|
io.off( 'req', plus )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.ok( count1 === 2 && count2 === 1, 'A specific handler has been removed from the end of the list' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
|
tape( 'All handlers can be removed from an event', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
function add() {
|
count++
|
}
|
function plus() {
|
count++
|
}
|
|
io.on( 'req', add )
|
io.on( 'req', plus )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.equal( count, 2, 'Both handlers should have been called' )
|
io.off( 'req' )
|
client.emit( 'req' )
|
|
setTimeout( () => {
|
t.equal( count, 2, 'All handlers have been removed from the event' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
tape( 'All handlers can be removed from a socket instance', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
function add() {
|
count++
|
}
|
function plus() {
|
count++
|
}
|
|
io.on( 'req1', add )
|
io.on( 'req2', plus )
|
client.emit( 'req1' )
|
client.emit( 'req2' )
|
|
setTimeout( () => {
|
t.equal( count, 2, 'Both handlers should have been called' )
|
io.off()
|
client.emit( 'req1' )
|
client.emit( 'req2' )
|
|
setTimeout( () => {
|
t.equal( count, 2, 'All handlers have been removed from the event' )
|
client.disconnect()
|
}, 500 )
|
}, 500 )
|
})
|
|
tape( 'Middleware is run before listeners', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
var count = 0
|
|
io.use( co.wrap( function *( ctx, next ) {
|
count++
|
}))
|
io.on( 'req', ctx => {
|
t.equal( count, 1, 'Middleware runs before listeners' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
})
|
|
tape( 'Middleware can manipulate the context', t => {
|
t.plan( 1 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
io.use( co.wrap( function *( ctx, next ) {
|
ctx.foo = true
|
}))
|
io.on( 'req', ctx => {
|
t.ok( ctx.foo, 'Context can be manipulated' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
})
|
|
tape( 'Middleware can be traversed', t => {
|
t.plan( 2 )
|
|
const io = new IO()
|
const app = application( io )
|
const client = connection( app.server )
|
|
io.use( co.wrap( function *( ctx, next ) {
|
ctx.count = 0
|
yield next()
|
t.equal( ctx.count, 1, 'Downstream middleware manipulated the context' )
|
ctx.count++
|
}))
|
io.use( co.wrap( function *( ctx, next ) {
|
ctx.count++
|
}))
|
io.on( 'req', ctx => {
|
t.equal( ctx.count, 2, 'Middleware upstream and downstream have executed' )
|
client.disconnect()
|
})
|
|
client.emit( 'req' )
|
})
|