@@ -829,10 +829,91 @@ public void testResetIncrementalBaseLocation() {
829829
830830 findReplaceLogic .setFindString ("test" );
831831 assertThat (textViewer .getSelectedRange (), is (new Point (0 , 4 )));
832+
833+ // Move caret after first "test" i.e., caret after "test\n", so after 5 characters
832834 textViewer .setSelectedRange (5 , 0 );
833835 findReplaceLogic .resetIncrementalBaseLocation ();
834836 findReplaceLogic .performSearch ();
835837 assertThat (textViewer .getSelectedRange (), is (new Point (5 , 4 )));
838+
839+ // Move caret inside second "test" i.e., caret after "test\nte", so after 7 characters
840+ textViewer .setSelectedRange (7 , 0 );
841+ findReplaceLogic .resetIncrementalBaseLocation ();
842+ findReplaceLogic .performSearch ();
843+ assertThat (textViewer .getSelectedRange (), is (new Point (10 , 4 )));
844+
845+ // Move caret to position to third "test" i.e., caret after "test\ntest\n", so after 10 characters
846+ textViewer .setSelectedRange (10 , 0 );
847+ findReplaceLogic .resetIncrementalBaseLocation ();
848+ findReplaceLogic .performSearch ();
849+ assertThat (textViewer .getSelectedRange (), is (new Point (10 , 4 )));
850+
851+ findReplaceLogic .setFindString ("" );
852+ findReplaceLogic .performSearch ();
853+ assertThat (textViewer .getSelectedRange (), is (new Point (0 , 0 )));
854+ }
855+
856+ @ Test
857+ public void testSelectionRestoredAfterClearingSearch () {
858+ String setupString = "alpha beta gamma" ;
859+ TextViewer textViewer = setupTextViewer (setupString );
860+ textViewer .setSelectedRange (6 , 0 ); // caret after 'alpha '
861+ IFindReplaceLogic logic = setupFindReplaceLogicObject (textViewer );
862+ logic .activate (SearchOptions .FORWARD );
863+ logic .activate (SearchOptions .INCREMENTAL );
864+
865+ logic .setFindString ("gamma" );
866+ assertThat (textViewer .getSelectedRange (), is (new Point (11 , 5 ))); // "gamma" found
867+
868+ logic .setFindString ("" );
869+ assertThat (textViewer .getSelectedRange (), is (new Point (6 , 0 )));
870+ }
871+
872+
873+ @ Test
874+ public void testCaretRestoredWhenSearchCleared () {
875+ String setupString = "alpha beta gamma" ;
876+ TextViewer textViewer = setupTextViewer (setupString );
877+ textViewer .setSelectedRange (0 , 0 );
878+ IFindReplaceLogic logic = setupFindReplaceLogicObject (textViewer );
879+ logic .activate (SearchOptions .FORWARD );
880+ logic .activate (SearchOptions .INCREMENTAL );
881+
882+ logic .setFindString ("beta" );
883+ assertThat (textViewer .getSelectedRange (), is (new Point (6 , 4 ))); // found "beta"
884+
885+ // Clear the search field - should restore caret
886+ logic .setFindString ("" );
887+ logic .performSearch ();
888+ // Expect caret restored to starting location (0,0)
889+ assertThat (textViewer .getSelectedRange (), is (new Point (0 , 0 )));
890+ }
891+
892+
893+ @ Test
894+ public void testCaretRestoredBetweenSearchSessions () {
895+ String setupString = "alpha beta gamma" ;
896+ TextViewer textViewer = setupTextViewer (setupString );
897+ IFindReplaceLogic logic = setupFindReplaceLogicObject (textViewer );
898+ logic .activate (SearchOptions .FORWARD );
899+ logic .activate (SearchOptions .INCREMENTAL );
900+
901+ textViewer .setSelectedRange (0 , 0 ); // caret at start
902+ logic .setFindString ("alpha" );
903+ assertThat (textViewer .getSelectedRange (), is (new Point (0 , 5 ))); // "alpha" found
904+
905+ // Clear the search (simulate reopen of overlay)
906+ logic .setFindString ("" );
907+ logic .performSearch ();
908+ assertThat (textViewer .getSelectedRange (), is (new Point (0 , 0 ))); // caret restored
909+
910+ textViewer .setSelectedRange (6 , 0 ); // caret before "beta"
911+ logic .setFindString ("beta" );
912+ assertThat (textViewer .getSelectedRange (), is (new Point (6 , 4 ))); // "beta" found
913+
914+ logic .setFindString ("" );
915+ logic .performSearch ();
916+ assertThat (textViewer .getSelectedRange (), is (new Point (6 , 0 ))); // caret restored to new base
836917 }
837918
838919 @ Test
@@ -867,7 +948,7 @@ public void testSetFindString_incrementalActive() {
867948 assertEquals (new Point (0 , 2 ), findReplaceLogic .getTarget ().getSelection ());
868949
869950 findReplaceLogic .setFindString ("" ); // this clears the incremental search, but the "old search" still remains active
870- assertEquals (new Point (0 , 2 ), findReplaceLogic .getTarget ().getSelection ());
951+ assertEquals (new Point (0 , 0 ), findReplaceLogic .getTarget ().getSelection ()); // after #3379 pr
871952 }
872953
873954 @ Test
0 commit comments