From 2ea529b7971f6a72efc40b2289ccde5a9dfa0783 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 8 Jun 2017 23:12:54 +0200 Subject: [PATCH] test: add regression test for 13557 Fixes: https://github.com/nodejs/node/issues/13557 PR-URL: https://github.com/nodejs/node/pull/13560 Reviewed-By: James M Snell Reviewed-By: Refael Ackermann Reviewed-By: Gibson Fahnestock Reviewed-By: Colin Ihrig --- test/parallel/test-readline-reopen.js | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/parallel/test-readline-reopen.js diff --git a/test/parallel/test-readline-reopen.js b/test/parallel/test-readline-reopen.js new file mode 100644 index 00000000000000..dead22d81ac961 --- /dev/null +++ b/test/parallel/test-readline-reopen.js @@ -0,0 +1,44 @@ +'use strict'; + +// Regression test for https://github.com/nodejs/node/issues/13557 +// Tests that multiple subsequent readline instances can re-use an input stream. + +const common = require('../common'); +const assert = require('assert'); +const readline = require('readline'); +const { PassThrough } = require('stream'); + +const input = new PassThrough(); +const output = new PassThrough(); + +const rl1 = readline.createInterface({ + input, + output, + terminal: true +}); + +rl1.on('line', common.mustCall(rl1OnLine)); + +// Write a line plus the first byte of a UTF-8 multibyte character to make sure +// that it doesn’t get lost when closing the readline instance. +input.write(Buffer.concat([ + Buffer.from('foo\n'), + Buffer.from([ 0xe2 ]) // Exactly one third of a ☃ snowman. +])); + +function rl1OnLine(line) { + assert.strictEqual(line, 'foo'); + rl1.close(); + const rl2 = readline.createInterface({ + input, + output, + terminal: true + }); + + rl2.on('line', common.mustCall((line) => { + assert.strictEqual(line, '☃bar'); + rl2.close(); + })); + input.write(Buffer.from([0x98, 0x83])); // The rest of the ☃ snowman. + input.write('bar\n'); +}