61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
var test = require('tap').test;
|
|
var path = require('path');
|
|
var concat = require('concat-stream');
|
|
var spawn = require('child_process').spawn;
|
|
|
|
var stripFullStack = require('./common').stripFullStack;
|
|
|
|
test(function (t) {
|
|
t.plan(2);
|
|
var ps = spawn(process.execPath, [path.join(__dirname, 'double_end', 'double.js')]);
|
|
ps.on('exit', function (code) {
|
|
t.equal(code, 1);
|
|
});
|
|
ps.stdout.pipe(concat(function (body) {
|
|
// The implementation of node's timer library has changed over time. We
|
|
// need to reverse engineer the error we expect to see.
|
|
|
|
// This code is unfortunately by necessity highly coupled to node
|
|
// versions, and may require tweaking with future versions of the timers
|
|
// library.
|
|
function doEnd() { throw new Error(); };
|
|
var to = setTimeout(doEnd, 5000);
|
|
clearTimeout(to);
|
|
to._onTimeout = doEnd;
|
|
|
|
var stackExpected;
|
|
var atExpected;
|
|
try {
|
|
to._onTimeout();
|
|
}
|
|
catch (e) {
|
|
stackExpected = stripFullStack(e.stack).split('\n')[1];
|
|
stackExpected = stackExpected.replace('double_end.js', 'double_end/double.js');
|
|
stackExpected = stackExpected.trim();
|
|
atExpected = stackExpected.replace(/^at\s+/, 'at: ');
|
|
}
|
|
|
|
var stripped = stripFullStack(body.toString('utf8'));
|
|
t.equal(stripped, [
|
|
'TAP version 13',
|
|
'# double end',
|
|
'ok 1 should be equal',
|
|
'not ok 2 .end() called twice',
|
|
' ---',
|
|
' operator: fail',
|
|
' ' + atExpected,
|
|
' stack: |-',
|
|
' Error: .end() called twice',
|
|
' [... stack stripped ...]',
|
|
' ' + stackExpected,
|
|
' [... stack stripped ...]',
|
|
' ...',
|
|
'',
|
|
'1..2',
|
|
'# tests 2',
|
|
'# pass 1',
|
|
'# fail 1',
|
|
].join('\n') + '\n\n');
|
|
}));
|
|
});
|