97 lines
2.3 KiB
CoffeeScript
97 lines
2.3 KiB
CoffeeScript
vows = require 'vows'
|
|
child_process = require 'child_process'
|
|
exec = child_process.exec
|
|
spawn = child_process.spawn
|
|
assert = require 'assert'
|
|
|
|
describe = (name, bat) -> vows.describe(name).addBatch(bat).export(module)
|
|
|
|
t = (fn) ->
|
|
->
|
|
fn.apply this, arguments
|
|
return
|
|
|
|
program = '''
|
|
var phantom = require('./');
|
|
process.on('SIGINT', function() {
|
|
console.log('SIGINT');
|
|
process.exit(0);
|
|
});
|
|
process.on('SIGTERM', function() {
|
|
console.log('SIGTERM');
|
|
process.exit(0);
|
|
});
|
|
process.on('exit', function() {
|
|
console.log('EXIT');
|
|
});
|
|
console.log('Setup');
|
|
setTimeout(function() {
|
|
console.log('Going out');
|
|
}, 1000);
|
|
'''
|
|
|
|
programCbless = '''
|
|
var phantom = require('./');
|
|
console.log('Setup');
|
|
setTimeout(function() {
|
|
console.log('Going out');
|
|
}, 200);
|
|
'''
|
|
|
|
createTopic = (signal, p) ->
|
|
->
|
|
that = this
|
|
result = ''
|
|
co = child_process.exec 'node -e "' + p + '"'
|
|
cb = ->
|
|
if signal
|
|
cb = ->
|
|
process.kill co.pid, signal
|
|
else
|
|
cb = ->
|
|
|
|
co.stdout.on 'data', (data) ->
|
|
result += data
|
|
cb() if data.toString().match /^Setup/g
|
|
co.stderr.on 'data', (data) ->
|
|
result += data
|
|
co.on 'exit', (code) ->
|
|
that.callback null, [result, co.pid]
|
|
return undefined
|
|
|
|
createExitTest = (expect) ->
|
|
(err, [r, pid]) ->
|
|
assert.isNull err
|
|
assert.deepEqual('Setup\n' + expect, r)
|
|
|
|
createExitTestCbLess = (expect) ->
|
|
(err, [r, pid]) ->
|
|
assert.isNull err
|
|
assert.deepEqual('Setup\n' + expect, r)
|
|
try
|
|
process.kill(pid)
|
|
assert.fail()
|
|
|
|
describe "The phantom module",
|
|
"SIGINT":
|
|
"with callbacks":
|
|
topic: createTopic('SIGINT', program)
|
|
"exited": createExitTest('SIGINT\nEXIT\n')
|
|
"without callbacks":
|
|
topic: createTopic('SIGINT', programCbless)
|
|
"exited": createExitTestCbLess('')
|
|
"SIGTERM":
|
|
"with callbacks":
|
|
topic: createTopic('SIGTERM', program)
|
|
"exited": createExitTest('SIGTERM\nEXIT\n')
|
|
"without callbacks":
|
|
topic: createTopic('SIGTERM', programCbless)
|
|
"exited": createExitTestCbLess('')
|
|
"without signals":
|
|
"with callbacks":
|
|
topic: createTopic(false, program)
|
|
"exited": createExitTest('Going out\nEXIT\n')
|
|
"without callbacks":
|
|
topic: createTopic(false, programCbless)
|
|
"exited": createExitTestCbLess('Going out\n')
|