mirror of
https://github.com/chylex/IntelliJ-IdeaVim.git
synced 2025-05-01 16:34:03 +02:00
Add tests for existing word/WORD text objects
This commit is contained in:
parent
580764b30c
commit
2da77f0f11
src/test/java/org/jetbrains/plugins/ideavim/action/motion/object
@ -9,10 +9,630 @@
|
||||
package org.jetbrains.plugins.ideavim.action.motion.`object`
|
||||
|
||||
import com.maddyhome.idea.vim.state.mode.Mode
|
||||
import com.maddyhome.idea.vim.state.mode.SelectionType
|
||||
import org.jetbrains.plugins.ideavim.VimBehaviorDiffers
|
||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@Suppress("RemoveCurlyBracesFromTemplate", "SpellCheckingInspection")
|
||||
class MotionInnerBigWordActionTest : VimTestCase() {
|
||||
@Test
|
||||
fun `test select WORD from beginning of word`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"${c}Lorem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD from middle of word`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lo${c}rem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD from end of word`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lore${c}m ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD from inside whitespace selects whitespace`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lorem ${c} ...ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ${c} ${se}...ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD from whitespace at start of line`() {
|
||||
doTest(
|
||||
"viW",
|
||||
" ${c} ...Lorem ipsum",
|
||||
"${s} ${c} ${se}...Lorem ipsum",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD from whitespace at end of line`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lorem ipsum... ${c} ",
|
||||
"Lorem ipsum...${s} ${c} ${se}",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD ignores punctuation`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lorem ipsum dolor sit a${c}met,consectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit ${s}amet,consectetu${c}r${se} adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD with existing left-to-right selection selects rest of word`() {
|
||||
doTest(
|
||||
listOf("v", "l", "iW"),
|
||||
"Lorem ipsum dolor sit amet, con${c}sectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit amet, con${s}sectetu${c}r${se} adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD with existing left-to-right selection in whitespace selects rest of whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "l", "iW"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem ${s} ${c} ${se}ipsum dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter = "Lorem ipsum dolor sit amet, ${s}${c}consectet${se}ur adipiscing elit")
|
||||
@Test
|
||||
fun `test select WORD with existing right-to-left selection selects start of word`() {
|
||||
doTest(
|
||||
listOf("v", "h", "iW"),
|
||||
"Lorem ipsum dolor sit amet, consecte${c}tur adipiscing elit",
|
||||
"Lorem ipsum dolor sit amet,${s}${c} consectet${se}ur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select WORD with existing right-to-left selection in whitespace selects rest of whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "h", "iW"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem${s}${c} ${se} ipsum dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(
|
||||
originalVimAfter = "${s}Lorem${c}${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
description = "Text objects are implicitly inclusive, because they set the selection." +
|
||||
"Vim modifies the caret offset of inclusive motions when in exclusive selection mode. " +
|
||||
"Fix this when IdeaVim also handles inclusive motions in exclusive selection mode."
|
||||
)
|
||||
@Test
|
||||
fun `test select WORD with exclusive selection`() {
|
||||
doTest(
|
||||
"viW",
|
||||
"Lo${c}rem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}${se}m ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
) {
|
||||
enterCommand("set selection=exclusive")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to following whitespace`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur${c} ${se}adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to WORD following whitespace`() {
|
||||
doTest(
|
||||
listOf("viW", "iW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscin${c}g${se} elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count expands selection`() {
|
||||
doTest(
|
||||
"v3iW",
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscin${c}g${se} elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object does not expand selection from single character selection`() {
|
||||
// Surprisingly, this is correct Vim behaviour! It does not expand selection from a single character selection
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${c}m ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${s}${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object does not expand selection from current single whitespace`() {
|
||||
// Surprisingly, this is correct Vim behaviour! It does not expand selection from a single whitespace selection
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${c} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${s}${c} ${se}ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count will expand selection from current single whitespace`() {
|
||||
// `viwiw` on a single character doesn't expand selection, but `v2iw` does. Go figure
|
||||
doTest(
|
||||
listOf("v3iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${c}m ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${s}m ipsu${c}m${se} dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to end of line`() {
|
||||
doTest(
|
||||
listOf("v2iW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adi${c}piscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing eli${c}t${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing elit.......${c}.${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Caret placement is incorrect, but the selection is correct - it should not select the final newline char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace at end of line`() {
|
||||
doTest(
|
||||
listOf("v3iW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adi${c}piscing elit........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing elit........${c}${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "IdeaVim expands to include newline character"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands across new line`() {
|
||||
doTest(
|
||||
listOf("viW", "iW", "iW"), // TODO: This should be just listOf("viW", "iW")
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace following new line`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing e${c}lit
|
||||
| Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
| ${c} ${se}Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}L${se}orem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Vim's behaviour is weird. Makes no sense that it selects the first character of the word. " +
|
||||
"Possibly a bug in Vim: https://github.com/vim/vim/issues/16514 " +
|
||||
"Unclear what the correct behaviour should be",
|
||||
shouldBeFixed = false
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to empty line`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}
|
||||
|${se}Lorem ipsum dolor sit amet,
|
||||
""",
|
||||
description = "Off by one because IdeaVim does not allow selecting a newline char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to multiple empty lines`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|.......${c}.${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Caret placement is incorrect, but selection is correct. It should not select trailing new line char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace on following blank line`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|........
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|........${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}.${se}.......
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Vim's behaviour is weird. Makes no sense that it selects the first character of the word. " +
|
||||
"Possibly a bug in Vim: https://github.com/vim/vim/issues/16514 " +
|
||||
"Unclear what the correct behaviour should be",
|
||||
shouldBeFixed = false
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace on following blank lines`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|........
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands to include whitespace after non-word character`() {
|
||||
doTest(
|
||||
listOf("viW", "iW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit ${s}amet,${c} ${se}consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple WORDs selects includes whitespace between words in count`() {
|
||||
doTest(
|
||||
"v2iW",
|
||||
"...Lo${c}rem... ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}...Lorem...${c} ${se}ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple WORDs selects includes whitespace between words in count 2`() {
|
||||
doTest(
|
||||
"v3iW",
|
||||
"...L${c}orem... ipsum... dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}...Lorem... ipsum..${c}.${se} dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple WORDs starting in whitespace`() {
|
||||
doTest(
|
||||
"v3iW",
|
||||
"Lorem ${c} ...ipsum... dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ...ipsum...${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Sed${c} ${se}in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Unclear why this fails. IdeaVim seems to treat the new line char as a word"
|
||||
)
|
||||
@Test
|
||||
fun `test select multiple words wraps to next line`() {
|
||||
doTest(
|
||||
"v3iw",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test at last dot`() {
|
||||
doTest(
|
||||
|
@ -10,10 +10,649 @@ package org.jetbrains.plugins.ideavim.action.motion.`object`
|
||||
|
||||
import com.maddyhome.idea.vim.state.mode.Mode
|
||||
import com.maddyhome.idea.vim.state.mode.SelectionType
|
||||
import org.jetbrains.plugins.ideavim.VimBehaviorDiffers
|
||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@Suppress("SpellCheckingInspection", "RemoveCurlyBracesFromTemplate")
|
||||
class MotionInnerWordActionTest : VimTestCase() {
|
||||
@Test
|
||||
fun `test select word from beginning of word`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"${c}Lorem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word from middle of word`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lo${c}rem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word from end of word`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lore${c}m ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}m${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word from inside whitespace selects whitespace`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lorem ${c} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ${c} ${se}ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word from whitespace at start of line`() {
|
||||
doTest(
|
||||
"viw",
|
||||
" ${c} Lorem ipsum",
|
||||
"${s} ${c} ${se}Lorem ipsum",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word from whitespace at end of line`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lorem ipsum ${c} ",
|
||||
"Lorem ipsum${s} ${c} ${se}",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word selects up to punctuation`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit ${s}ame${c}t${se}, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word with existing left-to-right selection selects rest of word`() {
|
||||
doTest(
|
||||
listOf("v", "l", "iw"),
|
||||
"Lorem ipsum dolor sit amet, con${c}sectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit amet, con${s}sectetu${c}r${se} adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word with existing left-to-right selection in whitespace selects rest of whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "l", "iw"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem ${s} ${c} ${se}ipsum dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter = "Lorem ipsum dolor sit amet, ${s}${c}consectet${se}ur adipiscing elit")
|
||||
@Test
|
||||
fun `test select word with existing right-to-left selection selects start of word`() {
|
||||
doTest(
|
||||
listOf("v", "h", "iw"),
|
||||
"Lorem ipsum dolor sit amet, consecte${c}tur adipiscing elit",
|
||||
"Lorem ipsum dolor sit amet,${s}${c} consectet${se}ur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select word with existing right-to-left selection in whitespace selects rest of whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "h", "iw"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem${s}${c} ${se} ipsum dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(
|
||||
originalVimAfter = "${s}Lorem${c}${se} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
description = "Text objects are implicitly inclusive, because they set the selection." +
|
||||
"Vim modifies the caret offset of inclusive motions when in exclusive selection mode. " +
|
||||
"Fix this when IdeaVim also handles inclusive motions in exclusive selection mode."
|
||||
)
|
||||
@Test
|
||||
fun `test select word with exclusive selection`() {
|
||||
doTest(
|
||||
"viw",
|
||||
"Lo${c}rem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lore${c}${se}m ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
) {
|
||||
enterCommand("set selection=exclusive")
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to following whitespace`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur${c} ${se}adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to word following whitespace`() {
|
||||
doTest(
|
||||
listOf("viw", "iw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscin${c}g${se} elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count expands selection`() {
|
||||
doTest(
|
||||
"v3iw",
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscin${c}g${se} elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object does not expand selection from single character selection`() {
|
||||
// Surprisingly, this is correct Vim behaviour! It does not expand selection from a single character selection
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${c}m ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${s}${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object does not expand selection from current single whitespace`() {
|
||||
// Surprisingly, this is correct Vim behaviour! It does not expand selection from a single whitespace selection
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${c} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${s}${c} ${se}ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count will expand selection from current single whitespace`() {
|
||||
// `viwiw` on a single character doesn't expand selection, but `v2iw` does. Go figure
|
||||
doTest(
|
||||
listOf("v3iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${c}m ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lore ${s}m ipsu${c}m${se} dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to end of line`() {
|
||||
doTest(
|
||||
listOf("v2iw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adi${c}piscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing eli${c}t${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing elit.......${c}.${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Caret placement is incorrect, but the selection is correct - it should not select the final newline char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace at end of line`() {
|
||||
doTest(
|
||||
listOf("v3iw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adi${c}piscing elit........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur ${s}adipiscing elit........${c}${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "IdeaVim expands to include newline character"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands across new line`() {
|
||||
doTest(
|
||||
listOf("viw", "iw", "iw"), // TODO: This should be just listOf("viw", "iw")
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace following new line`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing e${c}lit
|
||||
| Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
| ${c} ${se}Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}L${se}orem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Vim's behaviour is weird. Makes no sense that it selects the first character of the word. " +
|
||||
"Possibly a bug in Vim: https://github.com/vim/vim/issues/16514 " +
|
||||
"Unclear what the correct behaviour should be",
|
||||
shouldBeFixed = false
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to empty line`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}
|
||||
|${se}Lorem ipsum dolor sit amet,
|
||||
""",
|
||||
description = "Off by one because IdeaVim does not allow selecting a newline char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to multiple empty lines`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|.......${c}.${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Caret placement is incorrect, but selection is correct. It should not select trailing new line char"
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace on following blank line`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|........
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|........${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|${c}.${se}.......
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Vim's behaviour is weird. Makes no sense that it selects the first character of the word. " +
|
||||
"Possibly a bug in Vim: https://github.com/vim/vim/issues/16514 " +
|
||||
"Unclear what the correct behaviour should be",
|
||||
shouldBeFixed = false
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to whitespace on following blank lines`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|........
|
||||
|${c}${se}
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands to include non-word character`() {
|
||||
doTest(
|
||||
listOf("viw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit ${s}amet${c},${se} consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands to include whitespace after non-word character`() {
|
||||
doTest(
|
||||
listOf("viw", "iw", "iw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit ${s}amet,${c} ${se}consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple words selects includes whitespace between words in count`() {
|
||||
doTest(
|
||||
"v2iw",
|
||||
"${c}Lorem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lorem${c} ${se}ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple words selects includes whitespace between words in count 2`() {
|
||||
doTest(
|
||||
"v3iw",
|
||||
"${c}Lorem ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"${s}Lorem ipsu${c}m${se} dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple words starting in whitespace`() {
|
||||
doTest(
|
||||
"v3iw",
|
||||
"Lorem ${c} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Sed${c} ${se}in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""",
|
||||
description = "Unclear why this fails. IdeaVim seems to treat the new line char as a word"
|
||||
)
|
||||
@Test
|
||||
fun `test select multiple words wraps to next line`() {
|
||||
doTest(
|
||||
"v3iw",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test empty text`() {
|
||||
doTest(
|
||||
|
@ -12,10 +12,575 @@ import com.maddyhome.idea.vim.state.mode.Mode
|
||||
import com.maddyhome.idea.vim.state.mode.SelectionType
|
||||
import org.jetbrains.plugins.ideavim.SkipNeovimReason
|
||||
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
|
||||
import org.jetbrains.plugins.ideavim.VimBehaviorDiffers
|
||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@Suppress("RemoveCurlyBracesFromTemplate", "SpellCheckingInspection")
|
||||
class MotionOuterBigWordActionTest : VimTestCase() {
|
||||
@Test
|
||||
fun `test select outer WORD selects word and following whitespace`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ip${c}sum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD from beginning of word`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ${c}ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD from end of word`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD from inside whitespace selects word and not following whitespace`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ${c} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsu${c}m${se} dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(
|
||||
originalVimAfter = "Lorem ${s}ipsum ${c}${se}dolor sit amet, consectetur adipiscing elit",
|
||||
description = "Text objects are implicitly inclusive. Vim adjusts the caret location for inclusive motions"
|
||||
)
|
||||
@Test
|
||||
fun `test select outer WORD with exclusive selection`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace after next WORD`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing${c} ${se}elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object starting from whitespace expands selection`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${c} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${s} ipsum dolo${c}r${se} sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count expands selection`() {
|
||||
doTest(
|
||||
"v2aW",
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing${c} ${se}elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to end of line`() {
|
||||
doTest(
|
||||
listOf("v2aW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing eli${c}t${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing elit.......${c}.${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace at end of line`() {
|
||||
doTest(
|
||||
listOf("v2aW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing eli${c}t${se}........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing${s} elit
|
||||
|Sed${c} ${se}in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands across new line`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing el${c}it
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing${s} elit
|
||||
| Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands over whitespace following new line`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing el${c}it
|
||||
| Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
| Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to empty line`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|${c}${se}
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to multiple empty lines`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|........
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to cover whitespace on following blank line`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|........
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|........
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|........
|
||||
|${c}
|
||||
|${se}Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to cover whitespace on following blank lines`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands over non-word character`() {
|
||||
doTest(
|
||||
listOf("vaW", "aW"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit ${s}amet, consectetur${c} ${se}adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD selects following whitespace up to punctuation`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ipsu${c}m ...dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum ${c} ${se}...dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD with following non-word characters selects following WORD characters`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit ${s}amet,${c} ${se}consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing${s} eli${c}t${se}
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test select outer WORD at end of line selects preceding whitespace`() {
|
||||
doTest(
|
||||
"vaW",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}eli${c}t${se}
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD with existing left-to-right selection selects rest of word and following whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "l", "aW"),
|
||||
"Lo${c}rem ipsum",
|
||||
"Lo${s}rem ${c} ${se}ipsum",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD with existing left-to-right selection in whitespace selects rest of whitespace and following word`() {
|
||||
doTest(
|
||||
listOf("v", "l", "aW"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem ${s} ipsu${c}m${se} dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD with existing right-to-left selection selects rest of word and preceding whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "h", "aW"),
|
||||
"Lorem ip${c}sum dolor sit amet",
|
||||
"Lorem${s}${c} ips${se}um dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer WORD with existing right-to-left selection in whitespace selects rest of whitespace and preceding word`() {
|
||||
doTest(
|
||||
listOf("v", "h", "aW"),
|
||||
"Lorem ipsum ${c} dolor sit amet",
|
||||
"Lorem ${s}${c}ipsum ${se} dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer WORDs selects following whitespace`() {
|
||||
doTest(
|
||||
"v2aW",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum dolor${c} ${se}sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer WORDs with non-word characters`() {
|
||||
doTest(
|
||||
"v2aW",
|
||||
"Lorem ipsu${c}m -- dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum --${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer WORDs with non-word characters 2`() {
|
||||
doTest(
|
||||
"v2aW",
|
||||
"Lorem ipsu${c}m --dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum --dolor${c} ${se}sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer words starting in whitespace`() {
|
||||
doTest(
|
||||
"v3aW",
|
||||
"Lorem ${c} ipsum --dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsum --dolor si${c}t${se} amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer WORDs crosses end of line`() {
|
||||
doTest(
|
||||
"v2aW",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Sed${c} ${se}in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@TestWithoutNeovim(SkipNeovimReason.UNCLEAR, description = "Wrong caret position, but in real neovim works fine")
|
||||
@Test
|
||||
fun `test on last dot`() {
|
||||
|
@ -0,0 +1,609 @@
|
||||
/*
|
||||
* Copyright 2003-2025 The IdeaVim authors
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE.txt file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
|
||||
package org.jetbrains.plugins.ideavim.action.motion.`object`
|
||||
|
||||
import com.maddyhome.idea.vim.state.mode.Mode
|
||||
import com.maddyhome.idea.vim.state.mode.SelectionType
|
||||
import org.jetbrains.plugins.ideavim.VimBehaviorDiffers
|
||||
import org.jetbrains.plugins.ideavim.VimTestCase
|
||||
import org.junit.jupiter.api.Disabled
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@Suppress("SpellCheckingInspection", "RemoveCurlyBracesFromTemplate")
|
||||
class MotionOuterWordActionTest : VimTestCase() {
|
||||
@Test
|
||||
fun `test select outer word selects word and following whitespace`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ip${c}sum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word from beginning of word`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ${c}ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word from end of word`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word from inside whitespace selects word and not following whitespace`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ${c} ipsum dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsu${c}m${se} dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(
|
||||
originalVimAfter = "Lorem ${s}ipsum ${c}${se}dolor sit amet, consectetur adipiscing elit",
|
||||
description = "Text objects are implicitly inclusive. Vim adjusts the caret location for inclusive motions"
|
||||
)
|
||||
@Test
|
||||
fun `test select outer word with exclusive selection`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace after next word`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing${c} ${se}elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object starting from whitespace expands selection`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${c} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem${s} ipsum dolo${c}r${se} sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test text object with count expands selection`() {
|
||||
doTest(
|
||||
"v2aw",
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing${c} ${se}elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test repeated text object expands selection to end of line`() {
|
||||
doTest(
|
||||
listOf("v2aw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing eli${c}t${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing elit.......${c}.${se}
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands selection to whitespace at end of line`() {
|
||||
doTest(
|
||||
listOf("v2aw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|con${c}sectetur adipiscing elit........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|${s}consectetur adipiscing eli${c}t${se}........
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing${s} elit
|
||||
|Sed${c} ${se}in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands across new line`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing el${c}it
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
|Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing${s} elit
|
||||
| Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands over whitespace following new line`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing el${c}it
|
||||
| Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing ${s}elit
|
||||
| Se${c}d${se} in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to empty line`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|${c}${se}
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to multiple empty lines`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|........
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to cover whitespace on following blank line`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|........
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|........
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem${s} Ipsum
|
||||
|
|
||||
|........
|
||||
|${c}
|
||||
|${se}Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands to cover whitespace on following blank lines`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ip${c}sum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lorem ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
"""
|
||||
|Lorem ${s}Ipsum
|
||||
|
|
||||
|........
|
||||
|
|
||||
|Lore${c}m${se} ipsum dolor sit amet,
|
||||
|consectetur adipiscing elit
|
||||
|Sed in orci mauris.
|
||||
|Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin().dotToSpace(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit${s} amet,${c} ${se}consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test repeated text object expands over non-word character`() {
|
||||
doTest(
|
||||
listOf("vaw", "aw"),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem Ipsum
|
||||
|
|
||||
|Lorem ipsum dolor sit${s} amet${c},${se} consectetur adipiscing elit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word selects following whitespace up to punctuation`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ipsu${c}m ...dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum ${c} ${se}...dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word with following non-word characters selects preceding whitespace`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"Lorem ipsum dolor sit a${c}met, consectetur adipiscing elit",
|
||||
"Lorem ipsum dolor sit${s} ame${c}t${se}, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
// TODO: Fix this bug
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing${s} eli${c}t${se}
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
"""
|
||||
)
|
||||
@Test
|
||||
fun `test select outer word at end of line selects preceding whitespace`() {
|
||||
doTest(
|
||||
"vaw",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}eli${c}t${se}
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word with existing left-to-right selection selects rest of word and following whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "l", "aw"),
|
||||
"Lo${c}rem ipsum",
|
||||
"Lo${s}rem ${c} ${se}ipsum",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word with existing left-to-right selection in whitespace selects rest of whitespace and following word`() {
|
||||
doTest(
|
||||
listOf("v", "l", "aw"),
|
||||
"Lorem ${c} ipsum dolor sit amet",
|
||||
"Lorem ${s} ipsu${c}m${se} dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word with existing right-to-left selection selects rest of word and preceding whitespace`() {
|
||||
doTest(
|
||||
listOf("v", "h", "aw"),
|
||||
"Lorem ip${c}sum dolor sit amet",
|
||||
"Lorem${s}${c} ips${se}um dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select outer word with existing right-to-left selection in whitespace selects rest of whitespace and preceding word`() {
|
||||
doTest(
|
||||
listOf("v", "h", "aw"),
|
||||
"Lorem ipsum ${c} dolor sit amet",
|
||||
"Lorem ${s}${c}ipsum ${se} dolor sit amet",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer words selects following whitespace`() {
|
||||
doTest(
|
||||
"v2aw",
|
||||
"Lorem ipsu${c}m dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum dolor${c} ${se}sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer words with non-word characters`() {
|
||||
doTest(
|
||||
"v2aw",
|
||||
"Lorem ipsu${c}m -- dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem ${s}ipsum --${c} ${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer words with no following whitespace selects preceding whitespace`() {
|
||||
doTest(
|
||||
"v2aw",
|
||||
"Lorem ipsu${c}m --dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsum -${c}-${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@VimBehaviorDiffers(originalVimAfter =
|
||||
"Lorem${s} ipsum --dolor${c} ${se}sit amet, consectetur adipiscing elit",
|
||||
description = "First aw should select whitespace+'ipsum' " +
|
||||
"second should select whitespace+'--' " +
|
||||
"third should select 'dolor' and following whitespace",
|
||||
)
|
||||
@Test
|
||||
fun `test select multiple outer words starting in whitespace`() {
|
||||
doTest(
|
||||
"v3aw",
|
||||
"Lorem ${c} ipsum --dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsum --dolo${c}r${se} sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Disabled("Implementation bug")
|
||||
@Test
|
||||
fun `test select multiple outer words with no following whitespace selects preceding whitespace 2`() {
|
||||
// Implementation bug: caret placed anywhere other than last character would not select preceding whitespace
|
||||
doTest(
|
||||
"v2aw",
|
||||
"Lorem ip${c}sum --dolor sit amet, consectetur adipiscing elit",
|
||||
"Lorem${s} ipsum -${c}-${se}dolor sit amet, consectetur adipiscing elit",
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `test select multiple outer words crosses end of line`() {
|
||||
doTest(
|
||||
"v2aw",
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing e${c}lit
|
||||
|Sed in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
"""
|
||||
|Lorem ipsum dolor sit amet, consectetur adipiscing ${s}elit
|
||||
|Sed${c} ${se}in orci mauris. Cras id tellus in ex imperdiet egestas.
|
||||
""".trimMargin(),
|
||||
Mode.VISUAL(SelectionType.CHARACTER_WISE),
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user