1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-03-05 06:32:51 +01:00

Assert register type with neovim

This commit is contained in:
Alex Plate 2020-12-26 04:39:52 +03:00
parent b24424330c
commit 15d173e628
No known key found for this signature in database
GPG Key ID: 0B97153C8FFEC09F
2 changed files with 29 additions and 6 deletions
src/com/maddyhome/idea/vim/group
test/org/jetbrains/plugins/ideavim

View File

@ -85,10 +85,10 @@ public class RegisterGroup implements PersistentStateComponent<Element> {
public static final char LAST_COMMAND_REGISTER = ':';
public static final char LAST_INSERTED_TEXT_REGISTER = '.';
public static final char SMALL_DELETION_REGISTER = '-';
private static final char BLACK_HOLE_REGISTER = '_';
private static final char ALTERNATE_BUFFER_REGISTER = '#'; // Not supported
private static final char EXPRESSION_BUFFER_REGISTER = '='; // Not supported
private static final char CURRENT_FILENAME_REGISTER = '%'; // Not supported
public static final char BLACK_HOLE_REGISTER = '_';
public static final char ALTERNATE_BUFFER_REGISTER = '#'; // Not supported
public static final char EXPRESSION_BUFFER_REGISTER = '='; // Not supported
public static final char CURRENT_FILENAME_REGISTER = '%'; // Not supported
public static final @NonNls String CLIPBOARD_REGISTERS = "*+";
private static final @NonNls String NUMBERED_REGISTERS = "0123456789";
private static final @NonNls String NAMED_REGISTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

View File

@ -25,6 +25,7 @@ import com.ensarsarajcic.neovim.java.corerpc.client.ProcessRpcConnection
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.editor.LogicalPosition
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.command.SelectionType
import com.maddyhome.idea.vim.common.CharacterPosition
import com.maddyhome.idea.vim.group.RegisterGroup
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
@ -105,15 +106,37 @@ internal object NeovimTesting {
assertEquals(neovimState, ideavimState)
}
private const val nonCheckingRegisters = RegisterGroup.CLIPBOARD_REGISTERS + RegisterGroup.LAST_INSERTED_TEXT_REGISTER
private const val nonCheckingRegisters =
RegisterGroup.CLIPBOARD_REGISTERS +
RegisterGroup.LAST_INSERTED_TEXT_REGISTER +
RegisterGroup.BLACK_HOLE_REGISTER +
RegisterGroup.LAST_SEARCH_REGISTER +
RegisterGroup.ALTERNATE_BUFFER_REGISTER +
RegisterGroup.EXPRESSION_BUFFER_REGISTER +
RegisterGroup.CURRENT_FILENAME_REGISTER
private fun assertRegisters() {
for (register in RegisterGroup.VALID_REGISTERS) {
if (register in nonCheckingRegisters) continue
if (register in VimTestCase.Checks.neoVim.ignoredRegisters) continue
val neovimRegister = neovimApi.callFunction("getreg", listOf(register)).get().toString()
val ideavimRegister = VimPlugin.getRegister().getRegister(register)?.text ?: ""
val vimPluginRegister = VimPlugin.getRegister().getRegister(register)
val ideavimRegister = vimPluginRegister?.text ?: ""
assertEquals("Register '$register'", neovimRegister, ideavimRegister)
if (neovimRegister.isNotEmpty()) {
val neovimRegisterType = neovimApi.callFunction("getregtype", listOf(register)).get().toString()
val expectedType = when (vimPluginRegister?.type) {
SelectionType.CHARACTER_WISE -> "v"
SelectionType.LINE_WISE -> "V"
SelectionType.BLOCK_WISE -> "\u0016"
else -> ""
}
// We take only the first char because neovim returns width for block selection
val neovimChar = neovimRegisterType.getOrNull(0)?.toString() ?: ""
assertEquals("Register '$register'", expectedType, neovimChar)
}
}
}
}