Skip to content

Commit 554ad47

Browse files
Masashi Hiranotargos
Masashi Hirano
authored andcommitted
test: improve coverage for readline.Interface
Add tests in parallel/test-readline-interface to increase coverage PR-URL: #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>
1 parent b0023d7 commit 554ad47

File tree

1 file changed

+171
-0
lines changed

1 file changed

+171
-0
lines changed

test/parallel/test-readline-interface.js

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,43 @@ function isWarned(emitter) {
613613
rli.close();
614614
}
615615

616+
{
617+
// Back and Forward one character
618+
const fi = new FakeInput();
619+
const rli = new readline.Interface({
620+
input: fi,
621+
output: fi,
622+
prompt: '',
623+
terminal: terminal
624+
});
625+
fi.emit('data', 'the quick brown fox');
626+
let cursorPos = rli._getCursorPos();
627+
assert.strictEqual(cursorPos.rows, 0);
628+
assert.strictEqual(cursorPos.cols, 19);
629+
630+
// Back one character
631+
fi.emit('keypress', '.', { ctrl: true, name: 'b' });
632+
cursorPos = rli._getCursorPos();
633+
assert.strictEqual(cursorPos.rows, 0);
634+
assert.strictEqual(cursorPos.cols, 18);
635+
// Back one character
636+
fi.emit('keypress', '.', { ctrl: true, name: 'b' });
637+
cursorPos = rli._getCursorPos();
638+
assert.strictEqual(cursorPos.rows, 0);
639+
assert.strictEqual(cursorPos.cols, 17);
640+
// Forward one character
641+
fi.emit('keypress', '.', { ctrl: true, name: 'f' });
642+
cursorPos = rli._getCursorPos();
643+
assert.strictEqual(cursorPos.rows, 0);
644+
assert.strictEqual(cursorPos.cols, 18);
645+
// Forward one character
646+
fi.emit('keypress', '.', { ctrl: true, name: 'f' });
647+
cursorPos = rli._getCursorPos();
648+
assert.strictEqual(cursorPos.rows, 0);
649+
assert.strictEqual(cursorPos.cols, 19);
650+
rli.close();
651+
}
652+
616653
{
617654
// `wordLeft` and `wordRight`
618655
const fi = new FakeInput();
@@ -728,6 +765,117 @@ function isWarned(emitter) {
728765
});
729766
}
730767

768+
// deleteLeft
769+
{
770+
const fi = new FakeInput();
771+
const rli = new readline.Interface({
772+
input: fi,
773+
output: fi,
774+
prompt: '',
775+
terminal: terminal
776+
});
777+
fi.emit('data', 'the quick brown fox');
778+
let cursorPos = rli._getCursorPos();
779+
assert.strictEqual(cursorPos.rows, 0);
780+
assert.strictEqual(cursorPos.cols, 19);
781+
782+
// Delete left character
783+
fi.emit('keypress', '.', { ctrl: true, name: 'h' });
784+
cursorPos = rli._getCursorPos();
785+
assert.strictEqual(cursorPos.rows, 0);
786+
assert.strictEqual(cursorPos.cols, 18);
787+
rli.on('line', common.mustCall((line) => {
788+
assert.strictEqual(line, 'the quick brown fo');
789+
}));
790+
fi.emit('data', '\n');
791+
rli.close();
792+
}
793+
794+
// deleteRight
795+
{
796+
const fi = new FakeInput();
797+
const rli = new readline.Interface({
798+
input: fi,
799+
output: fi,
800+
prompt: '',
801+
terminal: terminal
802+
});
803+
fi.emit('data', 'the quick brown fox');
804+
805+
// Go to the start of the line
806+
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
807+
let cursorPos = rli._getCursorPos();
808+
assert.strictEqual(cursorPos.rows, 0);
809+
assert.strictEqual(cursorPos.cols, 0);
810+
811+
// Delete right character
812+
fi.emit('keypress', '.', { ctrl: true, name: 'd' });
813+
cursorPos = rli._getCursorPos();
814+
assert.strictEqual(cursorPos.rows, 0);
815+
assert.strictEqual(cursorPos.cols, 0);
816+
rli.on('line', common.mustCall((line) => {
817+
assert.strictEqual(line, 'he quick brown fox');
818+
}));
819+
fi.emit('data', '\n');
820+
rli.close();
821+
}
822+
823+
824+
// deleteLineLeft
825+
{
826+
const fi = new FakeInput();
827+
const rli = new readline.Interface({
828+
input: fi,
829+
output: fi,
830+
prompt: '',
831+
terminal: terminal
832+
});
833+
fi.emit('data', 'the quick brown fox');
834+
let cursorPos = rli._getCursorPos();
835+
assert.strictEqual(cursorPos.rows, 0);
836+
assert.strictEqual(cursorPos.cols, 19);
837+
838+
// Delete from current to start of line
839+
fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'backspace' });
840+
cursorPos = rli._getCursorPos();
841+
assert.strictEqual(cursorPos.rows, 0);
842+
assert.strictEqual(cursorPos.cols, 0);
843+
rli.on('line', common.mustCall((line) => {
844+
assert.strictEqual(line, '');
845+
}));
846+
fi.emit('data', '\n');
847+
rli.close();
848+
}
849+
850+
// deleteLineRight
851+
{
852+
const fi = new FakeInput();
853+
const rli = new readline.Interface({
854+
input: fi,
855+
output: fi,
856+
prompt: '',
857+
terminal: terminal
858+
});
859+
fi.emit('data', 'the quick brown fox');
860+
861+
// Go to the start of the line
862+
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
863+
let cursorPos = rli._getCursorPos();
864+
assert.strictEqual(cursorPos.rows, 0);
865+
assert.strictEqual(cursorPos.cols, 0);
866+
867+
// Delete from current to end of line
868+
fi.emit('keypress', '.', { ctrl: true, shift: true, name: 'delete' });
869+
cursorPos = rli._getCursorPos();
870+
assert.strictEqual(cursorPos.rows, 0);
871+
assert.strictEqual(cursorPos.cols, 0);
872+
rli.on('line', common.mustCall((line) => {
873+
assert.strictEqual(line, '');
874+
}));
875+
fi.emit('data', '\n');
876+
rli.close();
877+
}
878+
731879
// multi-line cursor position
732880
{
733881
const fi = new FakeInput();
@@ -742,6 +890,29 @@ function isWarned(emitter) {
742890
const cursorPos = rli._getCursorPos();
743891
assert.strictEqual(cursorPos.rows, 1);
744892
assert.strictEqual(cursorPos.cols, 5);
893+
rli.close();
894+
}
895+
896+
// Clear the whole screen
897+
{
898+
const fi = new FakeInput();
899+
const rli = new readline.Interface({
900+
input: fi,
901+
output: fi,
902+
prompt: '',
903+
terminal: terminal
904+
});
905+
const lines = ['line 1', 'line 2', 'line 3'];
906+
fi.emit('data', lines.join('\n'));
907+
fi.emit('keypress', '.', { ctrl: true, name: 'l' });
908+
const cursorPos = rli._getCursorPos();
909+
assert.strictEqual(cursorPos.rows, 0);
910+
assert.strictEqual(cursorPos.cols, 6);
911+
rli.on('line', common.mustCall((line) => {
912+
assert.strictEqual(line, 'line 3');
913+
}));
914+
fi.emit('data', '\n');
915+
rli.close();
745916
}
746917
}
747918

0 commit comments

Comments
 (0)