| 'use strict'; |
| require('../common'); |
| const fixtures = require('../common/fixtures'); |
| const assert = require('assert'); |
| const { startNewREPLServer } = require('../common/repl'); |
| |
| const stackRegExp = /(at .*REPL\d+:)[0-9]+:[0-9]+/g; |
| |
| function run({ command, expected, ...extraREPLOptions }, i) { |
| const { replServer, output } = startNewREPLServer( |
| { |
| terminal: false, |
| useColors: false, |
| ...extraREPLOptions |
| }, |
| { disableDomainErrorAssert: true } |
| ); |
| |
| replServer.write(`${command}\n`); |
| if (typeof expected === 'string') { |
| assert.strictEqual( |
| output.accumulator.replace(stackRegExp, '$1*:*'), |
| expected.replace(stackRegExp, '$1*:*') |
| ); |
| } else { |
| assert.match( |
| output.accumulator.replace(stackRegExp, '$1*:*'), |
| expected |
| ); |
| } |
| replServer.close(); |
| } |
| |
| const tests = [ |
| { |
| // Test .load for a file that throws. |
| command: `.load ${fixtures.path('repl-pretty-stack.js')}`, |
| expected: 'Uncaught Error: Whoops!\n at REPL1:*:*\n' + |
| ' at d (REPL1:*:*)\n at c (REPL1:*:*)\n' + |
| ' at b (REPL1:*:*)\n at a (REPL1:*:*)\n' |
| }, |
| { |
| command: 'let x y;', |
| expected: /^let x y;\n {6}\^\n\nUncaught SyntaxError: Unexpected identifier.*\n/ |
| }, |
| { |
| command: 'throw new Error(\'Whoops!\')', |
| expected: 'Uncaught Error: Whoops!\n' |
| }, |
| { |
| command: '(() => { const err = Error(\'Whoops!\'); ' + |
| 'err.foo = \'bar\'; throw err; })()', |
| expected: "Uncaught Error: Whoops!\n at REPL4:*:* {\n foo: 'bar'\n}\n", |
| }, |
| { |
| command: '(() => { const err = Error(\'Whoops!\'); ' + |
| 'err.foo = \'bar\'; throw err; })()', |
| expected: 'Uncaught Error: Whoops!\n at REPL5:*:* {\n foo: ' + |
| "\u001b[32m'bar'\u001b[39m\n}\n", |
| useColors: true |
| }, |
| { |
| command: 'foo = bar;', |
| expected: 'Uncaught ReferenceError: bar is not defined\n' |
| }, |
| // Test anonymous IIFE. |
| { |
| command: '(function() { throw new Error(\'Whoops!\'); })()', |
| expected: 'Uncaught Error: Whoops!\n at REPL7:*:*\n' |
| }, |
| ]; |
| |
| tests.forEach(run); |