mirror of
https://github.com/nodejs/node.git
synced 2024-11-24 12:10:08 +01:00
508890d795
PR-URL: https://github.com/nodejs/node/pull/39928 Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Zijian Liu <lxxyxzj@gmail.com>
78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
'use strict';
|
|
require('../common');
|
|
const ArrayStream = require('../common/arraystream');
|
|
const assert = require('assert');
|
|
const repl = require('repl');
|
|
|
|
let count = 0;
|
|
|
|
function run({ command, expected, useColors = false }) {
|
|
let accum = '';
|
|
|
|
const output = new ArrayStream();
|
|
output.write = (data) => accum += data.replace('\r', '');
|
|
|
|
const r = repl.start({
|
|
prompt: '',
|
|
input: new ArrayStream(),
|
|
output,
|
|
terminal: false,
|
|
useColors
|
|
});
|
|
|
|
r.write(`${command}\n`);
|
|
if (typeof expected === 'string') {
|
|
assert.strictEqual(accum, expected);
|
|
} else {
|
|
assert.match(accum, expected);
|
|
}
|
|
|
|
// Verify that the repl is still working as expected.
|
|
accum = '';
|
|
r.write('1 + 1\n');
|
|
// eslint-disable-next-line no-control-regex
|
|
assert.strictEqual(accum.replace(/\u001b\[[0-9]+m/g, ''), '2\n');
|
|
r.close();
|
|
count++;
|
|
}
|
|
|
|
const tests = [
|
|
{
|
|
useColors: true,
|
|
command: 'x',
|
|
expected: 'Uncaught ReferenceError: x is not defined\n'
|
|
},
|
|
{
|
|
useColors: true,
|
|
command: 'throw { foo: "test" }',
|
|
expected: "Uncaught { foo: \x1B[32m'test'\x1B[39m }\n"
|
|
},
|
|
{
|
|
command: 'process.on("uncaughtException", () => console.log("Foobar"));\n',
|
|
expected: /^Uncaught:\nTypeError \[ERR_INVALID_REPL_INPUT]: Listeners for `/
|
|
},
|
|
{
|
|
command: 'x;\n',
|
|
expected: 'Uncaught ReferenceError: x is not defined\n'
|
|
},
|
|
{
|
|
command: 'process.on("uncaughtException", () => console.log("Foobar"));' +
|
|
'console.log("Baz");\n',
|
|
expected: /^Uncaught:\nTypeError \[ERR_INVALID_REPL_INPUT]: Listeners for `/
|
|
},
|
|
{
|
|
command: 'console.log("Baz");' +
|
|
'process.on("uncaughtException", () => console.log("Foobar"));\n',
|
|
expected: /^Baz\nUncaught:\nTypeError \[ERR_INVALID_REPL_INPUT]:.*uncaughtException/
|
|
},
|
|
];
|
|
|
|
process.on('exit', () => {
|
|
// To actually verify that the test passed we have to make sure no
|
|
// `uncaughtException` listeners exist anymore.
|
|
process.removeAllListeners('uncaughtException');
|
|
assert.strictEqual(count, tests.length);
|
|
});
|
|
|
|
tests.forEach(run);
|