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();
|
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`
|
// `wordLeft` and `wordRight`
|
||||||
const fi = new FakeInput();
|
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
|
// multi-line cursor position
|
||||||
{
|
{
|
||||||
const fi = new FakeInput();
|
const fi = new FakeInput();
|
||||||
@ -742,6 +890,29 @@ function isWarned(emitter) {
|
|||||||
const cursorPos = rli._getCursorPos();
|
const cursorPos = rli._getCursorPos();
|
||||||
assert.strictEqual(cursorPos.rows, 1);
|
assert.strictEqual(cursorPos.rows, 1);
|
||||||
assert.strictEqual(cursorPos.cols, 5);
|
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