From 3cc2379c822f58e9620ad89f55485e37a26ed0ce Mon Sep 17 00:00:00 2001 From: Theodor Steiner Date: Mon, 27 Feb 2023 17:23:13 +0900 Subject: [PATCH] test: add test that fails without the changes of #46742 --- .../test-readline-recursive-writes.js | 31 ++++++++++++ .../test-repl-load-multiline-function.js | 47 ------------------- 2 files changed, 31 insertions(+), 47 deletions(-) create mode 100644 test/parallel/test-readline-recursive-writes.js delete mode 100644 test/parallel/test-repl-load-multiline-function.js diff --git a/test/parallel/test-readline-recursive-writes.js b/test/parallel/test-readline-recursive-writes.js new file mode 100644 index 00000000000000..21813ab4b89520 --- /dev/null +++ b/test/parallel/test-readline-recursive-writes.js @@ -0,0 +1,31 @@ +'use strict'; +const common = require('../common'); +const ArrayStream = require('../common/arraystream'); +const assert = require('assert'); + +common.skipIfDumbTerminal(); + +const readline = require('readline'); +const rli = new readline.Interface({ + terminal: true, + input: new ArrayStream(), +}); + +let recursionDepth = 0; + +rli.on('line', function onLine() { + // Abort in case of infinite loop + if (recursionDepth > 2) { + return + } + recursionDepth++ + // Write something recursively to readline + rli.write('foo'); + return; +}); + +// minimal reproduction for #46731 +const testInput = ' \n}\n'; +rli.write(testInput); + +assert.strictEqual(recursionDepth, testInput.match(/\n/g).length, "infinite loop"); diff --git a/test/parallel/test-repl-load-multiline-function.js b/test/parallel/test-repl-load-multiline-function.js deleted file mode 100644 index 055cd1cf2fd954..00000000000000 --- a/test/parallel/test-repl-load-multiline-function.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; -const common = require('../common'); -const ArrayStream = require('../common/arraystream'); -const assert = require('assert'); -const join = require('path').join; -const fs = require('fs'); - -common.skipIfDumbTerminal(); - -const tmpdir = require('../common/tmpdir'); -tmpdir.refresh(); - -const terminalCode = '(\u001b[1G\u001b[0J \u001b[1G)'; -const terminalCodeRegex = new RegExp(terminalCode.replace(/\[/g, '\\['), 'g'); - -const repl = require('repl'); - -const inputStream = new ArrayStream(); -const outputStream = new ArrayStream(); - -const r = repl.start({ - prompt: '', - input: inputStream, - output: outputStream, - terminal: true, - useColors: false -}); - -const testFile = 'function a(b) {\n return b }\na(1)\n'; -const testFileName = join(tmpdir.path, 'foo.js'); -fs.writeFileSync(testFileName, testFile); - -const command = `.load ${testFileName}\n`; -let accum = ''; -outputStream.write = (data) => accum += data.replace('\r', ''); - - -r.write(command); - -const expected = command + -'function a(b) {\n' + -' return b }\n' + -'a(1)\n' + -'\n' + -'1\n'; -assert.strictEqual(accum.replace(terminalCodeRegex, ''), expected); -r.close();