diff --git a/src/test/java/org/jetbrains/plugins/ideavim/group/search/IncsearchTests.kt b/src/test/java/org/jetbrains/plugins/ideavim/group/search/IncsearchTests.kt index e45ceb62a..6b5082020 100644 --- a/src/test/java/org/jetbrains/plugins/ideavim/group/search/IncsearchTests.kt +++ b/src/test/java/org/jetbrains/plugins/ideavim/group/search/IncsearchTests.kt @@ -684,6 +684,136 @@ class IncsearchTests : VimTestCase() { ) } + @Test + fun `test incsearch updates selection when editing search pattern`() { + // This will initially move selection to the "it" in "sit" on the first line, then back to the start of "ipsum". + // Tests that the selection is correctly updated as the current target changes + doTest( + listOf("vl", "/it", "<BS>", "p"), + """ + |Lorem ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |${s}Lorem ${c}i${se}psum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.CMD_LINE(Mode.VISUAL(SelectionType.CHARACTER_WISE)) + ) { + enterCommand("set hlsearch incsearch") + } + assertSearchHighlights("ip", + """ + |Lorem ‷ip‴sum dolor sit amet, + |consectetur ad«ip»iscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + ) + } + + @Test + fun `test incsearch updates empty selection when editing search pattern`() { + // This will initially move selection to the "it" in "sit" on the first line, then back to the start of "ipsum". + // Tests that the selection is correctly updated as the current target changes + doTest( + listOf("v", "/it", "<BS>", "p"), + """ + |Lorem ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |${s}Lorem ${c}i${se}psum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.CMD_LINE(Mode.VISUAL(SelectionType.CHARACTER_WISE)) + ) { + enterCommand("set hlsearch incsearch") + } + assertSearchHighlights("ip", + """ + |Lorem ‷ip‴sum dolor sit amet, + |consectetur ad«ip»iscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + ) + } + + @Test + fun `test incsearch updates exclusive selection when editing search pattern`() { + // This will initially move selection to the "it" in "sit" on the first line, then back to the start of "ipsum". + // Tests that the selection is correctly updated as the current target changes + doTest( + listOf("vl", "/it", "<BS>", "p"), + """ + |Lorem ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |${s}Lorem ${c}${se}ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.CMD_LINE(Mode.VISUAL(SelectionType.CHARACTER_WISE)) + ) { + enterCommand("set selection=exclusive") + enterCommand("set hlsearch incsearch") + } + assertSearchHighlights("ip", + """ + |Lorem ‷ip‴sum dolor sit amet, + |consectetur ad«ip»iscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + ) + } + + @Test + fun `test incsearch updates empty exclusive selection when editing search pattern`() { + // This will initially move selection to the "it" in "sit" on the first line, then back to the start of "ipsum". + // Tests that the selection is correctly updated as the current target changes + doTest( + listOf("vl", "/it", "<BS>", "p"), + """ + |Lorem ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + """ + |${s}Lorem ${c}${se}ipsum dolor sit amet, + |consectetur adipiscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin(), + Mode.CMD_LINE(Mode.VISUAL(SelectionType.CHARACTER_WISE)) + ) { + enterCommand("set selection=exclusive") + enterCommand("set hlsearch incsearch") + } + assertSearchHighlights("ip", + """ + |Lorem ‷ip‴sum dolor sit amet, + |consectetur ad«ip»iscing elit + |Sed in orci mauris. + |Cras id tellus in ex imperdiet egestas. + """.trimMargin() + ) + } + @Test fun `test incsearch updates block selection when started in Visual mode`() { doTest(