From 7a034c57878378c76457ae9a0cc199abcf63f0c0 Mon Sep 17 00:00:00 2001 From: James M Snell Date: Sat, 29 Apr 2017 20:42:45 -0700 Subject: [PATCH] test: expand test coverage of readline PR-URL: https://github.com/nodejs/node/pull/12755 Reviewed-By: Anna Henningsen --- test/parallel/test-readline-csi.js | 90 ++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 test/parallel/test-readline-csi.js diff --git a/test/parallel/test-readline-csi.js b/test/parallel/test-readline-csi.js new file mode 100644 index 00000000000000..bde37138e3b3dd --- /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');