mirror of
https://github.com/nodejs/node.git
synced 2025-05-09 19:38:23 +00:00

Currently an error is printed identical, no matter if it is just inspected or if the error is thrown inside of the REPL. This makes sure we are able to distinguish these cases. PR-URL: https://github.com/nodejs/node/pull/25253 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Anna Henningsen <anna@addaleax.net>
73 lines
1.8 KiB
JavaScript
73 lines
1.8 KiB
JavaScript
'use strict';
|
|
require('../common');
|
|
const ArrayStream = require('../common/arraystream');
|
|
const fixtures = require('../common/fixtures');
|
|
const assert = require('assert');
|
|
const repl = require('repl');
|
|
|
|
|
|
function run({ command, expected }) {
|
|
let accum = '';
|
|
|
|
const inputStream = new ArrayStream();
|
|
const outputStream = new ArrayStream();
|
|
|
|
outputStream.write = (data) => accum += data.replace('\r', '');
|
|
|
|
const r = repl.start({
|
|
prompt: '',
|
|
input: inputStream,
|
|
output: outputStream,
|
|
terminal: false,
|
|
useColors: false
|
|
});
|
|
|
|
r.write(`${command}\n`);
|
|
assert.strictEqual(accum, expected);
|
|
r.close();
|
|
}
|
|
|
|
const origPrepareStackTrace = Error.prepareStackTrace;
|
|
Error.prepareStackTrace = (err, stack) => {
|
|
if (err instanceof SyntaxError)
|
|
return err.toString();
|
|
stack.push(err);
|
|
return stack.reverse().join('--->\n');
|
|
};
|
|
|
|
process.on('uncaughtException', (e) => {
|
|
Error.prepareStackTrace = origPrepareStackTrace;
|
|
throw e;
|
|
});
|
|
|
|
process.on('exit', () => (Error.prepareStackTrace = origPrepareStackTrace));
|
|
|
|
const tests = [
|
|
{
|
|
// test .load for a file that throws
|
|
command: `.load ${fixtures.path('repl-pretty-stack.js')}`,
|
|
expected: 'Thrown:\nError: Whoops!--->\nrepl:9:24--->\nd (repl:12:3)' +
|
|
'--->\nc (repl:9:3)--->\nb (repl:6:3)--->\na (repl:3:3)\n'
|
|
},
|
|
{
|
|
command: 'let x y;',
|
|
expected: 'Thrown:\n' +
|
|
'let x y;\n ^\n\nSyntaxError: Unexpected identifier\n'
|
|
},
|
|
{
|
|
command: 'throw new Error(\'Whoops!\')',
|
|
expected: 'Thrown:\nError: Whoops!\n'
|
|
},
|
|
{
|
|
command: 'foo = bar;',
|
|
expected: 'Thrown:\nReferenceError: bar is not defined\n'
|
|
},
|
|
// test anonymous IIFE
|
|
{
|
|
command: '(function() { throw new Error(\'Whoops!\'); })()',
|
|
expected: 'Thrown:\nError: Whoops!--->\nrepl:1:21\n'
|
|
}
|
|
];
|
|
|
|
tests.forEach(run);
|