diff options
author | Daniel Kostro <kostro.d@gmail.com> | 2017-10-07 00:21:42 +0200 |
---|---|---|
committer | Lance Ball <lball@redhat.com> | 2017-10-09 18:11:04 -0400 |
commit | f2b9d5e41e8868365753ba4a8aad959dcab0efd1 (patch) | |
tree | b9379f2b5f16ddbb2fce9f203925981b293b99e3 /test/parallel/test-readline-interface.js | |
parent | 5f15fde4b23ece493c930d95623c06714721f388 (diff) | |
download | android-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.js | 83 |
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 |