1'use strict';
2const common = require('../common');
3const ArrayStream = require('../common/arraystream');
4const assert = require('assert');
5
6common.skipIfDumbTerminal();
7
8const readline = require('readline');
9const rli = new readline.Interface({
10  terminal: true,
11  input: new ArrayStream(),
12});
13
14let recursionDepth = 0;
15
16// Minimal reproduction for #46731
17const testInput = ' \n}\n';
18const numberOfExpectedLines = testInput.match(/\n/g).length;
19
20rli.on('line', () => {
21  // Abort in case of infinite loop
22  if (recursionDepth > numberOfExpectedLines) {
23    return;
24  }
25  recursionDepth++;
26  // Write something recursively to readline
27  rli.write('foo');
28});
29
30
31rli.write(testInput);
32
33assert.strictEqual(recursionDepth, numberOfExpectedLines);
34