test: improve readline test coverage for tty · nodejs/node@1483ebd

@@ -567,6 +567,142 @@ function isWarned(emitter) {

567567

assert.strictEqual(cursorPos.cols, expectedLines.slice(-1)[0].length);

568568

rli.close();

569569

}

570+571+

{

572+

// Beginning and end of line

573+

const fi = new FakeInput();

574+

const rli = new readline.Interface({

575+

input: fi,

576+

output: fi,

577+

prompt: '',

578+

terminal: terminal

579+

});

580+

fi.emit('data', 'the quick brown fox');

581+

fi.emit('keypress', '.', { ctrl: true, name: 'a' });

582+

let cursorPos = rli._getCursorPos();

583+

assert.strictEqual(cursorPos.rows, 0);

584+

assert.strictEqual(cursorPos.cols, 0);

585+

fi.emit('keypress', '.', { ctrl: true, name: 'e' });

586+

cursorPos = rli._getCursorPos();

587+

assert.strictEqual(cursorPos.rows, 0);

588+

assert.strictEqual(cursorPos.cols, 19);

589+

rli.close();

590+

}

591+592+

{

593+

// `wordLeft` and `wordRight`

594+

const fi = new FakeInput();

595+

const rli = new readline.Interface({

596+

input: fi,

597+

output: fi,

598+

prompt: '',

599+

terminal: terminal

600+

});

601+

fi.emit('data', 'the quick brown fox');

602+

fi.emit('keypress', '.', { ctrl: true, name: 'left' });

603+

let cursorPos = rli._getCursorPos();

604+

assert.strictEqual(cursorPos.rows, 0);

605+

assert.strictEqual(cursorPos.cols, 16);

606+

fi.emit('keypress', '.', { meta: true, name: 'b' });

607+

cursorPos = rli._getCursorPos();

608+

assert.strictEqual(cursorPos.rows, 0);

609+

assert.strictEqual(cursorPos.cols, 10);

610+

fi.emit('keypress', '.', { ctrl: true, name: 'right' });

611+

cursorPos = rli._getCursorPos();

612+

assert.strictEqual(cursorPos.rows, 0);

613+

assert.strictEqual(cursorPos.cols, 16);

614+

fi.emit('keypress', '.', { meta: true, name: 'f' });

615+

cursorPos = rli._getCursorPos();

616+

assert.strictEqual(cursorPos.rows, 0);

617+

assert.strictEqual(cursorPos.cols, 19);

618+

rli.close();

619+

}

620+621+

{

622+

// `deleteWordLeft`

623+

[

624+

{ ctrl: true, name: 'w' },

625+

{ ctrl: true, name: 'backspace' },

626+

{ meta: true, name: 'backspace' }

627+

]

628+

.forEach((deleteWordLeftKey) => {

629+

let fi = new FakeInput();

630+

let rli = new readline.Interface({

631+

input: fi,

632+

output: fi,

633+

prompt: '',

634+

terminal: terminal

635+

});

636+

fi.emit('data', 'the quick brown fox');

637+

fi.emit('keypress', '.', { ctrl: true, name: 'left' });

638+

rli.on('line', common.mustCall((line) => {

639+

assert.strictEqual(line, 'the quick fox');

640+

}));

641+

fi.emit('keypress', '.', deleteWordLeftKey);

642+

fi.emit('data', '\n');

643+

rli.close();

644+645+

// No effect if pressed at beginning of line

646+

fi = new FakeInput();

647+

rli = new readline.Interface({

648+

input: fi,

649+

output: fi,

650+

prompt: '',

651+

terminal: terminal

652+

});

653+

fi.emit('data', 'the quick brown fox');

654+

fi.emit('keypress', '.', { ctrl: true, name: 'a' });

655+

rli.on('line', common.mustCall((line) => {

656+

assert.strictEqual(line, 'the quick brown fox');

657+

}));

658+

fi.emit('keypress', '.', deleteWordLeftKey);

659+

fi.emit('data', '\n');

660+

rli.close();

661+

});

662+

}

663+664+

{

665+

// `deleteWordRight`

666+

[

667+

{ ctrl: true, name: 'delete' },

668+

{ meta: true, name: 'delete' },

669+

{ meta: true, name: 'd' }

670+

]

671+

.forEach((deleteWordRightKey) => {

672+

let fi = new FakeInput();

673+

let rli = new readline.Interface({

674+

input: fi,

675+

output: fi,

676+

prompt: '',

677+

terminal: terminal

678+

});

679+

fi.emit('data', 'the quick brown fox');

680+

fi.emit('keypress', '.', { ctrl: true, name: 'left' });

681+

fi.emit('keypress', '.', { ctrl: true, name: 'left' });

682+

rli.on('line', common.mustCall((line) => {

683+

assert.strictEqual(line, 'the quick fox');

684+

}));

685+

fi.emit('keypress', '.', deleteWordRightKey);

686+

fi.emit('data', '\n');

687+

rli.close();

688+689+

// No effect if pressed at end of line

690+

fi = new FakeInput();

691+

rli = new readline.Interface({

692+

input: fi,

693+

output: fi,

694+

prompt: '',

695+

terminal: terminal

696+

});

697+

fi.emit('data', 'the quick brown fox');

698+

rli.on('line', common.mustCall((line) => {

699+

assert.strictEqual(line, 'the quick brown fox');

700+

}));

701+

fi.emit('keypress', '.', deleteWordRightKey);

702+

fi.emit('data', '\n');

703+

rli.close();

704+

});

705+

}

570706

}

571707572708

// isFullWidthCodePoint() should return false for non-numeric values