| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const repl = require('repl'); |
| const { startNewREPLServer } = require('../common/repl'); |
| |
| if (process.env.TERM === 'dumb') { |
| common.skip('skipping - dumb terminal'); |
| } |
| |
| const tests = [ |
| testSloppyMode, |
| testStrictMode, |
| testAutoMode, |
| testStrictModeTerminal, |
| ]; |
| |
| tests.forEach(function(test) { |
| test(); |
| }); |
| |
| function testSloppyMode() { |
| const { input, output } = startNewREPLServer({ replMode: repl.REPL_MODE_SLOPPY, terminal: false, prompt: '> ' }); |
| |
| input.emit('data', 'x = 3\n'); |
| assert.strictEqual(output.accumulator, '> 3\n> '); |
| output.accumulator = ''; |
| |
| input.emit('data', 'let y = 3\n'); |
| assert.strictEqual(output.accumulator, 'undefined\n> '); |
| } |
| |
| function testStrictMode() { |
| const { input, output } = startNewREPLServer({ replMode: repl.REPL_MODE_STRICT, terminal: false, prompt: '> ' }, { |
| disableDomainErrorAssert: true, |
| }); |
| |
| input.emit('data', 'x = 3\n'); |
| assert.match(output.accumulator, /ReferenceError: x is not defined/); |
| output.accumulator = ''; |
| |
| input.emit('data', 'let y = 3\n'); |
| assert.strictEqual(output.accumulator, 'undefined\n> '); |
| } |
| |
| function testStrictModeTerminal() { |
| if (!process.features.inspector) { |
| console.warn('Test skipped: V8 inspector is disabled'); |
| return; |
| } |
| // Verify that ReferenceErrors are reported in strict mode previews. |
| const { input, output } = startNewREPLServer({ replMode: repl.REPL_MODE_STRICT, prompt: '> ' }); |
| |
| input.emit('data', 'xyz '); |
| assert.ok( |
| output.accumulator.includes('\n// ReferenceError: xyz is not defined') |
| ); |
| } |
| |
| function testAutoMode() { |
| const { input, output } = startNewREPLServer({ replMode: repl.REPL_MODE_MAGIC, terminal: false, prompt: '> ' }); |
| |
| input.emit('data', 'x = 3\n'); |
| assert.strictEqual(output.accumulator, '> 3\n> '); |
| output.accumulator = ''; |
| |
| input.emit('data', 'let y = 3\n'); |
| assert.strictEqual(output.accumulator, 'undefined\n> '); |
| } |