summaryrefslogtreecommitdiff
path: root/test/parallel/test-readline-csi.js
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2017-04-29 20:42:45 -0700
committerAnna Henningsen <anna@addaleax.net>2017-05-07 22:54:31 +0200
commitd37f27a00830f364f3375fed996ecb75e61f7f9b (patch)
tree41d968594fe4c5fa20f28a7650efb700c0b51886 /test/parallel/test-readline-csi.js
parent4c070d489718b196d7950998ccfb54bcc50d9711 (diff)
downloadandroid-node-v8-d37f27a00830f364f3375fed996ecb75e61f7f9b.tar.gz
android-node-v8-d37f27a00830f364f3375fed996ecb75e61f7f9b.tar.bz2
android-node-v8-d37f27a00830f364f3375fed996ecb75e61f7f9b.zip
test: expand test coverage of readline
PR-URL: https://github.com/nodejs/node/pull/12755 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'test/parallel/test-readline-csi.js')
-rw-r--r--test/parallel/test-readline-csi.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/test/parallel/test-readline-csi.js b/test/parallel/test-readline-csi.js
new file mode 100644
index 0000000000..bde37138e3
--- /dev/null
+++ b/test/parallel/test-readline-csi.js
@@ -0,0 +1,90 @@
+// Flags: --expose-internals
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const readline = require('readline');
+const { Writable } = require('stream');
+const { CSI } = require('internal/readline');
+
+{
+ assert(CSI);
+ assert.strictEqual(CSI.kClearToBeginning, '\x1b[1K');
+ assert.strictEqual(CSI.kClearToEnd, '\x1b[0K');
+ assert.strictEqual(CSI.kClearLine, '\x1b[2K');
+ assert.strictEqual(CSI.kClearScreenDown, '\x1b[0J');
+ assert.strictEqual(CSI`1${2}3`, '\x1b[123');
+}
+
+class TestWritable extends Writable {
+ constructor() {
+ super();
+ this.data = '';
+ }
+ _write(chunk, encoding, callback) {
+ this.data += chunk.toString();
+ callback();
+ }
+}
+
+const writable = new TestWritable();
+
+readline.clearScreenDown(writable);
+assert.deepStrictEqual(writable.data, CSI.kClearScreenDown);
+
+writable.data = '';
+readline.clearLine(writable, -1);
+assert.deepStrictEqual(writable.data, CSI.kClearToBeginning);
+
+writable.data = '';
+readline.clearLine(writable, 1);
+assert.deepStrictEqual(writable.data, CSI.kClearToEnd);
+
+writable.data = '';
+readline.clearLine(writable, 0);
+assert.deepStrictEqual(writable.data, CSI.kClearLine);
+
+// Nothing is written when moveCursor 0, 0
+[
+ [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'],
+].forEach((set) => {
+ writable.data = '';
+ readline.moveCursor(writable, set[0], set[1]);
+ assert.deepStrictEqual(writable.data, set[2]);
+});
+
+assert.doesNotThrow(() => readline.cursorTo(null));
+assert.doesNotThrow(() => readline.cursorTo());
+
+writable.data = '';
+assert.doesNotThrow(() => readline.cursorTo(writable, 'a'));
+assert.strictEqual(writable.data, '');
+
+writable.data = '';
+assert.doesNotThrow(() => readline.cursorTo(writable, 'a', 'b'));
+assert.strictEqual(writable.data, '');
+
+writable.data = '';
+assert.throws(
+ () => readline.cursorTo(writable, 'a', 1),
+ common.expectsError({
+ type: Error,
+ message: /^Can't set cursor row without also setting it's column$/
+ }));
+assert.strictEqual(writable.data, '');
+
+writable.data = '';
+assert.doesNotThrow(() => readline.cursorTo(writable, 1, 'a'));
+assert.strictEqual(writable.data, '\x1b[2G');
+
+writable.data = '';
+assert.doesNotThrow(() => readline.cursorTo(writable, 1, 2));
+assert.strictEqual(writable.data, '\x1b[3;2H');