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