test: improve coverage for readline.Interface
Add tests in parallel/test-readline-interface to increase coverage PR-URL: https://github.com/nodejs/node/pull/20704 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
9461f327f5
commit
f51c44d325
@ -613,6 +613,43 @@ function isWarned(emitter) {
|
||||
rli.close();
|
||||
}
|
||||
|
||||
{
|
||||
// Back and Forward one character
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
fi.emit('data', 'the quick brown fox');
|
||||
let cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 19);
|
||||
|
||||
// Back one character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'b' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 18);
|
||||
// Back one character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'b' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 17);
|
||||
// Forward one character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'f' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 18);
|
||||
// Forward one character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'f' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 19);
|
||||
rli.close();
|
||||
}
|
||||
|
||||
{
|
||||
// `wordLeft` and `wordRight`
|
||||
const fi = new FakeInput();
|
||||
@ -728,6 +765,117 @@ function isWarned(emitter) {
|
||||
});
|
||||
}
|
||||
|
||||
// deleteLeft
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
fi.emit('data', 'the quick brown fox');
|
||||
let cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 19);
|
||||
|
||||
// Delete left character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'h' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 18);
|
||||
rli.on('line', common.mustCall((line) => {
|
||||
assert.strictEqual(line, 'the quick brown fo');
|
||||
}));
|
||||
fi.emit('data', '\n');
|
||||
rli.close();
|
||||
}
|
||||
|
||||
// deleteRight
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
fi.emit('data', 'the quick brown fox');
|
||||
|
||||
// Go to the start of the line
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
|
||||
let cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 0);
|
||||
|
||||
// Delete right character
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'd' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 0);
|
||||
rli.on('line', common.mustCall((line) => {
|
||||
assert.strictEqual(line, 'he quick brown fox');
|
||||
}));
|
||||
fi.emit('data', '\n');
|
||||
rli.close();
|
||||
}
|
||||
|
||||
|
||||
// deleteLineLeft
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
fi.emit('data', 'the quick brown fox');
|
||||
let cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 19);
|
||||
|
||||
// Delete from current to start of line
|
||||
fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'backspace' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 0);
|
||||
rli.on('line', common.mustCall((line) => {
|
||||
assert.strictEqual(line, '');
|
||||
}));
|
||||
fi.emit('data', '\n');
|
||||
rli.close();
|
||||
}
|
||||
|
||||
// deleteLineRight
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
fi.emit('data', 'the quick brown fox');
|
||||
|
||||
// Go to the start of the line
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
|
||||
let cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 0);
|
||||
|
||||
// Delete from current to end of line
|
||||
fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'delete' });
|
||||
cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 0);
|
||||
rli.on('line', common.mustCall((line) => {
|
||||
assert.strictEqual(line, '');
|
||||
}));
|
||||
fi.emit('data', '\n');
|
||||
rli.close();
|
||||
}
|
||||
|
||||
// multi-line cursor position
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
@ -742,6 +890,29 @@ function isWarned(emitter) {
|
||||
const cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 1);
|
||||
assert.strictEqual(cursorPos.cols, 5);
|
||||
rli.close();
|
||||
}
|
||||
|
||||
// Clear the whole screen
|
||||
{
|
||||
const fi = new FakeInput();
|
||||
const rli = new readline.Interface({
|
||||
input: fi,
|
||||
output: fi,
|
||||
prompt: '',
|
||||
terminal: terminal
|
||||
});
|
||||
const lines = ['line 1', 'line 2', 'line 3'];
|
||||
fi.emit('data', lines.join('\n'));
|
||||
fi.emit('keypress', '.', { ctrl: true, name: 'l' });
|
||||
const cursorPos = rli._getCursorPos();
|
||||
assert.strictEqual(cursorPos.rows, 0);
|
||||
assert.strictEqual(cursorPos.cols, 6);
|
||||
rli.on('line', common.mustCall((line) => {
|
||||
assert.strictEqual(line, 'line 3');
|
||||
}));
|
||||
fi.emit('data', '\n');
|
||||
rli.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user