test: improve readline test coverage for tty · nodejs/node@7a95392 (original) (raw)
`@@ -527,6 +527,142 @@ function isWarned(emitter) {
`
527
527
`assert.strictEqual(cursorPos.cols, expectedLines.slice(-1)[0].length);
`
528
528
`rli.close();
`
529
529
`}
`
``
530
+
``
531
`+
{
`
``
532
`+
// Beginning and end of line
`
``
533
`+
const fi = new FakeInput();
`
``
534
`+
const rli = new readline.Interface({
`
``
535
`+
input: fi,
`
``
536
`+
output: fi,
`
``
537
`+
prompt: '',
`
``
538
`+
terminal: terminal
`
``
539
`+
});
`
``
540
`+
fi.emit('data', 'the quick brown fox');
`
``
541
`+
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
`
``
542
`+
let cursorPos = rli._getCursorPos();
`
``
543
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
544
`+
assert.strictEqual(cursorPos.cols, 0);
`
``
545
`+
fi.emit('keypress', '.', { ctrl: true, name: 'e' });
`
``
546
`+
cursorPos = rli._getCursorPos();
`
``
547
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
548
`+
assert.strictEqual(cursorPos.cols, 19);
`
``
549
`+
rli.close();
`
``
550
`+
}
`
``
551
+
``
552
`+
{
`
``
553
`` +
// wordLeft
and wordRight
``
``
554
`+
const fi = new FakeInput();
`
``
555
`+
const rli = new readline.Interface({
`
``
556
`+
input: fi,
`
``
557
`+
output: fi,
`
``
558
`+
prompt: '',
`
``
559
`+
terminal: terminal
`
``
560
`+
});
`
``
561
`+
fi.emit('data', 'the quick brown fox');
`
``
562
`+
fi.emit('keypress', '.', { ctrl: true, name: 'left' });
`
``
563
`+
let cursorPos = rli._getCursorPos();
`
``
564
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
565
`+
assert.strictEqual(cursorPos.cols, 16);
`
``
566
`+
fi.emit('keypress', '.', { meta: true, name: 'b' });
`
``
567
`+
cursorPos = rli._getCursorPos();
`
``
568
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
569
`+
assert.strictEqual(cursorPos.cols, 10);
`
``
570
`+
fi.emit('keypress', '.', { ctrl: true, name: 'right' });
`
``
571
`+
cursorPos = rli._getCursorPos();
`
``
572
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
573
`+
assert.strictEqual(cursorPos.cols, 16);
`
``
574
`+
fi.emit('keypress', '.', { meta: true, name: 'f' });
`
``
575
`+
cursorPos = rli._getCursorPos();
`
``
576
`+
assert.strictEqual(cursorPos.rows, 0);
`
``
577
`+
assert.strictEqual(cursorPos.cols, 19);
`
``
578
`+
rli.close();
`
``
579
`+
}
`
``
580
+
``
581
`+
{
`
``
582
`` +
// deleteWordLeft
``
``
583
`+
[
`
``
584
`+
{ ctrl: true, name: 'w' },
`
``
585
`+
{ ctrl: true, name: 'backspace' },
`
``
586
`+
{ meta: true, name: 'backspace' }
`
``
587
`+
]
`
``
588
`+
.forEach((deleteWordLeftKey) => {
`
``
589
`+
let fi = new FakeInput();
`
``
590
`+
let rli = new readline.Interface({
`
``
591
`+
input: fi,
`
``
592
`+
output: fi,
`
``
593
`+
prompt: '',
`
``
594
`+
terminal: terminal
`
``
595
`+
});
`
``
596
`+
fi.emit('data', 'the quick brown fox');
`
``
597
`+
fi.emit('keypress', '.', { ctrl: true, name: 'left' });
`
``
598
`+
rli.on('line', common.mustCall((line) => {
`
``
599
`+
assert.strictEqual(line, 'the quick fox');
`
``
600
`+
}));
`
``
601
`+
fi.emit('keypress', '.', deleteWordLeftKey);
`
``
602
`+
fi.emit('data', '\n');
`
``
603
`+
rli.close();
`
``
604
+
``
605
`+
// No effect if pressed at beginning of line
`
``
606
`+
fi = new FakeInput();
`
``
607
`+
rli = new readline.Interface({
`
``
608
`+
input: fi,
`
``
609
`+
output: fi,
`
``
610
`+
prompt: '',
`
``
611
`+
terminal: terminal
`
``
612
`+
});
`
``
613
`+
fi.emit('data', 'the quick brown fox');
`
``
614
`+
fi.emit('keypress', '.', { ctrl: true, name: 'a' });
`
``
615
`+
rli.on('line', common.mustCall((line) => {
`
``
616
`+
assert.strictEqual(line, 'the quick brown fox');
`
``
617
`+
}));
`
``
618
`+
fi.emit('keypress', '.', deleteWordLeftKey);
`
``
619
`+
fi.emit('data', '\n');
`
``
620
`+
rli.close();
`
``
621
`+
});
`
``
622
`+
}
`
``
623
+
``
624
`+
{
`
``
625
`` +
// deleteWordRight
``
``
626
`+
[
`
``
627
`+
{ ctrl: true, name: 'delete' },
`
``
628
`+
{ meta: true, name: 'delete' },
`
``
629
`+
{ meta: true, name: 'd' }
`
``
630
`+
]
`
``
631
`+
.forEach((deleteWordRightKey) => {
`
``
632
`+
let fi = new FakeInput();
`
``
633
`+
let rli = new readline.Interface({
`
``
634
`+
input: fi,
`
``
635
`+
output: fi,
`
``
636
`+
prompt: '',
`
``
637
`+
terminal: terminal
`
``
638
`+
});
`
``
639
`+
fi.emit('data', 'the quick brown fox');
`
``
640
`+
fi.emit('keypress', '.', { ctrl: true, name: 'left' });
`
``
641
`+
fi.emit('keypress', '.', { ctrl: true, name: 'left' });
`
``
642
`+
rli.on('line', common.mustCall((line) => {
`
``
643
`+
assert.strictEqual(line, 'the quick fox');
`
``
644
`+
}));
`
``
645
`+
fi.emit('keypress', '.', deleteWordRightKey);
`
``
646
`+
fi.emit('data', '\n');
`
``
647
`+
rli.close();
`
``
648
+
``
649
`+
// No effect if pressed at end of line
`
``
650
`+
fi = new FakeInput();
`
``
651
`+
rli = new readline.Interface({
`
``
652
`+
input: fi,
`
``
653
`+
output: fi,
`
``
654
`+
prompt: '',
`
``
655
`+
terminal: terminal
`
``
656
`+
});
`
``
657
`+
fi.emit('data', 'the quick brown fox');
`
``
658
`+
rli.on('line', common.mustCall((line) => {
`
``
659
`+
assert.strictEqual(line, 'the quick brown fox');
`
``
660
`+
}));
`
``
661
`+
fi.emit('keypress', '.', deleteWordRightKey);
`
``
662
`+
fi.emit('data', '\n');
`
``
663
`+
rli.close();
`
``
664
`+
});
`
``
665
`+
}
`
530
666
`}
`
531
667
``
532
668
`// isFullWidthCodePoint() should return false for non-numeric values
`