Skip to content

Commit 9d5ffa6

Browse files
hiroppyitaloacasas
authored andcommitted
test: add test cases to test-readline-keys.js
PR-URL: #10772 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent 7ec6a69 commit 9d5ffa6

File tree

1 file changed

+99
-8
lines changed

1 file changed

+99
-8
lines changed

test/parallel/test-readline-keys.js

+99-8
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const fo = new FakeInput();
1818
new Interface({ input: fi, output: fo, terminal: true });
1919

2020
let keys = [];
21-
fi.on('keypress', function(s, k) {
21+
fi.on('keypress', (s, k) => {
2222
keys.push(k);
2323
});
2424

@@ -32,13 +32,13 @@ function addTest(sequences, expectedKeys) {
3232
expectedKeys = [ expectedKeys ];
3333
}
3434

35-
expectedKeys = expectedKeys.map(function(k) {
35+
expectedKeys = expectedKeys.map((k) => {
3636
return k ? extend({ ctrl: false, meta: false, shift: false }, k) : k;
3737
});
3838

3939
keys = [];
4040

41-
sequences.forEach(function(sequence) {
41+
sequences.forEach((sequence) => {
4242
fi.write(sequence);
4343
});
4444
assert.deepStrictEqual(keys, expectedKeys);
@@ -65,7 +65,7 @@ const addKeyIntervalTest = (sequences, expectedKeys, interval = 550,
6565
expectedKeys = [ expectedKeys ];
6666
}
6767

68-
expectedKeys = expectedKeys.map(function(k) {
68+
expectedKeys = expectedKeys.map((k) => {
6969
return k ? extend({ ctrl: false, meta: false, shift: false }, k) : k;
7070
});
7171

@@ -129,10 +129,63 @@ addTest('a\x1baA\x1bA', [
129129
{ name: 'a', sequence: '\x1bA', meta: true, shift: true },
130130
]);
131131

132-
// xterm/gnome
133-
addTest('\x1bOA\x1bOB', [
132+
// xterm/gnome ESC O letter
133+
addTest('\x1bOP\x1bOQ\x1bOR\x1bOS', [
134+
{ name: 'f1', sequence: '\x1bOP', code: 'OP' },
135+
{ name: 'f2', sequence: '\x1bOQ', code: 'OQ' },
136+
{ name: 'f3', sequence: '\x1bOR', code: 'OR' },
137+
{ name: 'f4', sequence: '\x1bOS', code: 'OS' },
138+
]);
139+
140+
// xterm/rxvt ESC [ number ~ */
141+
addTest('\x1b[11~\x1b[12~\x1b[13~\x1b[14~', [
142+
{ name: 'f1', sequence: '\x1b[11~', code: '[11~' },
143+
{ name: 'f2', sequence: '\x1b[12~', code: '[12~' },
144+
{ name: 'f3', sequence: '\x1b[13~', code: '[13~' },
145+
{ name: 'f4', sequence: '\x1b[14~', code: '[14~' },
146+
]);
147+
148+
// from Cygwin and used in libuv
149+
addTest('\x1b[[A\x1b[[B\x1b[[C\x1b[[D\x1b[[E', [
150+
{ name: 'f1', sequence: '\x1b[[A', code: '[[A' },
151+
{ name: 'f2', sequence: '\x1b[[B', code: '[[B' },
152+
{ name: 'f3', sequence: '\x1b[[C', code: '[[C' },
153+
{ name: 'f4', sequence: '\x1b[[D', code: '[[D' },
154+
{ name: 'f5', sequence: '\x1b[[E', code: '[[E' },
155+
]);
156+
157+
// common
158+
addTest('\x1b[15~\x1b[17~\x1b[18~\x1b[19~\x1b[20~\x1b[21~\x1b[23~\x1b[24~', [
159+
{ name: 'f5', sequence: '\x1b[15~', code: '[15~' },
160+
{ name: 'f6', sequence: '\x1b[17~', code: '[17~' },
161+
{ name: 'f7', sequence: '\x1b[18~', code: '[18~' },
162+
{ name: 'f8', sequence: '\x1b[19~', code: '[19~' },
163+
{ name: 'f9', sequence: '\x1b[20~', code: '[20~' },
164+
{ name: 'f10', sequence: '\x1b[21~', code: '[21~' },
165+
{ name: 'f11', sequence: '\x1b[23~', code: '[23~' },
166+
{ name: 'f12', sequence: '\x1b[24~', code: '[24~' },
167+
]);
168+
169+
// xterm ESC [ letter
170+
addTest('\x1b[A\x1b[B\x1b[C\x1b[D\x1b[E\x1b[F\x1b[H', [
171+
{ name: 'up', sequence: '\x1b[A', code: '[A' },
172+
{ name: 'down', sequence: '\x1b[B', code: '[B' },
173+
{ name: 'right', sequence: '\x1b[C', code: '[C' },
174+
{ name: 'left', sequence: '\x1b[D', code: '[D' },
175+
{ name: 'clear', sequence: '\x1b[E', code: '[E' },
176+
{ name: 'end', sequence: '\x1b[F', code: '[F' },
177+
{ name: 'home', sequence: '\x1b[H', code: '[H' },
178+
]);
179+
180+
// xterm/gnome ESC O letter
181+
addTest('\x1bOA\x1bOB\x1bOC\x1bOD\x1bOE\x1bOF\x1bOH', [
134182
{ name: 'up', sequence: '\x1bOA', code: 'OA' },
135183
{ name: 'down', sequence: '\x1bOB', code: 'OB' },
184+
{ name: 'right', sequence: '\x1bOC', code: 'OC' },
185+
{ name: 'left', sequence: '\x1bOD', code: 'OD' },
186+
{ name: 'clear', sequence: '\x1bOE', code: 'OE' },
187+
{ name: 'end', sequence: '\x1bOF', code: 'OF' },
188+
{ name: 'home', sequence: '\x1bOH', code: 'OH' },
136189
]);
137190

138191
// old xterm shift-arrows
@@ -141,6 +194,28 @@ addTest('\x1bO2A\x1bO2B', [
141194
{ name: 'down', sequence: '\x1bO2B', code: 'OB', shift: true },
142195
]);
143196

197+
// xterm/rxvt ESC [ number ~
198+
addTest('\x1b[1~\x1b[2~\x1b[3~\x1b[4~\x1b[5~\x1b[6~', [
199+
{ name: 'home', sequence: '\x1b[1~', code: '[1~' },
200+
{ name: 'insert', sequence: '\x1b[2~', code: '[2~' },
201+
{ name: 'delete', sequence: '\x1b[3~', code: '[3~' },
202+
{ name: 'end', sequence: '\x1b[4~', code: '[4~' },
203+
{ name: 'pageup', sequence: '\x1b[5~', code: '[5~' },
204+
{ name: 'pagedown', sequence: '\x1b[6~', code: '[6~' },
205+
]);
206+
207+
// putty
208+
addTest('\x1b[[5~\x1b[[6~', [
209+
{ name: 'pageup', sequence: '\x1b[[5~', code: '[[5~' },
210+
{ name: 'pagedown', sequence: '\x1b[[6~', code: '[[6~' },
211+
]);
212+
213+
// rxvt
214+
addTest('\x1b[7~\x1b[8~', [
215+
{ name: 'home', sequence: '\x1b[7~', code: '[7~' },
216+
{ name: 'end', sequence: '\x1b[8~', code: '[8~' },
217+
]);
218+
144219
// gnome terminal
145220
addTest('\x1b[A\x1b[B\x1b[2A\x1b[2B', [
146221
{ name: 'up', sequence: '\x1b[A', code: '[A' },
@@ -149,11 +224,27 @@ addTest('\x1b[A\x1b[B\x1b[2A\x1b[2B', [
149224
{ name: 'down', sequence: '\x1b[2B', code: '[B', shift: true },
150225
]);
151226

152-
// rxvt
153-
addTest('\x1b[20~\x1b[2$\x1b[2^', [
227+
// rxvt keys with modifiers
228+
// eslint-disable-next-line max-len
229+
addTest('\x1b[20~\x1b[2$\x1b[2^\x1b[3$\x1b[3^\x1b[5$\x1b[5^\x1b[6$\x1b[6^\x1b[7$\x1b[7^\x1b[8$\x1b[8^', [
154230
{ name: 'f9', sequence: '\x1b[20~', code: '[20~' },
155231
{ name: 'insert', sequence: '\x1b[2$', code: '[2$', shift: true },
156232
{ name: 'insert', sequence: '\x1b[2^', code: '[2^', ctrl: true },
233+
{ name: 'delete', sequence: '\x1b[3$', code: '[3$', shift: true },
234+
{ name: 'delete', sequence: '\x1b[3^', code: '[3^', ctrl: true },
235+
{ name: 'pageup', sequence: '\x1b[5$', code: '[5$', shift: true },
236+
{ name: 'pageup', sequence: '\x1b[5^', code: '[5^', ctrl: true },
237+
{ name: 'pagedown', sequence: '\x1b[6$', code: '[6$', shift: true },
238+
{ name: 'pagedown', sequence: '\x1b[6^', code: '[6^', ctrl: true },
239+
{ name: 'home', sequence: '\x1b[7$', code: '[7$', shift: true },
240+
{ name: 'home', sequence: '\x1b[7^', code: '[7^', ctrl: true },
241+
{ name: 'end', sequence: '\x1b[8$', code: '[8$', shift: true },
242+
{ name: 'end', sequence: '\x1b[8^', code: '[8^', ctrl: true },
243+
]);
244+
245+
// misc
246+
addTest('\x1b[Z', [
247+
{ name: 'tab', sequence: '\x1b[Z', code: '[Z', shift: true },
157248
]);
158249

159250
// xterm + modifiers

0 commit comments

Comments
 (0)