@@ -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