@@ -613,6 +613,43 @@ function isWarned(emitter) {
613
613
rli . close ( ) ;
614
614
}
615
615
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
+
616
653
{
617
654
// `wordLeft` and `wordRight`
618
655
const fi = new FakeInput ( ) ;
@@ -728,6 +765,117 @@ function isWarned(emitter) {
728
765
} ) ;
729
766
}
730
767
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
+
731
879
// multi-line cursor position
732
880
{
733
881
const fi = new FakeInput ( ) ;
@@ -742,6 +890,29 @@ function isWarned(emitter) {
742
890
const cursorPos = rli . _getCursorPos ( ) ;
743
891
assert . strictEqual ( cursorPos . rows , 1 ) ;
744
892
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 ( ) ;
745
916
}
746
917
}
747
918
0 commit comments