1'use strict'; 2require('../common'); 3const assert = require('assert'); 4const Stream = require('stream'); 5const repl = require('repl'); 6 7const tests = [ 8 testSloppyMode, 9 testStrictMode, 10 testAutoMode 11]; 12 13tests.forEach(function(test) { 14 test(); 15}); 16 17function testSloppyMode() { 18 const cli = initRepl(repl.REPL_MODE_SLOPPY); 19 20 cli.input.emit('data', 'x = 3\n'); 21 assert.strictEqual(cli.output.accumulator.join(''), '> 3\n> '); 22 cli.output.accumulator.length = 0; 23 24 cli.input.emit('data', 'let y = 3\n'); 25 assert.strictEqual(cli.output.accumulator.join(''), 'undefined\n> '); 26} 27 28function testStrictMode() { 29 const cli = initRepl(repl.REPL_MODE_STRICT); 30 31 cli.input.emit('data', 'x = 3\n'); 32 assert.ok(/ReferenceError: x is not defined/.test( 33 cli.output.accumulator.join(''))); 34 cli.output.accumulator.length = 0; 35 36 cli.input.emit('data', 'let y = 3\n'); 37 assert.strictEqual(cli.output.accumulator.join(''), 'undefined\n> '); 38} 39 40function testAutoMode() { 41 const cli = initRepl(repl.REPL_MODE_MAGIC); 42 43 cli.input.emit('data', 'x = 3\n'); 44 assert.strictEqual(cli.output.accumulator.join(''), '> 3\n> '); 45 cli.output.accumulator.length = 0; 46 47 cli.input.emit('data', 'let y = 3\n'); 48 assert.strictEqual(cli.output.accumulator.join(''), 'undefined\n> '); 49} 50 51function initRepl(mode) { 52 const input = new Stream(); 53 input.write = input.pause = input.resume = () => {}; 54 input.readable = true; 55 56 const output = new Stream(); 57 output.write = output.pause = output.resume = function(buf) { 58 output.accumulator.push(buf); 59 }; 60 output.accumulator = []; 61 output.writable = true; 62 63 return repl.start({ 64 input: input, 65 output: output, 66 useColors: false, 67 terminal: false, 68 replMode: mode 69 }); 70} 71