Welcome to mirror list, hosted at ThFree Co, Russian Federation.

test-repl-mode.js « parallel « test - github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d8131d34f93b44e73f30a32b449c813ebcc67e87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'use strict';
require('../common');
const assert = require('assert');
const Stream = require('stream');
const repl = require('repl');

const tests = [
  testSloppyMode,
  testStrictMode,
  testAutoMode,
  testStrictModeTerminal,
];

tests.forEach(function(test) {
  test();
});

function testSloppyMode() {
  const cli = initRepl(repl.REPL_MODE_SLOPPY);

  cli.input.emit('data', 'x = 3\n');
  assert.strictEqual(cli.output.accumulator.join(''), '> 3\n> ');
  cli.output.accumulator.length = 0;

  cli.input.emit('data', 'let y = 3\n');
  assert.strictEqual(cli.output.accumulator.join(''), 'undefined\n> ');
}

function testStrictMode() {
  const cli = initRepl(repl.REPL_MODE_STRICT);

  cli.input.emit('data', 'x = 3\n');
  assert.ok(/ReferenceError: x is not defined/.test(
    cli.output.accumulator.join('')));
  cli.output.accumulator.length = 0;

  cli.input.emit('data', 'let y = 3\n');
  assert.strictEqual(cli.output.accumulator.join(''), '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 cli = initRepl(repl.REPL_MODE_STRICT, {
    terminal: true
  });

  cli.input.emit('data', 'xyz ');
  assert.ok(
    cli.output.accumulator.includes('\n// ReferenceError: xyz is not defined')
  );
}

function testAutoMode() {
  const cli = initRepl(repl.REPL_MODE_MAGIC);

  cli.input.emit('data', 'x = 3\n');
  assert.strictEqual(cli.output.accumulator.join(''), '> 3\n> ');
  cli.output.accumulator.length = 0;

  cli.input.emit('data', 'let y = 3\n');
  assert.strictEqual(cli.output.accumulator.join(''), 'undefined\n> ');
}

function initRepl(mode, options) {
  const input = new Stream();
  input.write = input.pause = input.resume = () => {};
  input.readable = true;

  const output = new Stream();
  output.write = output.pause = output.resume = function(buf) {
    output.accumulator.push(buf);
  };
  output.accumulator = [];
  output.writable = true;

  return repl.start({
    input: input,
    output: output,
    useColors: false,
    terminal: false,
    replMode: mode,
    ...options
  });
}