Skip to content

Commit d37f27a

Browse files
jasnelladdaleax
authored andcommitted
test: expand test coverage of readline
PR-URL: #12755 Reviewed-By: Anna Henningsen <[email protected]>
1 parent 4c070d4 commit d37f27a

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

test/parallel/test-readline-csi.js

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// Flags: --expose-internals
2+
'use strict';
3+
4+
const common = require('../common');
5+
const assert = require('assert');
6+
const readline = require('readline');
7+
const { Writable } = require('stream');
8+
const { CSI } = require('internal/readline');
9+
10+
{
11+
assert(CSI);
12+
assert.strictEqual(CSI.kClearToBeginning, '\x1b[1K');
13+
assert.strictEqual(CSI.kClearToEnd, '\x1b[0K');
14+
assert.strictEqual(CSI.kClearLine, '\x1b[2K');
15+
assert.strictEqual(CSI.kClearScreenDown, '\x1b[0J');
16+
assert.strictEqual(CSI`1${2}3`, '\x1b[123');
17+
}
18+
19+
class TestWritable extends Writable {
20+
constructor() {
21+
super();
22+
this.data = '';
23+
}
24+
_write(chunk, encoding, callback) {
25+
this.data += chunk.toString();
26+
callback();
27+
}
28+
}
29+
30+
const writable = new TestWritable();
31+
32+
readline.clearScreenDown(writable);
33+
assert.deepStrictEqual(writable.data, CSI.kClearScreenDown);
34+
35+
writable.data = '';
36+
readline.clearLine(writable, -1);
37+
assert.deepStrictEqual(writable.data, CSI.kClearToBeginning);
38+
39+
writable.data = '';
40+
readline.clearLine(writable, 1);
41+
assert.deepStrictEqual(writable.data, CSI.kClearToEnd);
42+
43+
writable.data = '';
44+
readline.clearLine(writable, 0);
45+
assert.deepStrictEqual(writable.data, CSI.kClearLine);
46+
47+
// Nothing is written when moveCursor 0, 0
48+
[
49+
[0, 0, ''],
50+
[1, 0, '\x1b[1C'],
51+
[-1, 0, '\x1b[1D'],
52+
[0, 1, '\x1b[1B'],
53+
[0, -1, '\x1b[1A'],
54+
[1, 1, '\x1b[1C\x1b[1B'],
55+
[-1, 1, '\x1b[1D\x1b[1B'],
56+
[-1, -1, '\x1b[1D\x1b[1A'],
57+
[1, -1, '\x1b[1C\x1b[1A'],
58+
].forEach((set) => {
59+
writable.data = '';
60+
readline.moveCursor(writable, set[0], set[1]);
61+
assert.deepStrictEqual(writable.data, set[2]);
62+
});
63+
64+
assert.doesNotThrow(() => readline.cursorTo(null));
65+
assert.doesNotThrow(() => readline.cursorTo());
66+
67+
writable.data = '';
68+
assert.doesNotThrow(() => readline.cursorTo(writable, 'a'));
69+
assert.strictEqual(writable.data, '');
70+
71+
writable.data = '';
72+
assert.doesNotThrow(() => readline.cursorTo(writable, 'a', 'b'));
73+
assert.strictEqual(writable.data, '');
74+
75+
writable.data = '';
76+
assert.throws(
77+
() => readline.cursorTo(writable, 'a', 1),
78+
common.expectsError({
79+
type: Error,
80+
message: /^Can't set cursor row without also setting it's column$/
81+
}));
82+
assert.strictEqual(writable.data, '');
83+
84+
writable.data = '';
85+
assert.doesNotThrow(() => readline.cursorTo(writable, 1, 'a'));
86+
assert.strictEqual(writable.data, '\x1b[2G');
87+
88+
writable.data = '';
89+
assert.doesNotThrow(() => readline.cursorTo(writable, 1, 2));
90+
assert.strictEqual(writable.data, '\x1b[3;2H');

0 commit comments

Comments
 (0)