• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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