summaryrefslogtreecommitdiff
path: root/test/parallel/test-readline-interface.js
diff options
context:
space:
mode:
authorDaniel Kostro <kostro.d@gmail.com>2017-10-07 00:21:42 +0200
committerLance Ball <lball@redhat.com>2017-10-09 18:11:04 -0400
commitf2b9d5e41e8868365753ba4a8aad959dcab0efd1 (patch)
treeb9379f2b5f16ddbb2fce9f203925981b293b99e3 /test/parallel/test-readline-interface.js
parent5f15fde4b23ece493c930d95623c06714721f388 (diff)
downloadandroid-node-v8-f2b9d5e41e8868365753ba4a8aad959dcab0efd1.tar.gz
android-node-v8-f2b9d5e41e8868365753ba4a8aad959dcab0efd1.tar.bz2
android-node-v8-f2b9d5e41e8868365753ba4a8aad959dcab0efd1.zip
test: increase test coverage of readline-interface
Adds coverage for: - question callback - history navigation - bad historySize option - multi-line output - history is bound and most recent elements are preserved PR-URL: https://github.com/nodejs/node/pull/16062 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'test/parallel/test-readline-interface.js')
-rw-r--r--test/parallel/test-readline-interface.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js
index a7c33ba842..c494bb95e8 100644
--- a/test/parallel/test-readline-interface.js
+++ b/test/parallel/test-readline-interface.js
@@ -371,6 +371,37 @@ function isWarned(emitter) {
}));
}
+ // constructor throws if historySize is not a positive number
+ {
+ const fi = new FakeInput();
+ assert.throws(function() {
+ readline.createInterface({
+ input: fi, historySize: 'not a number'
+ });
+ }, common.expectsError({
+ type: RangeError,
+ code: 'ERR_INVALID_OPT_VALUE'
+ }));
+
+ assert.throws(function() {
+ readline.createInterface({
+ input: fi, historySize: -1
+ });
+ }, common.expectsError({
+ type: RangeError,
+ code: 'ERR_INVALID_OPT_VALUE'
+ }));
+
+ assert.throws(function() {
+ readline.createInterface({
+ input: fi, historySize: NaN
+ });
+ }, common.expectsError({
+ type: RangeError,
+ code: 'ERR_INVALID_OPT_VALUE'
+ }));
+ }
+
// duplicate lines are removed from history when
// `options.removeHistoryDuplicates` is `true`
{
@@ -400,6 +431,14 @@ function isWarned(emitter) {
assert.notStrictEqual(rli.line, expectedLines[--callCount]);
assert.strictEqual(rli.line, expectedLines[--callCount]);
assert.strictEqual(callCount, 0);
+ fi.emit('keypress', '.', { name: 'down' }); // 'baz'
+ assert.strictEqual(rli.line, 'baz');
+ fi.emit('keypress', '.', { name: 'n', ctrl: true }); // 'bar'
+ assert.strictEqual(rli.line, 'bar');
+ fi.emit('keypress', '.', { name: 'down' }); // 'bat'
+ assert.strictEqual(rli.line, 'bat');
+ fi.emit('keypress', '.', { name: 'down' }); // ''
+ assert.strictEqual(rli.line, '');
rli.close();
}
@@ -495,7 +534,35 @@ function isWarned(emitter) {
rli.close();
}
+ // calling the question callback
+ {
+ let called = false;
+ const fi = new FakeInput();
+ const rli = new readline.Interface(
+ { input: fi, output: fi, terminal: terminal }
+ );
+ rli.question('foo?', function(answer) {
+ called = true;
+ assert.strictEqual(answer, 'bar');
+ });
+ rli.write('bar\n');
+ assert.ok(called);
+ rli.close();
+ }
+
if (terminal) {
+ // history is bound
+ {
+ const fi = new FakeInput();
+ const rli = new readline.Interface(
+ { input: fi, output: fi, terminal, historySize: 2 }
+ );
+ const lines = ['line 1', 'line 2', 'line 3'];
+ fi.emit('data', lines.join('\n') + '\n');
+ assert.strictEqual(rli.history.length, 2);
+ assert.strictEqual(rli.history[0], 'line 3');
+ assert.strictEqual(rli.history[1], 'line 2');
+ }
// question
{
const fi = new FakeInput();
@@ -663,6 +730,22 @@ function isWarned(emitter) {
rli.close();
});
}
+
+ // multi-line cursor position
+ {
+ const fi = new FakeInput();
+ const rli = new readline.Interface({
+ input: fi,
+ output: fi,
+ prompt: '',
+ terminal: terminal
+ });
+ fi.columns = 10;
+ fi.emit('data', 'multi-line text');
+ const cursorPos = rli._getCursorPos();
+ assert.strictEqual(cursorPos.rows, 1);
+ assert.strictEqual(cursorPos.cols, 5);
+ }
}
// isFullWidthCodePoint() should return false for non-numeric values