mirror of
https://github.com/nodejs/node.git
synced 2025-05-02 03:31:35 +00:00

When running the REPL as standalone program it's now possible to use `process.on('uncaughtException', listener)`. It is going to use those listeners from now on and the regular error output is suppressed. It also fixes the issue that REPL instances started inside of an application would silence all application errors. It is now prohibited to add the exception listener in such REPL instances. Trying to add such listeners throws an `ERR_INVALID_REPL_INPUT` error. Fixes: https://github.com/nodejs/node/issues/19998 PR-URL: https://github.com/nodejs/node/pull/27151 Fixes: https://github.com/nodejs/node/issues/19998 Reviewed-By: Lance Ball <lball@redhat.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
// This verifies that adding an `uncaughtException` listener in an REPL instance
|
|
// does not suppress errors in the whole application. Adding such listener
|
|
// should throw.
|
|
|
|
require('../common');
|
|
const ArrayStream = require('../common/arraystream');
|
|
const repl = require('repl');
|
|
const assert = require('assert');
|
|
|
|
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: false,
|
|
global: false
|
|
});
|
|
|
|
r.write(
|
|
'process.nextTick(() => {\n' +
|
|
' process.on("uncaughtException", () => console.log("Foo"));\n' +
|
|
' throw new TypeError("foobar");\n' +
|
|
'});\n'
|
|
);
|
|
r.write(
|
|
'setTimeout(() => {\n' +
|
|
' throw new RangeError("abc");\n' +
|
|
'}, 1);console.log()\n'
|
|
);
|
|
r.close();
|
|
|
|
setTimeout(() => {
|
|
const len = process.listenerCount('uncaughtException');
|
|
process.removeAllListeners('uncaughtException');
|
|
assert.strictEqual(len, 0);
|
|
assert(/ERR_INVALID_REPL_INPUT.*(?!Type)RangeError: abc/s.test(accum));
|
|
}, 2);
|