From ee4cd15b65e4ae2e56e718c579735fe5f923f945 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Mon, 21 Mar 2022 21:53:07 +0900 Subject: [PATCH 1/6] test: improve lib/internal/readline/promises.js coverage --- test/parallel/test-readline-promises-csi.mjs | 82 ++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index 71a3ad7a816bda..33ed47aba17562 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -161,3 +161,85 @@ class TestWritable extends Writable { await assert.rejects(readline.cursorTo(1).commit(), error); } + +{ + const writable = new TestWritable(); + const readline = new Readline(writable, { autoCommit: true }); + + await readline.clearScreenDown(); + process.nextTick(() => assert.deepStrictEqual(writable.data, CSI.kClearScreenDown)); +} + +{ + const writable = new TestWritable(); + const readline = new Readline(writable, { autoCommit: true }); + for (const set of + [ + [-1, CSI.kClearToLineBeginning], + [1, CSI.kClearToLineEnd], + [0, CSI.kClearLine], + ]) { + const test = async (dir, data) => { + writable.data = ''; + await readline.clearLine(dir); + return new Promise((resolve) => { + process.nextTick(() => { + assert.deepStrictEqual(writable.data, data); + resolve(); + }); + }); + }; + await test(set[0], set[1]); + } +} + +{ + const writable = new TestWritable(); + const readline = new Readline(writable, { autoCommit: true }); + for (const set of + [ + [0, 0, ''], + [1, 0, '\x1b[1C'], + [-1, 0, '\x1b[1D'], + [0, 1, '\x1b[1B'], + [0, -1, '\x1b[1A'], + [1, 1, '\x1b[1C\x1b[1B'], + [-1, 1, '\x1b[1D\x1b[1B'], + [-1, -1, '\x1b[1D\x1b[1A'], + [1, -1, '\x1b[1C\x1b[1A'], + ]) { + const test = async (x, y, data) => { + writable.data = ''; + await readline.moveCursor(x, y); + return new Promise((resolve) => { + process.nextTick(() => { + assert.strictEqual(writable.data, data); + resolve(); + }); + }); + }; + await test(set[0], set[1], set[2]); + } +} + +{ + const writable = new TestWritable(); + const readline = new Readline(writable, { autoCommit: true }); + for (const set of + [ + [1, undefined, '\x1b[2G'], + [1, 2, '\x1b[3;2H'], + ]) { + const test = async (x, y, data) => { + writable.data = ''; + await readline.cursorTo(x, y); + return new Promise((resolve) => { + process.nextTick(() => { + assert.strictEqual(writable.data, data); + resolve(); + }); + }); + }; + await test(set[0], set[1], set[2]); + } +} From 2c52120d4770ffb88e113f513051e07ec0a6d1b3 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Tue, 22 Mar 2022 09:08:11 +0900 Subject: [PATCH 2/6] test: remove unnecessary await keyword --- test/parallel/test-readline-promises-csi.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index 33ed47aba17562..506c0205099a9e 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -181,7 +181,7 @@ class TestWritable extends Writable { ]) { const test = async (dir, data) => { writable.data = ''; - await readline.clearLine(dir); + readline.clearLine(dir); return new Promise((resolve) => { process.nextTick(() => { assert.deepStrictEqual(writable.data, data); @@ -210,7 +210,7 @@ class TestWritable extends Writable { ]) { const test = async (x, y, data) => { writable.data = ''; - await readline.moveCursor(x, y); + readline.moveCursor(x, y); return new Promise((resolve) => { process.nextTick(() => { assert.strictEqual(writable.data, data); @@ -232,7 +232,7 @@ class TestWritable extends Writable { ]) { const test = async (x, y, data) => { writable.data = ''; - await readline.cursorTo(x, y); + readline.cursorTo(x, y); return new Promise((resolve) => { process.nextTick(() => { assert.strictEqual(writable.data, data); From 19a968bd2bc7ed2d3c234bbdd15b2aa6d2dfd795 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Tue, 22 Mar 2022 09:10:14 +0900 Subject: [PATCH 3/6] test: use destructuring assignment --- test/parallel/test-readline-promises-csi.mjs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index 506c0205099a9e..d567626945ce2c 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -173,7 +173,7 @@ class TestWritable extends Writable { { const writable = new TestWritable(); const readline = new Readline(writable, { autoCommit: true }); - for (const set of + for (const [dir, data] of [ [-1, CSI.kClearToLineBeginning], [1, CSI.kClearToLineEnd], @@ -189,14 +189,14 @@ class TestWritable extends Writable { }); }); }; - await test(set[0], set[1]); + await test(dir, data); } } { const writable = new TestWritable(); const readline = new Readline(writable, { autoCommit: true }); - for (const set of + for (const [x, y, data] of [ [0, 0, ''], [1, 0, '\x1b[1C'], @@ -218,14 +218,14 @@ class TestWritable extends Writable { }); }); }; - await test(set[0], set[1], set[2]); + await test(x, y, data); } } { const writable = new TestWritable(); const readline = new Readline(writable, { autoCommit: true }); - for (const set of + for (const [x, y, data] of [ [1, undefined, '\x1b[2G'], [1, 2, '\x1b[3;2H'], @@ -240,6 +240,6 @@ class TestWritable extends Writable { }); }); }; - await test(set[0], set[1], set[2]); + await test(x, y, data); } } From b215d31968ba1ea8f25e2e2f3d9494559405e0d6 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Thu, 24 Mar 2022 09:38:54 +0900 Subject: [PATCH 4/6] test: make test more readable using `await setImmediate` instead of `test` function + process.nextTick. --- test/parallel/test-readline-promises-csi.mjs | 43 +++++--------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index d567626945ce2c..efddf58fb51957 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -4,6 +4,7 @@ import '../common/index.mjs'; import assert from 'assert'; import { Readline } from 'readline/promises'; +import { setImmediate } from 'timers/promises'; import { Writable } from 'stream'; import utils from 'internal/readline/utils'; @@ -179,17 +180,9 @@ class TestWritable extends Writable { [1, CSI.kClearToLineEnd], [0, CSI.kClearLine], ]) { - const test = async (dir, data) => { - writable.data = ''; - readline.clearLine(dir); - return new Promise((resolve) => { - process.nextTick(() => { - assert.deepStrictEqual(writable.data, data); - resolve(); - }); - }); - }; - await test(dir, data); + writable.data = ''; + readline.clearLine(dir); + assert.deepStrictEqual((await setImmediate(writable)).data, data); } } @@ -208,17 +201,9 @@ class TestWritable extends Writable { [-1, -1, '\x1b[1D\x1b[1A'], [1, -1, '\x1b[1C\x1b[1A'], ]) { - const test = async (x, y, data) => { - writable.data = ''; - readline.moveCursor(x, y); - return new Promise((resolve) => { - process.nextTick(() => { - assert.strictEqual(writable.data, data); - resolve(); - }); - }); - }; - await test(x, y, data); + writable.data = ''; + readline.moveCursor(x, y); + assert.deepStrictEqual((await setImmediate(writable)).data, data); } } @@ -230,16 +215,8 @@ class TestWritable extends Writable { [1, undefined, '\x1b[2G'], [1, 2, '\x1b[3;2H'], ]) { - const test = async (x, y, data) => { - writable.data = ''; - readline.cursorTo(x, y); - return new Promise((resolve) => { - process.nextTick(() => { - assert.strictEqual(writable.data, data); - resolve(); - }); - }); - }; - await test(x, y, data); + writable.data = ''; + readline.cursorTo(x, y); + assert.deepStrictEqual((await setImmediate(writable)).data, data); } } From 5c980e5607639ac8acad60d417dbc27ff547f6e7 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Thu, 24 Mar 2022 18:41:07 +0900 Subject: [PATCH 5/6] Apply suggestions from code review Co-authored-by: Antoine du Hamel --- test/parallel/test-readline-promises-csi.mjs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index efddf58fb51957..5cbaf4b988c6b5 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -168,7 +168,8 @@ class TestWritable extends Writable { const readline = new Readline(writable, { autoCommit: true }); await readline.clearScreenDown(); - process.nextTick(() => assert.deepStrictEqual(writable.data, CSI.kClearScreenDown)); + await setImmediate(); // wait for next tick as auto commit is asynchronous. + assert.deepStrictEqual(writable.data, CSI.kClearScreenDown); } { @@ -182,7 +183,8 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.clearLine(dir); - assert.deepStrictEqual((await setImmediate(writable)).data, data); + await setImmediate(); // wait for next tick as auto commit is asynchronous. + assert.deepStrictEqual(writable.data, data); } } @@ -203,7 +205,8 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.moveCursor(x, y); - assert.deepStrictEqual((await setImmediate(writable)).data, data); + await setImmediate(); // wait for next tick as auto commit is asynchronous. + assert.deepStrictEqual(writable.data, data); } } @@ -217,6 +220,7 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.cursorTo(x, y); - assert.deepStrictEqual((await setImmediate(writable)).data, data); + await setImmediate(); // wait for next tick as auto commit is asynchronous. + assert.deepStrictEqual(writable.data, data); } } From 9630466dd844559f7e86d6b284114031549343b5 Mon Sep 17 00:00:00 2001 From: MURAKAMI Masahiko Date: Thu, 24 Mar 2022 21:43:27 +0900 Subject: [PATCH 6/6] test: fix lint error --- test/parallel/test-readline-promises-csi.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-readline-promises-csi.mjs b/test/parallel/test-readline-promises-csi.mjs index 5cbaf4b988c6b5..9b0d0bb2b84008 100644 --- a/test/parallel/test-readline-promises-csi.mjs +++ b/test/parallel/test-readline-promises-csi.mjs @@ -168,7 +168,7 @@ class TestWritable extends Writable { const readline = new Readline(writable, { autoCommit: true }); await readline.clearScreenDown(); - await setImmediate(); // wait for next tick as auto commit is asynchronous. + await setImmediate(); // Wait for next tick as auto commit is asynchronous. assert.deepStrictEqual(writable.data, CSI.kClearScreenDown); } @@ -183,7 +183,7 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.clearLine(dir); - await setImmediate(); // wait for next tick as auto commit is asynchronous. + await setImmediate(); // Wait for next tick as auto commit is asynchronous. assert.deepStrictEqual(writable.data, data); } } @@ -205,7 +205,7 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.moveCursor(x, y); - await setImmediate(); // wait for next tick as auto commit is asynchronous. + await setImmediate(); // Wait for next tick as auto commit is asynchronous. assert.deepStrictEqual(writable.data, data); } } @@ -220,7 +220,7 @@ class TestWritable extends Writable { ]) { writable.data = ''; readline.cursorTo(x, y); - await setImmediate(); // wait for next tick as auto commit is asynchronous. + await setImmediate(); // Wait for next tick as auto commit is asynchronous. assert.deepStrictEqual(writable.data, data); } }