1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2024-11-25 16:42:55 +01:00

Compare commits

..

No commits in common. "e42b4d0ea349348029e85af58dfe80a80470617d" and "86bf723791d538f7cd24c66f83fae57dca3026ea" have entirely different histories.

76 changed files with 1258 additions and 717 deletions

View File

@ -5,8 +5,8 @@ object Constants {
const val EAP_CHANNEL = "eap"
const val DEV_CHANNEL = "Dev"
const val VERSION = "1.11.1"
const val DEV_VERSION = "1.12.0"
const val VERSION = "1.10.3"
const val DEV_VERSION = "1.11.0"
const val GITHUB_TESTS = "LATEST-EAP-SNAPSHOT"
const val NVIM_TESTS = "LATEST-EAP-SNAPSHOT"

View File

@ -23,7 +23,7 @@ It is important to distinguish EAP from traditional pre-release software.
Please note that the quality of EAP versions may at times be way below even
usual beta standards.
## 1.11.0, 2022-08-09
## To Be Released
### Features:
* Add `gcu` command for Commentary plugin
@ -53,14 +53,12 @@ usual beta standards.
* [VIM-2595](https://youtrack.jetbrains.com/issue/VIM-2595) Support plugins in macro execution
* [VIM-2671](https://youtrack.jetbrains.com/issue/VIM-2671) Fix using plugins from mappings
* [VIM-2675](https://youtrack.jetbrains.com/issue/VIM-2675) Fix numbering register in visual mode
* [VIM-696](https://youtrack.jetbrains.com/issue/VIM-696/vim-selection-issue-after-undo) Fix selection after undo
* [VIM-744](https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier) Add count to undo/redo
* [VIM-1862](https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history) Fix command history
* [VIM-2227](https://youtrack.jetbrains.com/issue/VIM-2227) Wrong behavior when deleting / changing surround with invalid character
* [VIM-2691](https://youtrack.jetbrains.com/issue/VIM-2691) Save file on :w
* [VIM-2710](https://youtrack.jetbrains.com/issue/VIM-2710) Show options value on `set opt`
* [VIM-913](https://youtrack.jetbrains.com/issue/VIM-913) Partially fix the issue with macros and autocompletion
* [VIM-2723](https://youtrack.jetbrains.com/issue/VIM-2723) Move focus to editor after :q
* [VIM-2728](https://youtrack.jetbrains.com/issue/VIM-2728) Give access to global variables
### Merged PRs:
* [468](https://github.com/JetBrains/ideavim/pull/468) by [Thomas Schouten](https://github.com/PHPirates): Implement UserDataHolder for EditorDataContext
@ -72,8 +70,6 @@ usual beta standards.
* [519](https://github.com/JetBrains/ideavim/pull/519) by [chylex](https://github.com/chylex): Fix(VIM-2227): Wrong behavior when deleting / changing surround with invalid character
* [525](https://github.com/JetBrains/ideavim/pull/525) by [Matt Ellis](https://github.com/citizenmatt): Improve handling of fractional width fonts
* [526](https://github.com/JetBrains/ideavim/pull/526) by [Alex Pláte](https://github.com/AlexPl292): Create gradle.properties
* [528](https://github.com/JetBrains/ideavim/pull/528) by [chylex](https://github.com/chylex): Implement partial code completion support in macros
* [531](https://github.com/JetBrains/ideavim/pull/531) by [Matt Ellis](https://github.com/citizenmatt): Consolidate doTest methods
## 1.10.0, 2022-02-17

View File

@ -32,7 +32,7 @@ OK, ready to do some coding?
Yoo hoo! Youre all set to begin contributing.
We've prepared some useful configurations for you:
![Prepared configurations light](assets/contributing/configs-light.png#gh-light-mode-only)![Prepared configurations dark](assets/contributing/configs-dark.png#gh-dark-mode-only)
![Prepared configurations](assets/contributing/configurations.png)
And here are useful gradle commands:

View File

@ -226,10 +226,7 @@ Ex commands or via `:map` command mappings:
<details>
<summary><strong>"Track action Ids" Details</strong> (click to see)</summary>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/readme/track_action_dark.gif">
<img src="assets/readme/track_action_light.gif" alt="track action ids"/>
</picture>
<img src="assets/readme/track_action_id.gif" alt="track action ids"/>
</details>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 981 KiB

View File

@ -15,9 +15,7 @@ buildscript {
classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
classpath("org.eclipse.jgit:org.eclipse.jgit:6.1.0.202203080745-r")
classpath("org.kohsuke:github-api:1.305")
// This comes from the changelog plugin
// classpath("org.jetbrains:markdown:0.3.1")
classpath("org.jetbrains:markdown:0.3.1")
}
}
@ -26,7 +24,7 @@ plugins {
java
kotlin("jvm") version "1.6.21"
id("org.jetbrains.intellij") version "1.8.0"
id("org.jetbrains.intellij") version "1.7.0-SNAPSHOT"
id("org.jetbrains.changelog") version "1.3.1"
// ktlint linter - read more: https://github.com/JLLeitschuh/ktlint-gradle
@ -275,7 +273,7 @@ changelog {
itemPrefix.set("*")
path.set("${project.projectDir}/CHANGES.md")
unreleasedTerm.set("To Be Released")
headerParserRegex.set("(\\d\\.\\d+(.\\d+)?)".toRegex())
headerParserRegex.set("\\d\\.\\d+(.\\d+)?".toRegex())
// header = { "${project.version}" }
// version = "0.60"
}
@ -328,8 +326,6 @@ tasks.register("slackNotification") {
println("Response code: $postRc")
if (postRc == 200) {
println(inputStream.bufferedReader().use { it.readText() })
} else {
println(errorStream.bufferedReader().use { it.readText() })
}
}
}

View File

@ -18,14 +18,8 @@
package com.maddyhome.idea.vim
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectManagerListener
import com.intellij.openapi.startup.StartupActivity
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.helper.EditorHelper
import com.maddyhome.idea.vim.helper.localEditors
import com.maddyhome.idea.vim.options.OptionScope
/**
* @author Alex Plate
@ -42,19 +36,3 @@ class PluginStartup : StartupActivity.DumbAware/*, LightEditCompatible*/ {
VimPlugin.getInstance().initialize()
}
}
// This is a temporal workaround for VIM-2487
class PyNotebooksCloseWorkaround : ProjectManagerListener {
override fun projectClosingBeforeSave(project: Project) {
val close = injector.optionService.getOptionValue(OptionScope.GLOBAL, "closenotebooks").asBoolean()
if (close) {
localEditors().forEach { editor ->
val virtualFile = EditorHelper.getVirtualFile(editor)
if (virtualFile?.extension == "ipynb") {
val fileEditorManager = FileEditorManagerEx.getInstanceEx(project)
fileEditorManager.closeFile(virtualFile)
}
}
}
}
}

View File

@ -19,7 +19,6 @@
package com.maddyhome.idea.vim.action
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.project.DumbAwareToggleAction
import com.maddyhome.idea.vim.VimPlugin
@ -43,6 +42,4 @@ class VimPluginToggleAction : DumbAwareToggleAction()/*, LightEditCompatible*/ {
if (VimPlugin.isEnabled()) MessageHelper.message("action.VimPluginToggle.enabled") else MessageHelper.message("action.VimPluginToggle.enable")
} else MessageHelper.message("action.VimPluginToggle.text")
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}

View File

@ -20,7 +20,6 @@ package com.maddyhome.idea.vim.action
import com.google.common.collect.ImmutableSet
import com.intellij.codeInsight.lookup.LookupManager
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.EmptyAction
@ -96,10 +95,6 @@ class VimShortcutKeyAction : AnAction(), DumbAware/*, LightEditCompatible*/ {
}
}
// There is a chance that we can use BGT, but we call for isCell inside the update.
// Not sure if can can use BGT with this call. Let's use EDT for now.
override fun getActionUpdateThread() = ActionUpdateThread.EDT
override fun update(e: AnActionEvent) {
val start = if (traceTime) System.currentTimeMillis() else null
e.presentation.isEnabled = isEnabled(e)

View File

@ -21,7 +21,6 @@ package com.maddyhome.idea.vim.extension.nerdtree
import com.intellij.ide.projectView.ProjectView
import com.intellij.ide.projectView.impl.ProjectViewImpl
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.application.ApplicationManager
@ -173,7 +172,7 @@ class NerdTree : VimExtension {
}
class ProjectViewListener(private val project: Project) : ToolWindowManagerListener {
override fun toolWindowShown(toolWindow: ToolWindow) {
override fun toolWindowShown(id: String, toolWindow: ToolWindow) {
if (ToolWindowId.PROJECT_VIEW != toolWindow.id) return
val dispatcher = NerdDispatcher.getInstance(project)
@ -243,8 +242,6 @@ class NerdTree : VimExtension {
e.presentation.isEnabled = !speedSearchIsHere(project)
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
private fun speedSearchIsHere(project: Project): Boolean {
val component = ProjectView.getInstance(project).currentProjectViewPane.tree ?: return false
return SpeedSearchSupply.getSupply(component) != null
@ -563,3 +560,7 @@ class NerdTree : VimExtension {
}
}
}
private fun <T> Node<T>.addLeafs(keys: String, actionHolder: T) {
addLeafs(injector.parser.parseKeys(keys), actionHolder)
}

View File

@ -20,7 +20,6 @@ package com.maddyhome.idea.vim.group;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@ -28,7 +27,6 @@ import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.fileEditor.*;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.impl.EditorWindow;
import com.intellij.openapi.fileEditor.impl.EditorsSplitters;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.project.Project;
@ -161,10 +159,6 @@ public class FileGroup extends VimFileBase {
if (virtualFile != null && window != null) {
window.closeFile(virtualFile);
}
if (!ApplicationManager.getApplication().isUnitTestMode()) {
// This thing doesn't have an implementation in test mode
EditorsSplitters.focusDefaultComponentInSplittersIfPresent(project);
}
}
}
@ -181,10 +175,6 @@ public class FileGroup extends VimFileBase {
if (number >= 0 && number < editors.length) {
fileEditorManager.closeFile(editors[number], window);
}
if (!ApplicationManager.getApplication().isUnitTestMode()) {
// This thing doesn't have an implementation in test mode
EditorsSplitters.focusDefaultComponentInSplittersIfPresent(project);
}
}
/**

View File

@ -27,7 +27,6 @@ import com.intellij.notification.Notification
import com.intellij.notification.NotificationGroup
import com.intellij.notification.NotificationGroupManager
import com.intellij.notification.NotificationType
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.KeyboardShortcut
@ -222,8 +221,6 @@ class NotificationService(private val project: Project?) {
override fun update(e: AnActionEvent) {
e.presentation.isEnabled = id != null
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}
class StopTracking : DumbAwareAction("Stop Tracking") {
@ -260,8 +257,6 @@ class NotificationService(private val project: Project?) {
val actionText = if (VimRcService.findIdeaVimRc() != null) "Open ~/.ideavimrc" else "Create ~/.ideavimrc"
e.presentation.text = actionText
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}
@Suppress("DialogTitleCapitalization")

View File

@ -56,6 +56,7 @@ class UndoRedoHelper : UndoRedoBase() {
SelectionVimListenerSuppressor.lock().use { undoManager.undo(fileEditor) }
} else {
performUntilFileChanges(editor, { undoManager.isUndoAvailable(fileEditor) }, { undoManager.undo(fileEditor) })
}
editor?.carets()?.forEach {
val ijCaret = it.ij
@ -68,8 +69,6 @@ class UndoRedoHelper : UndoRedoBase() {
}
}
}
}
return true
}
return false
@ -86,10 +85,10 @@ class UndoRedoHelper : UndoRedoBase() {
SelectionVimListenerSuppressor.lock().use { undoManager.redo(fileEditor) }
} else {
performUntilFileChanges(editor, { undoManager.isRedoAvailable(fileEditor) }, { undoManager.redo(fileEditor) })
}
CommandProcessor.getInstance().runUndoTransparentAction {
editor?.carets()?.forEach { it.ij.removeSelection() }
}
}
return true
}
return false

View File

@ -19,10 +19,8 @@
package com.maddyhome.idea.vim.listener
import com.intellij.codeInsight.lookup.Lookup
import com.intellij.codeInsight.lookup.LookupManager
import com.intellij.codeInsight.lookup.LookupManagerListener
import com.intellij.codeInsight.lookup.impl.LookupImpl
import com.intellij.codeInsight.lookup.impl.actions.ChooseItemAction
import com.intellij.codeInsight.template.Template
import com.intellij.codeInsight.template.TemplateEditingAdapter
import com.intellij.codeInsight.template.TemplateManagerListener
@ -37,10 +35,10 @@ import com.intellij.openapi.actionSystem.ex.AnActionListener
import com.intellij.openapi.actionSystem.impl.ProxyShortcutSet
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.DumbAwareToggleAction
import com.intellij.openapi.util.TextRange
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.group.NotificationService
import com.maddyhome.idea.vim.helper.EditorDataContext
import com.maddyhome.idea.vim.helper.inNormalMode
import com.maddyhome.idea.vim.helper.isIdeaVimDisabledHere
@ -51,8 +49,6 @@ import com.maddyhome.idea.vim.options.OptionScope
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimInt
import com.maddyhome.idea.vim.vimscript.model.options.helpers.IdeaRefactorModeHelper
import org.jetbrains.annotations.NonNls
import java.awt.event.KeyEvent
import javax.swing.KeyStroke
/**
* @author Alex Plate
@ -64,8 +60,6 @@ object IdeaSpecifics {
private val surrounderAction =
"com.intellij.codeInsight.generation.surroundWith.SurroundWithHandler\$InvokeSurrounderAction"
private var editor: Editor? = null
private var completionPrevDocumentLength: Int? = null
private var completionPrevDocumentOffset: Int? = null
override fun beforeActionPerformed(action: AnAction, event: AnActionEvent) {
if (!VimPlugin.isEnabled()) return
@ -74,52 +68,19 @@ object IdeaSpecifics {
editor = hostEditor
}
//region Track action id
if (VimPlugin.getOptionService().isSet(OptionScope.GLOBAL, OptionConstants.trackactionidsName)) {
if (action !is NotificationService.ActionIdNotifier.CopyActionId && action !is NotificationService.ActionIdNotifier.StopTracking) {
val id: String? = ActionManager.getInstance().getId(action) ?: (action.shortcutSet as? ProxyShortcutSet)?.actionId
VimPlugin.getNotifications(event.dataContext.getData(CommonDataKeys.PROJECT)).notifyActionId(id)
}
if (hostEditor != null && action is ChooseItemAction && hostEditor.vimStateMachine?.isRecording == true) {
val lookup = LookupManager.getActiveLookup(hostEditor)
if (lookup != null) {
val charsToRemove = hostEditor.caretModel.primaryCaret.offset - lookup.lookupStart
val register = VimPlugin.getRegister()
val backSpace = KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)
repeat(charsToRemove) {
register.recordKeyStroke(backSpace)
}
completionPrevDocumentLength = hostEditor.document.textLength - charsToRemove
completionPrevDocumentOffset = lookup.lookupStart
}
}
//endregion
}
override fun afterActionPerformed(action: AnAction, event: AnActionEvent, result: AnActionResult) {
if (!VimPlugin.isEnabled()) return
val editor = editor
if (editor != null && action is ChooseItemAction && editor.vimStateMachine?.isRecording == true) {
val prevDocumentLength = completionPrevDocumentLength
val prevDocumentOffset = completionPrevDocumentOffset
if (prevDocumentLength != null && prevDocumentOffset != null) {
val register = VimPlugin.getRegister()
val addedTextLength = editor.document.textLength - prevDocumentLength
val caretShift = addedTextLength - (editor.caretModel.primaryCaret.offset - prevDocumentOffset)
val leftArrow = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)
register.recordText(editor.document.getText(TextRange(prevDocumentOffset, prevDocumentOffset + addedTextLength)))
repeat(caretShift.coerceAtLeast(0)) {
register.recordKeyStroke(leftArrow)
}
}
this.completionPrevDocumentLength = null
this.completionPrevDocumentOffset = null
}
//region Enter insert mode after surround with if
if (surrounderAction == action.javaClass.name && surrounderItems.any {
action.templatePresentation.text.endsWith(
@ -138,7 +99,7 @@ object IdeaSpecifics {
}
//endregion
this.editor = null
editor = null
}
}

View File

@ -20,7 +20,6 @@ package com.maddyhome.idea.vim.ui
import com.intellij.icons.AllIcons
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.openapi.actionSystem.PlatformDataKeys
@ -145,8 +144,6 @@ class ReloadVimRc : DumbAwareAction() {
e.presentation.isEnabledAndVisible = true
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
override fun actionPerformed(e: AnActionEvent) {
val editor = e.getData(PlatformDataKeys.EDITOR) ?: return
FileDocumentManager.getInstance().saveDocumentAsIs(editor.document)

View File

@ -23,7 +23,6 @@ import com.intellij.ide.BrowserUtil
import com.intellij.ide.DataManager
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionPlaces
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.DefaultActionGroup
@ -159,8 +158,6 @@ class VimActions : DumbAwareAction() {
val project = e.project
e.presentation.isEnabledAndVisible = project != null && !project.isDisposed
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}
private object VimActionsPopup {
@ -267,6 +264,4 @@ internal object JoinEap : DumbAwareAction()/*, LightEditCompatible*/ {
e.presentation.text = MessageHelper.message("action.subscribe.to.eap.text")
}
}
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}

View File

@ -18,7 +18,6 @@
package com.maddyhome.idea.vim.ui.ex
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.KeyboardShortcut
import com.intellij.openapi.project.DumbAwareAction
@ -70,7 +69,4 @@ class ExShortcutKeyAction(private val exEntryPanel: ExEntryPanel) : DumbAwareAct
registerCustomShortcutSet({ shortcuts }, exEntryPanel)
}
// / Or EDT? We access ExEntryPanel actually. But seems to work with BGT
override fun getActionUpdateThread() = ActionUpdateThread.BGT
}

View File

@ -2,110 +2,7 @@
<name>IdeaVim</name>
<id>IdeaVIM</id>
<change-notes><![CDATA[
<h3>Features:</h3>
<ul>
<li>Add <code>gcu</code> command for Commentary plugin</li>
<li>Add <code>:Commentary</code> command, which works great for commands such as <code>:%g/fun/Commentary</code></li>
<li>Support <code>gc</code> commentary text objects. E.g. <code>dgc</code>: delete commented text.</li>
<li>Support <code>redo-register feature</code> | <a
href="https://youtrack.jetbrains.com/issue/VIM-2643/Dot-operator-doesn-t-increment-number-register-after-pasting-fro">VIM-2643</a>
| <a href="http://vimdoc.sourceforge.net/htmldoc/undo.html#redo-register">viminfo</a></li>
</ul>
<h3>Changes:</h3>
<ul>
<li>Uses the same mappings as Commentary, so custom bindings for the Vim plugin will work with IdeaVim, too.
E.g. <code>&lt;Plug&gt;Commentary</code> instead of <code>&lt;Plug&gt;(CommentMotion)</code>. Old mappings are
maintained for compatibility.
</li>
<li>If you open <code>~/.ideavimrc</code> in IDE, remove a mapping, and reload the config using the reload button,
the mapping will actually be unmapped.
</li>
<li>New vim (and IdeaVim) behaviour: <code>ci(</code>&amp; friends searches for the brackets in the line.</li>
</ul>
<h3>Fixes:</h3>
<ul>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2587">VIM-2587</a> Use ctrl-6 as ctrl-^</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2590">VIM-2590</a> Fix caret shape in PyCharm</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2553">VIM-2553</a> Substitute consecutive matches</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-1687">VIM-1687</a> Support count for <code>gcc</code></li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2381">VIM-2381</a> Fall back to line comment if block comment is
not available
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2589">VIM-2589</a> Add <code>gc</code> text object</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2604">VIM-2604</a> Update action execution rules</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2654">VIM-2654</a> Add support for <code>return</code> without
expression
</li>
<li><a
href="https://youtrack.jetbrains.com/issue/VIM-2630/Please-fix-warning-Shall-not-be-called-on-a-template-presentatio">VIM-2630</a>
Fix IDE freeze
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2661/Spamming-does-not-work">VIM-2661</a> Fix repeating the
<code>@@</code> command
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2668/tabm-or-tabm-with-no-number-does-not-match-vim-behavior">VIM-2668</a>
Fix omitted numbers in <code>tabm</code> command
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2595">VIM-2595</a> Support plugins in macro execution</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2671">VIM-2671</a> Fix using plugins from mappings</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2675">VIM-2675</a> Fix numbering register in visual mode</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-744/Use-undoredo-with-count-modifier">VIM-744</a> Add count to
undo/redo
</li>
<li><a
href="https://youtrack.jetbrains.com/issue/VIM-1862/Ex-commands-executed-in-keymaps-and-macros-are-added-to-the-command-history">VIM-1862</a>
Fix command history
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2227">VIM-2227</a> Wrong behavior when deleting / changing
surround with invalid character
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2691">VIM-2691</a> Save file on :w</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2710">VIM-2710</a> Show options value on <code>set opt</code>
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-913">VIM-913</a> Partially fix the issue with macros and
autocompletion
</li>
<li><a href="https://youtrack.jetbrains.com/issue/VIM-2723">VIM-2723</a> Move focus to editor after :q</li>
</ul>
<h3>Merged PRs:</h3>
<ul>
<li><a href="https://github.com/JetBrains/ideavim/pull/468">468</a> by <a href="https://github.com/PHPirates">Thomas
Schouten</a>: Implement UserDataHolder for EditorDataContext
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/483">483</a> by <a href="https://github.com/Vvalter">Simon
Rainer</a>: Fix(VIM-2553): Substitute consecutive matches
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/488">488</a> by <a href="https://github.com/myzeiri">Martin
Yzeiri</a>: Add Matchit support for the C family of languages
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/493">493</a> by <a href="https://github.com/citizenmatt">Matt
Ellis</a>: Improvements to Commentary extension
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/494">494</a> by <a href="https://github.com/citizenmatt">Matt
Ellis</a>: Cleanup pre-212 CaretVisualAttributes compatibility code
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/504">504</a> by <a href="https://github.com/citizenmatt">Matt
Ellis</a>: Minor bug fixes
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/519">519</a> by <a href="https://github.com/chylex">chylex</a>:
Fix(VIM-2227): Wrong behavior when deleting / changing surround with invalid character
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/525">525</a> by <a href="https://github.com/citizenmatt">Matt
Ellis</a>: Improve handling of fractional width fonts
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/526">526</a> by <a href="https://github.com/AlexPl292">Alex
Pláte</a>: Create gradle.properties
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/528">528</a> by <a href="https://github.com/chylex">chylex</a>:
Implement partial code completion support in macros
</li>
<li><a href="https://github.com/JetBrains/ideavim/pull/531">531</a> by <a href="https://github.com/citizenmatt">Matt
Ellis</a>: Consolidate doTest methods
</li>
</ul>
<a href="https://github.com/JetBrains/ideavim/blob/master/CHANGES.md">Changes</a>
]]>
</change-notes>
<description><![CDATA[
@ -139,11 +36,6 @@
<depends optional="true" config-file="ides/ideavim-withAppCode.xml">com.intellij.modules.appcode</depends>
<depends optional="true" config-file="ideavim-withAceJump.xml">AceJump</depends>
<applicationListeners>
<listener class="com.maddyhome.idea.vim.PyNotebooksCloseWorkaround"
topic="com.intellij.openapi.project.ProjectManagerListener"/>
</applicationListeners>
<application-components>
<component>
<implementation-class>com.maddyhome.idea.vim.DynamicLoaderStopper</implementation-class>

View File

@ -53,8 +53,6 @@ internal object NeovimTesting {
private lateinit var escapeCommand: String
private lateinit var ctrlcCommand: String
private var singleCaret = true
fun setUp(test: VimTestCase) {
if (!neovimEnabled(test)) return
val nvimPath = System.getenv("ideavim.nvim.path") ?: "nvim"
@ -92,35 +90,25 @@ internal object NeovimTesting {
}
}
private fun neovimEnabled(test: VimTestCase, editor: Editor? = null): Boolean {
private fun neovimEnabled(test: VimTestCase): Boolean {
val method = test.javaClass.getMethod(test.name)
val noBehaviourDiffers = !method.isAnnotationPresent(VimBehaviorDiffers::class.java)
val noTestingWithoutNeovim = !method.isAnnotationPresent(TestWithoutNeovim::class.java)
val neovimTestingEnabled = System.getProperty("ideavim.nvim.test", "false")!!.toBoolean()
val notParserTest = "org.jetbrains.plugins.ideavim.ex.parser" !in test.javaClass.packageName
val notScriptImplementation = "org.jetbrains.plugins.ideavim.ex.implementation" !in test.javaClass.packageName
val notExtension = "org.jetbrains.plugins.ideavim.extension" !in test.javaClass.packageName
if (singleCaret) {
singleCaret = editor == null || editor.caretModel.caretCount == 1
}
return noBehaviourDiffers &&
noTestingWithoutNeovim &&
neovimTestingEnabled &&
notParserTest &&
notScriptImplementation &&
notExtension &&
singleCaret
return noBehaviourDiffers && noTestingWithoutNeovim && neovimTestingEnabled && notParserTest && notScriptImplementation
}
fun setupEditor(editor: Editor, test: VimTestCase) {
if (!neovimEnabled(test, editor)) return
if (!neovimEnabled(test)) return
neovimApi.currentBuffer.get().setLines(0, -1, false, editor.document.text.split("\n")).get()
val charPosition = CharacterPosition.fromOffset(editor, editor.caretModel.offset)
neovimApi.currentWindow.get().setCursor(VimCoords(charPosition.line + 1, charPosition.column)).get()
}
fun typeCommand(keys: String, test: VimTestCase, editor: Editor) {
if (!neovimEnabled(test, editor)) return
fun typeCommand(keys: String, test: VimTestCase) {
if (!neovimEnabled(test)) return
when {
keys.equals("<esc>", ignoreCase = true) -> neovimApi.input(escapeCommand).get()
keys.equals("<C-C>", ignoreCase = true) -> neovimApi.input(ctrlcCommand).get()
@ -132,7 +120,7 @@ internal object NeovimTesting {
}
fun assertState(editor: Editor, test: VimTestCase) {
if (!neovimEnabled(test, editor)) return
if (!neovimEnabled(test)) return
if (currentTestName != "") {
currentTestName = ""
neovimTestsCounter++
@ -152,7 +140,7 @@ internal object NeovimTesting {
private fun getText(): String = neovimApi.currentBuffer.get().getLines(0, -1, false).get().joinToString("\n")
fun assertCaret(editor: Editor, test: VimTestCase) {
if (!neovimEnabled(test, editor)) return
if (!neovimEnabled(test)) return
if (currentTestName != "") {
currentTestName = ""
neovimTestsCounter++
@ -212,6 +200,7 @@ annotation class TestWithoutNeovim(val reason: SkipNeovimReason, val description
enum class SkipNeovimReason {
PLUGIN,
MULTICARET,
@Suppress("unused")
INLAYS,
@ -232,6 +221,7 @@ enum class SkipNeovimReason {
EDITOR_MODIFICATION,
CMD,
IDEAVIMRC,
ACTION_COMMAND,
PLUG,
FOLDING,

View File

@ -20,6 +20,7 @@ package org.jetbrains.plugins.ideavim
import com.maddyhome.idea.vim.RegisterActions.VIM_ACTIONS_EP
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.MappingMode
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.handler.ActionBeanClass
@ -41,9 +42,10 @@ class RegisterActionsTest : VimTestCase() {
setupChecks {
caretShape = false
}
val keys = injector.parser.parseKeys("jklwB") // just random keys
val before = "I ${c}found it in a legendary land"
val after = "I jklwB${c}found it in a legendary land"
doTest("jklwB", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
}
} finally {
@ -53,9 +55,10 @@ class RegisterActionsTest : VimTestCase() {
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test turn plugin off and on`() {
val keys = injector.parser.parseKeys("l")
val before = "I ${c}found it in a legendary land"
val after = "I f${c}ound it in a legendary land"
doTest("l", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
VimPlugin.setEnabled(true)
}
@ -63,9 +66,10 @@ class RegisterActionsTest : VimTestCase() {
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test enable twice`() {
val keys = injector.parser.parseKeys("l")
val before = "I ${c}found it in a legendary land"
val after = "I f${c}ound it in a legendary land"
doTest("l", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
VimPlugin.setEnabled(true)
VimPlugin.setEnabled(true)
@ -74,10 +78,11 @@ class RegisterActionsTest : VimTestCase() {
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test unregister extension`() {
val keys = injector.parser.parseKeys("l")
val before = "I ${c}found it in a legendary land"
val after = "I f${c}ound it in a legendary land"
var motionRightAction: ActionBeanClass? = null
doTest("l", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
motionRightAction = VIM_ACTIONS_EP.extensions().filter { it.actionId == "VimPreviousTabAction" }.findFirst().get()
assertNotNull(getCommandNode())

View File

@ -229,7 +229,6 @@ abstract class VimTestCase : UsefulTestCase() {
private fun configureByText(fileName: String, content: String): Editor {
@Suppress("IdeaVimAssertState")
myFixture.configureByText(fileName, content)
NeovimTesting.setupEditor(myFixture.editor, this)
setEditorVisibleSize(screenWidth, screenHeight)
return myFixture.editor
}
@ -237,7 +236,6 @@ abstract class VimTestCase : UsefulTestCase() {
protected fun configureByFileName(fileName: String): Editor {
@Suppress("IdeaVimAssertState")
myFixture.configureByText(fileName, "\n")
NeovimTesting.setupEditor(myFixture.editor, this)
setEditorVisibleSize(screenWidth, screenHeight)
return myFixture.editor
}
@ -300,12 +298,8 @@ abstract class VimTestCase : UsefulTestCase() {
}
protected fun typeText(keys: List<KeyStroke?>): Editor {
NeovimTesting.typeCommand(keys.filterNotNull().joinToString(separator = "") { injector.parser.toKeyNotation(it) }, this)
val editor = myFixture.editor
NeovimTesting.typeCommand(
keys.filterNotNull().joinToString(separator = "") { injector.parser.toKeyNotation(it) },
this,
editor
)
val project = myFixture.project
when (Checks.keyHandler) {
Checks.KeyHandlerMethod.DIRECT_TO_VIM -> typeText(keys, editor, project)
@ -334,12 +328,6 @@ abstract class VimTestCase : UsefulTestCase() {
NeovimTesting.assertState(myFixture.editor, this)
}
protected fun assertState(modeAfter: VimStateMachine.Mode, subModeAfter: SubMode) {
assertMode(modeAfter)
assertSubMode(subModeAfter)
assertCaretsVisualAttributes()
}
fun assertPosition(line: Int, column: Int) {
val carets = myFixture.editor.caretModel.allCarets
Assert.assertEquals("Wrong amount of carets", 1, carets.size)
@ -471,7 +459,7 @@ abstract class VimTestCase : UsefulTestCase() {
val actual = getInstance(myFixture.editor).text
Assert.assertNotNull("No Ex output", actual)
Assert.assertEquals(expected, actual)
NeovimTesting.typeCommand("<esc>", this, myFixture.editor)
NeovimTesting.typeCommand("<esc>", this)
}
fun assertNoExOutput() {
@ -513,46 +501,95 @@ abstract class VimTestCase : UsefulTestCase() {
}
}
@JvmOverloads
fun doTest(
keys: List<String>,
before: String,
after: String,
modeAfter: VimStateMachine.Mode = VimStateMachine.Mode.COMMAND,
subModeAfter: SubMode = SubMode.NONE,
fileType: FileType? = null,
fileName: String? = null,
afterEditorInitialized: ((Editor) -> Unit)? = null,
) {
doTest(keys.joinToString(separator = ""), before, after, modeAfter, subModeAfter, fileType, fileName, afterEditorInitialized)
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, SubMode.NONE)
}
fun doTest(
keys: List<String>,
before: String,
after: String,
modeAfter: VimStateMachine.Mode,
subModeAfter: SubMode,
) {
doTest(keys.joinToString(separator = ""), before, after, modeAfter, subModeAfter)
}
@JvmOverloads
fun doTest(
keys: String,
before: String,
after: String,
modeAfter: VimStateMachine.Mode = VimStateMachine.Mode.COMMAND,
subModeAfter: SubMode = SubMode.NONE,
fileType: FileType? = null,
fileName: String? = null,
afterEditorInitialized: ((Editor) -> Unit)? = null,
modeAfter: VimStateMachine.Mode,
subModeAfter: SubMode,
) {
if (fileName != null) {
configureByText(fileName, before)
} else if (fileType != null) {
configureByText(fileType, before)
} else {
configureByText(before)
}
afterEditorInitialized?.invoke(myFixture.editor)
performTest(keys, after, modeAfter, subModeAfter)
NeovimTesting.assertState(myFixture.editor, this)
}
fun doTest(
keys: String,
before: String,
after: String,
modeAfter: VimStateMachine.Mode,
subModeAfter: SubMode,
fileType: FileType,
) {
configureByText(fileType, before)
NeovimTesting.setupEditor(myFixture.editor, this)
NeovimTesting.typeCommand(keys, this)
performTest(keys, after, modeAfter, subModeAfter)
NeovimTesting.assertState(myFixture.editor, this)
}
fun doTest(
keys: String,
before: String,
after: String,
modeAfter: VimStateMachine.Mode,
subModeAfter: SubMode,
fileName: String,
) {
configureByText(fileName, before)
NeovimTesting.setupEditor(myFixture.editor, this)
NeovimTesting.typeCommand(keys, this)
performTest(keys, after, modeAfter, subModeAfter)
NeovimTesting.assertState(myFixture.editor, this)
}
protected fun performTest(keys: String, after: String, modeAfter: VimStateMachine.Mode, subModeAfter: SubMode) {
typeText(injector.parser.parseKeys(keys))
PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue()
assertState(after)
@Suppress("IdeaVimAssertState")
myFixture.checkResult(after)
assertState(modeAfter, subModeAfter)
}
fun doTest(
keys: List<KeyStroke>,
before: String,
after: String?,
modeAfter: VimStateMachine.Mode,
subModeAfter: SubMode,
afterEditorInitialized: (Editor) -> Unit,
) {
configureByText(before)
afterEditorInitialized(myFixture.editor)
typeText(keys)
@Suppress("IdeaVimAssertState")
myFixture.checkResult(after!!)
assertState(modeAfter, subModeAfter)
}
@ -561,6 +598,12 @@ abstract class VimTestCase : UsefulTestCase() {
NeovimTesting.setRegister(register, keys, this)
}
protected fun assertState(modeAfter: VimStateMachine.Mode, subModeAfter: SubMode) {
assertMode(modeAfter)
assertSubMode(subModeAfter)
assertCaretsVisualAttributes()
}
protected val fileManager: FileEditorManagerEx
get() = FileEditorManagerEx.getInstanceEx(myFixture.project)

View File

@ -131,6 +131,7 @@ class RepeatChangeActionTest : VimTestCase() {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test multicaret`() {
val keys = listOf("v2erXj^", ".")
val before = """

View File

@ -41,8 +41,7 @@ class UndoActionTest : VimTestCase() {
assertFalse(editor.caretModel.primaryCaret.hasSelection())
}
// Not yet supported
fun `undo after selection`() {
fun `test undo after selection`() {
val keys = listOf("v3eld", "u")
val before = """
A Discovery

View File

@ -23,6 +23,8 @@ package org.jetbrains.plugins.ideavim.action.change.change
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class ChangeVisualActionTest : VimTestCase() {
@ -153,6 +155,7 @@ class ChangeVisualActionTest : VimTestCase() {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test change visual action`() {
typeTextInFile(
injector.parser.parseKeys("v2lc" + "aaa" + "<ESC>"),

View File

@ -1,46 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2022 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.jetbrains.plugins.ideavim.action.change.change
//class InsertRegisterTest : VimTestCase() {
// todo test cursor position VIM-2732
// fun `test multiline insert from expression register`() {
// val keys = "VjyGo<C-r>=@\"<CR>"
// val before = """
// A Discovery
//
// ${c}I found it in a legendary land
// all rocks and lavender and tufted grass,
// where it was settled on some sodden sand
// hard by the torrent of a mountain pass.
// """.trimIndent()
// val after = """
// A Discovery
//
// I found it in a legendary land
// all rocks and lavender and tufted grass,
// where it was settled on some sodden sand
// hard by the torrent of a mountain pass.
// I found it in a legendary land
// all rocks and lavender and tufted grass,
// ${c}
// """.trimIndent()
// doTest(keys, before, after, VimStateMachine.Mode.INSERT, VimStateMachine.SubMode.NONE)
// }
//}

View File

@ -20,6 +20,8 @@ package org.jetbrains.plugins.ideavim.action.change.change.number
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
/**
@ -112,6 +114,7 @@ class ChangeVisualNumberDecActionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test change number dec visual action`() {
typeTextInFile(
injector.parser.parseKeys("Vj<C-X>"),

View File

@ -20,6 +20,8 @@ package org.jetbrains.plugins.ideavim.action.change.change.number
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
/**
@ -112,6 +114,7 @@ class ChangeVisualNumberIncActionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test change number inc visual multiple cursor`() {
typeTextInFile(
injector.parser.parseKeys("Vj<C-A>"),

View File

@ -92,6 +92,7 @@ class DeleteMotionActionTest : VimTestCase() {
assertEquals(" expression two\n", savedText)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test delete line action multicaret`() {
typeTextInFile(
injector.parser.parseKeys("d3d"),
@ -109,6 +110,7 @@ class DeleteMotionActionTest : VimTestCase() {
assertState("${c}abcde\n${c}")
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test delete motion action multicaret`() {
typeTextInFile(
injector.parser.parseKeys("dt)"),

View File

@ -20,9 +20,12 @@ package org.jetbrains.plugins.ideavim.action.change.insert
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class InsertAfterLineEndActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert after line end action`() {
typeTextInFile(
injector.parser.parseKeys("A" + " four" + "<ESC>"),
@ -41,6 +44,7 @@ class InsertAfterLineEndActionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test multiple carets`() {
doTest(
"AHello<esc>",

View File

@ -19,9 +19,12 @@
package org.jetbrains.plugins.ideavim.action.change.insert
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class InsertBeforeFirstNonBlankActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert multiple carets`() {
doTest(
"IHello<esc>",

View File

@ -23,6 +23,8 @@ package org.jetbrains.plugins.ideavim.action.change.insert
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class InsertDeletePreviousWordActionTest : VimTestCase() {
@ -144,6 +146,7 @@ class InsertDeletePreviousWordActionTest : VimTestCase() {
assertState("hello\n" + "one two \n")
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert delete previous word action`() {
typeTextInFile(
injector.parser.parseKeys("i" + "<C-W>" + "<ESC>"),

View File

@ -99,6 +99,7 @@ class InsertNewLineAboveActionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert new line above with multiple carets`() {
val before = """ I fou${c}nd it in a legendary land
| all rocks and laven${c}der and tufted grass,

View File

@ -117,6 +117,7 @@ class InsertNewLineBelowActionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert new line below with multiple carets`() {
val before = """ I fou${c}nd it in a legendary land
| all rocks and laven${c}der and tufted grass,
@ -189,7 +190,6 @@ class InsertNewLineBelowActionTest : VimTestCase() {
performTest("o", after, VimStateMachine.Mode.INSERT, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.FOLDING, "Neovim doesn't support arbitrary folds")
fun `test insert new line below with folds 2`() {
val before = """I found it in a legendary land
|${c}all rocks [and lavender and tufted grass,

View File

@ -28,6 +28,7 @@ import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class InsertTabActionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test insert tab`() {
setupChecks {
keyHandler = Checks.KeyHandlerMethod.DIRECT_TO_VIM

View File

@ -57,6 +57,7 @@ class VisualBlockAppendActionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test append in non block mode`() {
doTest(
"vwAHello<esc>",

View File

@ -73,7 +73,9 @@ Xbar
ba_quux_r
""".trimIndent()
""".trimIndent(),
VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE
)
}
@ -95,7 +97,9 @@ Xbar
quux spam eggs
""".trimIndent()
)
),
VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE
)
}
@ -132,7 +136,9 @@ Xbar
ba_quux_r
""".trimIndent()
)
),
VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE
)
}
@ -156,7 +162,10 @@ Xbar
where it was settled on some sodden sand
hard by the torrent of a mountain pass.
""".trimIndent(),
VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE
)
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(SkipNeovimReason.VISUAL_BLOCK_MODE)
@ -170,7 +179,7 @@ Xbar
hard by the torrent of a mountain pass.
"""
doTest(
listOf("<C-V>" + "jjI" + " Hello " + "<ESC>"),
injector.parser.parseKeys("<C-V>" + "jjI" + " Hello " + "<ESC>"),
before.trimIndent(),
"""
A Discovery
@ -180,11 +189,14 @@ Xbar
where it was s Hello ettled on some sodden sand
hard by the torrent of a mountain pass.
""".trimIndent(),
VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE
) {
it.inlayModel.addInlineElement(before.indexOf("found"), HintRenderer("Hello"))
it.inlayModel.addInlineElement(before.indexOf("l rocks"), HintRenderer("Hello"))
it.inlayModel.addInlineElement(before.indexOf("ere it"), HintRenderer("Hello"))
}
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(SkipNeovimReason.VISUAL_BLOCK_MODE)

View File

@ -24,6 +24,8 @@ import com.maddyhome.idea.vim.command.SelectionType
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import com.maddyhome.idea.vim.newapi.vim
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.plugins.ideavim.rangeOf
import org.junit.Test
@ -76,6 +78,7 @@ class PutTestAfterCursorActionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
@Test
fun `test inserting same content to multiple carets`() {
val before = """

View File

@ -19,10 +19,13 @@
package org.jetbrains.plugins.ideavim.action.motion.search
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.common.Direction
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import javax.swing.KeyStroke
class SearchAgainPreviousActionTest : VimTestCase() {
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
@ -33,13 +36,14 @@ class SearchAgainPreviousActionTest : VimTestCase() {
...${c}all it was settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
val keys = injector.parser.parseKeys("N")
val after = """
I found it in a legendary land
...${c}all rocks and lavender and tufted grass,
...all it was settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
doTestWithSearch("N", before, after)
doTestWithSearch(keys, before, after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
@ -50,13 +54,14 @@ class SearchAgainPreviousActionTest : VimTestCase() {
...all it was .${c}all settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
val keys = injector.parser.parseKeys("N")
val after = """
I found it in a legendary land
...all rocks and lavender and tufted grass,
...${c}all it was .all settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
doTestWithSearch("N", before, after)
doTestWithSearch(keys, before, after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
@ -67,13 +72,14 @@ class SearchAgainPreviousActionTest : VimTestCase() {
...all it was .all.${c}all settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
val keys = injector.parser.parseKeys("N")
val after = """
I found it in a legendary land
...all rocks and lavender and tufted grass,
...all it was .${c}all.all settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
doTestWithSearch("N", before, after)
doTestWithSearch(keys, before, after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
@ -84,13 +90,14 @@ class SearchAgainPreviousActionTest : VimTestCase() {
...all it was settled on some sodden sand
...all by the torrent of a mountain pass
""".trimIndent().dotToTab()
val keys = injector.parser.parseKeys("N")
val after = """
I found it in a legendary land
...all rocks and lavender and tufted grass,
...all it was settled on some sodden sand
...${c}all by the torrent of a mountain pass
""".trimIndent().dotToTab()
doTestWithSearch("N", before, after)
doTestWithSearch(keys, before, after)
}
fun `test search previous after search command with offset`() {
@ -167,8 +174,8 @@ class SearchAgainPreviousActionTest : VimTestCase() {
doTest(listOf(searchCommand("/land/1"), exCommand("s/and/or"), "G", "N"), before, after)
}
private fun doTestWithSearch(keys: String, before: String, after: String) {
doTest(keys, before, after) {
private fun doTestWithSearch(keys: List<KeyStroke>, before: String, after: String) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.getSearch().setLastSearchState(it, "all", "", Direction.FORWARDS)
}
}

View File

@ -18,6 +18,8 @@
package org.jetbrains.plugins.ideavim.action.motion.updown
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.vimLastColumn
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
@ -34,11 +36,12 @@ class MotionUpActionTest : VimTestCase() {
I found it in a le${c}gendary land
all rocks and lavender and tufted grass,
""".trimIndent()
doTest(keys, before, after)
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test last column is incorrect`() {
val keys = injector.parser.parseKeys("k")
val before = """
I found it in a legendary land
all rocks and lave${c}nder and tufted grass,
@ -47,7 +50,7 @@ class MotionUpActionTest : VimTestCase() {
I found it in a le${c}gendary land
all rocks and lavender and tufted grass,
""".trimIndent()
doTest("k", before, after) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
it.caretModel.primaryCaret.vimLastColumn = 5
}
}
@ -66,11 +69,12 @@ class MotionUpActionTest : VimTestCase() {
I found it in a legendary land
all rocks and lavender and tufted ${c}grass,
""".trimIndent()
doTest(keys, before, after)
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test last column wrong lastColumn`() {
val keys = injector.parser.parseKeys("k")
val before = """
I found it in a legendary land
all rocks and lavender and tufted ${c}grass,
@ -79,7 +83,7 @@ class MotionUpActionTest : VimTestCase() {
I found it in a legendary lan${c}d
all rocks and lavender and tufted grass,
""".trimIndent()
doTest("k", before, after) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
it.caretModel.primaryCaret.vimLastColumn = 0
}
}

View File

@ -28,6 +28,8 @@ import com.maddyhome.idea.vim.helper.vimSelectionStart
import com.maddyhome.idea.vim.options.OptionConstants
import com.maddyhome.idea.vim.options.OptionScope
import com.maddyhome.idea.vim.vimscript.model.datatypes.VimString
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.plugins.ideavim.rangeOf
@ -228,6 +230,7 @@ class VisualToggleCharacterModeActionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test enter visual with count after visual operation multicaret`() {
doTest(
listOf("vedx", "1v"),

View File

@ -54,18 +54,20 @@ class CommandParserTest : VimTestCase() {
setupChecks {
caretShape = false
}
val keys = commandToKeys(">>")
val before = "I ${c}found it in a legendary land"
val after = "I :>>${c}found it in a legendary land"
doTest(exCommand(">>"), before, after) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
}
}
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test turn off and on`() {
val keys = commandToKeys(">>")
val before = "I ${c}found it in a legendary land"
val after = " ${c}I found it in a legendary land"
doTest(exCommand(">>"), before, after) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
VimPlugin.setEnabled(true)
}
@ -73,9 +75,10 @@ class CommandParserTest : VimTestCase() {
@TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION)
fun `test turn off and on twice`() {
val keys = commandToKeys(">>")
val before = "I ${c}found it in a legendary land"
val after = " ${c}I found it in a legendary land"
doTest(exCommand(">>"), before, after) {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) {
VimPlugin.setEnabled(false)
VimPlugin.setEnabled(true)
VimPlugin.setEnabled(true)

View File

@ -68,6 +68,7 @@ class MultipleCaretsTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testJoinLines() {
val before = "qwe\n" + "r${c}ty\n" + "asd\n" + "fg${c}h\n" + "zxc\n" + "vbn\n"
configureByText(before)
@ -85,6 +86,7 @@ class MultipleCaretsTest : VimTestCase() {
// myFixture.checkResult(after)
// }
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testCopyText() {
val before = "qwe\n" + "rty\n" + "a${c}sd\n" + "fg${c}h\n" + "zxc\n" + "vbn\n"
configureByText(before)
@ -102,6 +104,7 @@ class MultipleCaretsTest : VimTestCase() {
// myFixture.checkResult(after)
// }
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testPutText() {
// This test produces double ${c}zxc on 3rd line if non-idea paste is used
val before = """
@ -170,6 +173,7 @@ class MultipleCaretsTest : VimTestCase() {
// myFixture.checkResult(after)
// }
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testMoveTextBeforeCarets() {
val before = "qwe\n" + "rty\n" + "${c}asd\n" + "fgh\n" + "z${c}xc\n" + "vbn\n"
configureByText(before)
@ -178,6 +182,7 @@ class MultipleCaretsTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testMoveTextAfterCarets() {
val before = "q${c}we\n" + "rty\n" + "${c}asd\n" + "fgh\n" + "zxc\n" + "vbn\n"
configureByText(before)
@ -186,6 +191,7 @@ class MultipleCaretsTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testMoveTextBetweenCarets() {
val before = "q${c}we\n" + "rty\n" + "${c}asd\n" + "fgh\n" + "zxc\n" + "vbn\n"
configureByText(before)
@ -194,6 +200,7 @@ class MultipleCaretsTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testYankLines() {
val before = """qwe
|rt${c}y
@ -223,6 +230,7 @@ class MultipleCaretsTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun testDeleteLines() {
val before = """qwe
|r${c}ty

View File

@ -19,7 +19,6 @@
package org.jetbrains.plugins.ideavim.ex.implementation.commands
import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.api.injector
import org.jetbrains.plugins.ideavim.VimTestCase
/**
@ -131,22 +130,6 @@ class CmdCommandTest : VimTestCase() {
assertPluginError(false)
}
fun `test add command with range`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")
typeText(commandToKeys("command! -range Error echo <args>"))
assertPluginError(false)
assertEquals("'-range' is not supported by `command`", injector.messages.getStatusBarMessage())
}
fun `test add command with complete`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")
typeText(commandToKeys("command! -complete=color Error echo <args>"))
assertPluginError(false)
assertEquals("'-complete' is not supported by `command`", injector.messages.getStatusBarMessage())
}
fun `test add command with arguments short`() {
VimPlugin.getCommand().resetAliases()
configureByText("\n")

View File

@ -21,6 +21,8 @@ package org.jetbrains.plugins.ideavim.ex.implementation.commands
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class JoinLinesCommandTest : VimTestCase() {
@ -95,6 +97,7 @@ class JoinLinesCommandTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test join multicaret`() {
configureByText(
"""

View File

@ -102,6 +102,7 @@ class ShiftLeftCommandTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test multiple carets`() {
val before = """ I found it in a legendary land
|${c}all rocks and lavender and tufted grass,

View File

@ -83,6 +83,7 @@ class ShiftRightCommandTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.MULTICARET)
fun `test multiple carets`() {
val before = """ I found it in a legendary land
|${c}all rocks and lavender and tufted grass,

View File

@ -1,33 +0,0 @@
/*
* IdeaVim - Vim emulator for IDEs based on the IntelliJ platform
* Copyright (C) 2003-2022 The IdeaVim authors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.jetbrains.plugins.ideavim.ex.implementation.expressions
import com.maddyhome.idea.vim.helper.StringHelper.parseKeys
import com.maddyhome.idea.vim.vimscript.model.expressions.Register
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.plugins.ideavim.ex.evaluate
class ExpressionTest: VimTestCase() {
fun `test multiline register content`() {
configureByText("${c}Oh\nHi\nMark\n")
typeText(parseKeys("VGy"))
assertEquals("Oh\nHi\nMark\n", Register('"').evaluate().toString())
}
}

View File

@ -41,6 +41,8 @@ import com.maddyhome.idea.vim.newapi.ij
import com.maddyhome.idea.vim.newapi.vim
import com.maddyhome.idea.vim.options.OptionScope
import junit.framework.TestCase
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class OpMappingTest : VimTestCase() {
@ -66,6 +68,7 @@ class OpMappingTest : VimTestCase() {
super.tearDown()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test simple delete`() {
doTest(
"dI",
@ -76,6 +79,7 @@ class OpMappingTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test simple delete backwards`() {
doTest(
"dP",
@ -86,6 +90,7 @@ class OpMappingTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test delete emulate inclusive`() {
doTest(
"dU",
@ -96,6 +101,7 @@ class OpMappingTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test linewise delete`() {
doTest(
"dO",
@ -118,6 +124,7 @@ class OpMappingTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test disable extension via set`() {
configureByText("${c}I found it in a legendary land")
typeText(injector.parser.parseKeys("Q"))
@ -132,6 +139,7 @@ class OpMappingTest : VimTestCase() {
assertState("I ${c}found it in a legendary land")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test disable extension as extension point`() {
configureByText("${c}I found it in a legendary land")
typeText(injector.parser.parseKeys("Q"))
@ -150,6 +158,7 @@ class OpMappingTest : VimTestCase() {
assertState("I ${c}found it in a legendary land")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test disable disposed extension`() {
configureByText("${c}I found it in a legendary land")
typeText(injector.parser.parseKeys("Q"))
@ -167,6 +176,7 @@ class OpMappingTest : VimTestCase() {
assertState("I ${c}found it in a legendary land")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test delayed action`() {
configureByText("${c}I found it in a legendary land")
typeText(injector.parser.parseKeys("R"))
@ -181,6 +191,7 @@ class OpMappingTest : VimTestCase() {
/**
* This test tests an intentionally incorrectly implemented action
*/
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test delayed incorrect action`() {
configureByText("${c}I found it in a legendary land")
typeText(injector.parser.parseKeys("E"))
@ -210,18 +221,21 @@ class PlugExtensionsTest : VimTestCase() {
super.tearDown()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test enable via plug`() {
injector.vimscriptExecutor.execute("Plug 'MyTest'", false)
assertTrue(extension.ext.initialized)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test enable via plugin`() {
injector.vimscriptExecutor.execute("Plugin 'MyTest'", false)
assertTrue(extension.ext.initialized)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test enable via plug and disable via set`() {
injector.vimscriptExecutor.execute("Plug 'MyTest'")
injector.vimscriptExecutor.execute("set noTestExtension")
@ -247,6 +261,7 @@ class PlugMissingKeysTest : VimTestCase() {
super.tearDown()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test missing keys`() {
executeLikeVimrc(
"map myKey <Plug>TestMissing",
@ -262,6 +277,7 @@ class PlugMissingKeysTest : VimTestCase() {
TestCase.assertEquals(injector.parser.parseKeys("L"), iKeyMappings.first().first)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test missing keys enable plugin first`() {
executeLikeVimrc(
"Plug 'MyTest'",
@ -277,6 +293,7 @@ class PlugMissingKeysTest : VimTestCase() {
TestCase.assertEquals(injector.parser.parseKeys("L"), iKeyMappings.first().first)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test packadd`() {
assertFalse(injector.optionService.isSet(OptionScope.GLOBAL, "matchit"))
executeLikeVimrc(
@ -286,6 +303,7 @@ class PlugMissingKeysTest : VimTestCase() {
assertTrue(injector.optionService.isSet(OptionScope.GLOBAL, "matchit"))
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test packadd ex`() {
assertFalse(injector.optionService.isSet(OptionScope.GLOBAL, "matchit"))
executeLikeVimrc(

View File

@ -22,6 +22,8 @@ import com.google.common.collect.Lists;
import com.maddyhome.idea.vim.api.VimInjectorKt;
import com.maddyhome.idea.vim.command.VimStateMachine;
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers;
import org.jetbrains.plugins.ideavim.SkipNeovimReason;
import org.jetbrains.plugins.ideavim.TestWithoutNeovim;
import org.jetbrains.plugins.ideavim.VimTestCase;
import java.util.Collections;
@ -39,7 +41,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimInjectorKt.getInjector().getVimscriptExecutor().execute("let argtextobj_pairs='" + value + "'", true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testDeleteAnArgument() {
doTest(Lists.newArrayList("daa"), "function(int arg1, char<caret>* arg2=\"a,b,c(d,e)\")",
"function(int arg1<caret>)", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -47,11 +49,13 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testChangeInnerArgument() {
doTest(Lists.newArrayList("cia"), "function(int arg1, char<caret>* arg2=\"a,b,c(d,e)\")",
"function(int arg1, <caret>)", VimStateMachine.Mode.INSERT, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testSmartArgumentRecognition() {
doTest(Lists.newArrayList("dia"), "function(1, (20<caret>*30)+40, somefunc2(3, 4))",
"function(1, <caret>, somefunc2(3, 4))", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -59,6 +63,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
"function(1, (20*30)+40, somefunc2(<caret>4))", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testIgnoreQuotedArguments() {
doTest(Lists.newArrayList("daa"), "function(int arg1, char* arg2=a,b,c(<caret>arg,e))",
"function(int arg1, char* arg2=a,b,c(<caret>e))", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -70,6 +75,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
"function(int arg1<caret>)", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testDeleteTwoArguments() {
doTest(Lists.newArrayList("d2aa"), "function(int <caret>arg1, char* arg2=\"a,b,c(d,e)\")", "function(<caret>)",
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -85,6 +91,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
"function(int arg1, <caret>)", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testSelectTwoArguments() {
doTest(Lists.newArrayList("v2aa"), "function(int <caret>arg1, char* arg2=\"a,b,c(d,e)\", bool arg3)",
"function(<selection>int arg1, char* arg2=\"a,b,c(d,e)\", </selection>bool arg3)",
@ -94,12 +101,14 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testArgumentsInsideAngleBrackets() {
setArgTextObjPairsVariable("(:),<:>");
doTest(Lists.newArrayList("dia"), "std::vector<int, std::unique_p<caret>tr<bool>> v{};",
"std::vector<int, <caret>> v{};", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testWhenUnbalancedHigherPriorityPairIsUsed() {
setArgTextObjPairsVariable("{:},(:)");
doTest(Lists.newArrayList("dia"), "namespace foo { void foo(int arg1, bool arg2<caret> { body }\n}",
@ -108,6 +117,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
"namespace foo { <caret>, bool arg2 { body }\n}", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testBracketPriorityToHangleShiftOperators() {
doTest(Lists.newArrayList("dia"), "foo(30 << 10, 20 << <caret>3) >> 17", "foo(30 << 10, <caret>) >> 17",
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -117,6 +127,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testEmptyFile() {
assertPluginError(false);
doTest(Lists.newArrayList("daa"), "<caret>", "<caret>", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -125,6 +136,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testEmptyLine() {
assertPluginError(false);
doTest(Lists.newArrayList("daa"), "<caret>\n", "<caret>\n", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -133,6 +145,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testEmptyArg() {
assertPluginError(false);
doTest(Lists.newArrayList("daa"), "foo(<caret>)", "foo(<caret>)", VimStateMachine.Mode.COMMAND,
@ -143,6 +156,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testSkipCommasInsideNestedPairs() {
final String before =
"void foo(int arg1)\n{" + " methodCall(arg1, \"{ arg1 , 2\");\n" + " otherMeth<caret>odcall(arg, 3);\n" + "}";
@ -150,16 +164,19 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testHandleNestedPairs() {
doTest(Lists.newArrayList("dia"), "foo(arg1, arr<caret>ay[someexpr(Class{arg1 << 3, arg2})] + 3)\n{",
"foo(arg1, <caret>)\n{", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testHandleNestedParenthesisForASingleArgument() {
doTest(Lists.newArrayList("dia"), "foo((20*<caret>30))", "foo(<caret>)", VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testHandleImbalancedPairs() {
doTest(Lists.newArrayList("dia"), "foo(arg1, ba<caret>r(not-an-arg{body", "foo(arg1, ba<caret>r(not-an-arg{body",
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
@ -175,12 +192,14 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testArgumentBoundsSearchIsLimitedByLineCount() {
final String before = "foo(\n" + String.join("", Collections.nCopies(10, " arg,\n")) + " last<caret>Arg" + ")";
doTest(Lists.newArrayList("dia"), before, before, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
assertPluginError(true);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testExtendVisualSelection() {
doTest(Lists.newArrayList("vllia"), "function(int arg1, ch<caret>ar* arg2=\"a,b,c(d,e)\")",
"function(int arg1, <selection>char* arg2=\"a,b,c(d,e)\"</selection>)", VimStateMachine.Mode.VISUAL,
@ -190,11 +209,13 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.SubMode.VISUAL_CHARACTER);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testExtendVisualSelectionUsesCaretPos() {
doTest(Lists.newArrayList("vllia"), "fu<caret>n(arg)", "fun(<selection>arg</selection>)", VimStateMachine.Mode.VISUAL,
VimStateMachine.SubMode.VISUAL_CHARACTER);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testDeleteArrayArgument() {
setArgTextObjPairsVariable("[:],(:)");
doTest(Lists.newArrayList("dia"), "function(int a, String[<caret>] b)", "function(int a, <caret>)",
@ -203,6 +224,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testDeleteInClass() {
doTest(Lists.newArrayList("dia"), "class MyClass{ public int myFun() { some<caret>Call(); } }",
"class MyClass{ public int myFun() { some<caret>Call(); } }", VimStateMachine.Mode.COMMAND,
@ -212,6 +234,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testFunctionWithSpaceAfterName() {
doTest(Lists.newArrayList("dia"), "function (int <caret>a)", "function (int <caret>a)", VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE);
@ -220,6 +243,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
}
@VimBehaviorDiffers(originalVimAfter = "function (int <caret>a, int b)", description = "Should work the same as testFunctionWithSpaceAfterName")
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testFunctionWithSpaceAfterNameWithTwoArgs() {
doTest(Lists.newArrayList("dia"), "function (int <caret>a, int b)", "function (, int b)", VimStateMachine.Mode.COMMAND,
VimStateMachine.SubMode.NONE);
@ -227,6 +251,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testDeleteInIf() {
doTest(Lists.newArrayList("dia"), "class MyClass{ public int myFun() { if (tr<caret>ue) { somFunction(); } } }",
"class MyClass{ public int myFun() { if (tr<caret>ue) { somFunction(); } } }", VimStateMachine.Mode.COMMAND,
@ -236,6 +261,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
VimStateMachine.SubMode.NONE);
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testParseVariablePairs() {
assertPluginError(false);
setArgTextObjPairsVariable("[:], (:)");
@ -280,6 +306,7 @@ public class VimArgTextObjExtensionTest extends VimTestCase {
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
public void testCppLambaArguments() {
setArgTextObjPairsVariable("[:],(:),{:},<:>");
doTest(Lists.newArrayList("daa"),

View File

@ -22,17 +22,21 @@ import com.intellij.ide.highlighter.HtmlFileType
import com.intellij.ide.highlighter.JavaFileType
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.yaml.YAMLFileType
@Suppress("SpellCheckingInspection")
class CommentaryExtensionTest : VimTestCase() {
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
override fun setUp() {
super.setUp()
enableExtensions("commentary")
}
// |gc| |l| + move caret
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testBlockCommentSingle() {
doTest(
"gcll",
@ -44,6 +48,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |iw|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testBlockCommentInnerWord() {
doTest(
"gciw",
@ -55,6 +60,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |iw|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testBlockCommentTillForward() {
doTest(
"gct{",
@ -65,6 +71,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |ab|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testBlockCommentOuterParens() {
doTest(
"gcab",
@ -79,6 +86,7 @@ class CommentaryExtensionTest : VimTestCase() {
* otherwise, they are incredibly difficult to undo
*/
// |gc| |j|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentDown() {
doTest(
"gcj",
@ -89,6 +97,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentDownPreservesAbsoluteCaretLocation() {
doTest(
"gcj",
@ -100,6 +109,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentInnerParagraph() {
doTest(
"gcip",
@ -111,6 +121,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentSingleLineInnerParagraph() {
doTest(
"gcip",
@ -121,6 +132,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
/* Ensure uncommenting works as well */ // |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineUncommentInnerParagraph() {
doTest(
"gcip",
@ -133,6 +145,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineUncommentSingleLineInnerParagraph() {
doTest(
"gcip",
@ -143,6 +156,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
/* Visual mode */ // |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentVisualInnerParagraph() {
doTest(
"vipgc",
@ -154,6 +168,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gc| |ip|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineUncommentVisualInnerParagraph() {
doTest(
"vipgc",
@ -165,6 +180,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
/* Special shortcut gcc is always linewise */ // |gcc|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentShortcut() {
doTest(
"gccj",
@ -177,6 +193,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gcc|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineCommentShortcutSetsCaretToMotionLocation() {
doTest(
"gcc",
@ -188,6 +205,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gcc|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testLineUncommentShortcut() {
doTest(
"gcc",
@ -200,6 +218,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
// |gcc|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testHTMLCommentShortcut() {
doTest(
"gcc",
@ -212,6 +231,7 @@ class CommentaryExtensionTest : VimTestCase() {
assertSelection(null)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test comment motion repeat`() {
doTest(
"gcj" + "jj.",
@ -231,6 +251,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test comment motion right repeat`() {
doTest(
"gciw" + "jj.",
@ -250,6 +271,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test comment line repeat`() {
doTest(
"gcc" + "j.",
@ -266,6 +288,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
@VimBehaviorDiffers(description = "IntelliJ's uncomment leaves the leading whitespace")
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test uncomment with gcgc`() {
doTest(
"gcgc",
@ -286,6 +309,7 @@ class CommentaryExtensionTest : VimTestCase() {
}
@VimBehaviorDiffers(description = "IntelliJ's uncomment leaves the leading whitespace")
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test uncomment with gcu`() {
doTest(
"gcu",
@ -305,6 +329,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test comment line with count`() {
// Caret position is kept as the position *before* the commenting. This is how Vim works
doTest(
@ -329,6 +354,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment`() {
doTest(
"dgc",
@ -343,6 +369,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes multiple line comments`() {
doTest(
"dgc",
@ -361,6 +388,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes multiple line comments 2`() {
doTest(
"dgc",
@ -379,6 +407,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from leading whitespace`() {
doTest(
"dgc",
@ -393,6 +422,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from leading whitespace 2`() {
doTest(
"dgc",
@ -409,6 +439,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from leading whitespace 3`() {
doTest(
"dgc",
@ -427,6 +458,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from trailing whitespace`() {
doTest(
"dgc",
@ -444,6 +476,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comments separated by whitespace`() {
doTest(
"dgc",
@ -460,6 +493,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes disjointed single line comments from whitespace`() {
doTest(
"dgc",
@ -481,6 +515,7 @@ class CommentaryExtensionTest : VimTestCase() {
final Int value = 42;
"""
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from current line`() {
doTest(
"dgc",
@ -496,6 +531,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes single line comment from current line 2`() {
doTest(
"dgc",
@ -512,6 +548,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object does not delete line with comment and text`() {
doTest(
"dgc",
@ -525,6 +562,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes block comment`() {
doTest(
"dgc",
@ -539,6 +577,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes multi-line block comment`() {
doTest(
"dgc",
@ -555,6 +594,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes adjoining multi-line block comments`() {
doTest(
"dgc",
@ -574,6 +614,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes adjoining multi-line block comments 2`() {
doTest(
"dgc",
@ -594,6 +635,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object does not delete line with text and block comment`() {
doTest(
"dgc",
@ -607,6 +649,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes JavaDoc comment`() {
doTest(
"dgc",
@ -627,6 +670,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes JavaDoc comment from leading whitespace`() {
doTest(
"dgc",
@ -648,6 +692,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes JavaDoc comment and adjoining comments`() {
doTest(
"dgc",
@ -669,6 +714,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test text object deletes JavaDoc comment and adjoining comments separated by whitespace`() {
doTest(
"dgc",
@ -693,6 +739,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test Commentary command comments current line`() {
doTest(
":Commentary<CR>",
@ -710,6 +757,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test Commentary command comments simple line range`() {
doTest(
":2Commentary<CR>",
@ -727,6 +775,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test Commentary command comments line range`() {
doTest(
":1,3Commentary<CR>",
@ -755,6 +804,7 @@ class CommentaryExtensionTest : VimTestCase() {
"Note that Escape exits Visual mode, but leaves the caret where it is",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test Commentary command comments visual range`() {
doTest(
"Vjj" + ":Commentary<CR>",
@ -772,6 +822,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test Commentary command comments search range`() {
doTest(
":g/value2/Commentary<CR>",
@ -793,6 +844,7 @@ class CommentaryExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test block comment falls back to line comment when not available`() {
doTest(
"gcw",

View File

@ -23,6 +23,8 @@ import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.extension.exchange.VimExchangeExtension
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class VimExchangeExtensionTest : VimTestCase() {
@ -33,6 +35,7 @@ class VimExchangeExtensionTest : VimTestCase() {
}
// |cx|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words left to right`() {
doTest(
listOf("cxe", "w", "cxe"),
@ -44,6 +47,7 @@ class VimExchangeExtensionTest : VimTestCase() {
}
// |cx|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words dot repeat`() {
doTest(
listOf("cxiw", "w", "."),
@ -55,6 +59,7 @@ class VimExchangeExtensionTest : VimTestCase() {
}
// |cx|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words right to left`() {
doTest(
listOf("cxe", "b", "cxe"),
@ -66,6 +71,7 @@ class VimExchangeExtensionTest : VimTestCase() {
}
// |cx|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words right to left with dot`() {
doTest(
listOf("cxe", "b", "."),
@ -77,6 +83,7 @@ class VimExchangeExtensionTest : VimTestCase() {
}
// |X|
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words left to right`() {
doTest(
listOf("veX", "w", "veX"),
@ -92,6 +99,7 @@ class VimExchangeExtensionTest : VimTestCase() {
originalVimAfter = "The ${c}brown catch over the lazy dog",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words from inside`() {
doTest(
listOf("veX", "b", "v3e", "X"),
@ -107,6 +115,7 @@ class VimExchangeExtensionTest : VimTestCase() {
originalVimAfter = "The brown ${c}catch over the lazy dog",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words from outside`() {
doTest(
listOf("v3e", "X", "w", "veX"),
@ -127,6 +136,7 @@ class VimExchangeExtensionTest : VimTestCase() {
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange lines top down`() {
doTest(
listOf("cxx", "j", "cxx"),
@ -155,6 +165,7 @@ class VimExchangeExtensionTest : VimTestCase() {
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange lines top down with dot`() {
doTest(
listOf("cxx", "j", "."),
@ -181,6 +192,7 @@ class VimExchangeExtensionTest : VimTestCase() {
lazy dog
"""
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange to the line end`() {
doTest(
listOf("v$", "X", "jj^ve", "X"),
@ -209,6 +221,7 @@ class VimExchangeExtensionTest : VimTestCase() {
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange visual lines`() {
doTest(
listOf("Vj", "X", "jj", "Vj", "X"),
@ -230,6 +243,7 @@ class VimExchangeExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual char highlighter`() {
val before = """
The ${c}quick
@ -246,6 +260,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual line highdhitligthhter`() {
val before = """
The ${c}quick
@ -262,6 +277,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test till the line end highlighter`() {
val before = """
The ${c}quick
@ -276,6 +292,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test pre line end highlighter`() {
val before = """
The ${c}quick
@ -290,6 +307,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test pre pre line end highlighter`() {
val before = """
The ${c}quick
@ -304,6 +322,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test to file end highlighter`() {
val before = """
The quick
@ -325,6 +344,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test to file end with new line highlighter`() {
val before = """
The quick
@ -347,6 +367,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test back selection`() {
val before = """
The quick
@ -362,6 +383,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test back selection exchange 1`() {
doTest(
listOf("vb", "X", "bevb", "X"),
@ -372,6 +394,7 @@ class VimExchangeExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test back selection exchange 2`() {
doTest(
listOf("vb", "X", "wve", "X"),
@ -382,6 +405,7 @@ class VimExchangeExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test back selection exchange 3`() {
doTest(
listOf("ve", "X", "wevb", "X"),
@ -392,6 +416,7 @@ class VimExchangeExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test change with down motion`() {
val before = """
The ${c}quick
@ -411,6 +436,7 @@ class VimExchangeExtensionTest : VimTestCase() {
exitExchange()
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test cxx`() {
val before = """
The ${c}quick

View File

@ -25,6 +25,8 @@ import com.maddyhome.idea.vim.extension.exchange.VimExchangeExtension
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import com.maddyhome.idea.vim.options.OptionConstants
import org.jetbrains.plugins.ideavim.OptionValueType
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimOptionTestCase
import org.jetbrains.plugins.ideavim.VimOptionTestConfiguration
import org.jetbrains.plugins.ideavim.VimTestOption
@ -38,6 +40,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
// |cx|
@VimOptionTestConfiguration(VimTestOption(OptionConstants.clipboardName, OptionValueType.STRING, "unnamed"))
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words left to right`() {
doTest(
listOf("cxe", "w", "cxe"),
@ -50,6 +53,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
// |cx|
@VimOptionTestConfiguration(VimTestOption(OptionConstants.clipboardName, OptionValueType.STRING, "unnamed"))
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words dot repeat`() {
doTest(
listOf("cxiw", "w", "."),
@ -62,6 +66,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
// |cx|
@VimOptionTestConfiguration(VimTestOption(OptionConstants.clipboardName, OptionValueType.STRING, "unnamed"))
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words right to left`() {
doTest(
listOf("cxe", "b", "cxe"),
@ -74,6 +79,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
// |cx|
@VimOptionTestConfiguration(VimTestOption(OptionConstants.clipboardName, OptionValueType.STRING, "unnamed"))
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange words right to left with dot`() {
doTest(
listOf("cxe", "b", "."),
@ -86,6 +92,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
// |X|
@VimOptionTestConfiguration(VimTestOption(OptionConstants.clipboardName, OptionValueType.STRING, "unnamed"))
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words left to right`() {
doTest(
listOf("veX", "w", "veX"),
@ -102,6 +109,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
originalVimAfter = "The ${c}brown catch over the lazy dog",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words from inside`() {
doTest(
listOf("veX", "b", "v3e", "X"),
@ -118,6 +126,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
originalVimAfter = "The brown ${c}catch over the lazy dog",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test visual exchange words from outside`() {
doTest(
listOf("v3e", "X", "w", "veX"),
@ -139,6 +148,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange lines top down`() {
doTest(
listOf("cxx", "j", "cxx"),
@ -168,6 +178,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange lines top down with dot`() {
doTest(
listOf("cxx", "j", "."),
@ -195,6 +206,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
lazy dog
"""
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange to the line end`() {
doTest(
listOf("v$", "X", "jj^ve", "X"),
@ -224,6 +236,7 @@ class VimExchangeWithClipboardTest : VimOptionTestCase(OptionConstants.clipboard
""",
shouldBeFixed = true
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test exchange visual lines`() {
doTest(
listOf("Vj", "X", "jj", "Vj", "X"),

View File

@ -23,6 +23,8 @@ import com.maddyhome.idea.vim.VimPlugin
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.extension.highlightedyank.DEFAULT_HIGHLIGHT_DURATION
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.plugins.ideavim.assertHappened
@ -32,6 +34,7 @@ class VimHighlightedYankTest : VimTestCase() {
enableExtensions("highlightedyank")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test highlighting whole line when whole line is yanked`() {
doTest("yy", code, code, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
@ -39,6 +42,7 @@ class VimHighlightedYankTest : VimTestCase() {
assertHighlighterRange(1, 40, getFirstHighlighter())
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test highlighting single word when single word is yanked`() {
doTest("yiw", code, code, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
@ -54,6 +58,7 @@ class VimHighlightedYankTest : VimTestCase() {
assertHighlighterRange(40, 59, getFirstHighlighter())
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test removing previous highlight when entering insert mode`() {
doTest("yyi", code, code, VimStateMachine.Mode.INSERT, VimStateMachine.SubMode.NONE)
@ -105,6 +110,7 @@ class VimHighlightedYankTest : VimTestCase() {
}
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test highlighting with multiple cursors`() {
doTest("yiw", codeWithMultipleCurors, codeWithMultipleCurors, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
@ -115,12 +121,14 @@ class VimHighlightedYankTest : VimTestCase() {
assertHighlighterRange(28, 31, highlighters[2])
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test clearing all highlighters with multiple cursors`() {
doTest("yiwi", codeWithMultipleCurors, codeWithMultipleCurors, VimStateMachine.Mode.INSERT, VimStateMachine.SubMode.NONE)
assertAllHighlightersCount(0)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test highlighting for a correct default amount of time`() {
doTest("yiw", code, code, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
@ -129,6 +137,7 @@ class VimHighlightedYankTest : VimTestCase() {
}
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test highlighting for a correct user provided amount of time`() {
configureByJavaText(code)
typeText(injector.parser.parseKeys(":let g:highlightedyank_highlight_duration = \"1000\"<CR>"))

View File

@ -18,6 +18,9 @@
package org.jetbrains.plugins.ideavim.extension.matchit
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class MatchitCMakeTest : VimTestCase() {
@ -27,6 +30,7 @@ class MatchitCMakeTest : VimTestCase() {
enableExtensions("matchit")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from if to else`() {
doTest(
"%",
@ -44,10 +48,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else to endif`() {
doTest(
"%",
@ -65,10 +70,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
${c}endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to if`() {
doTest(
"%",
@ -86,10 +92,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from if to elseif in if-else structure`() {
doTest(
"%",
@ -115,10 +122,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from elseif to elseif`() {
doTest(
"%",
@ -144,10 +152,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from elseif to else`() {
doTest(
"%",
@ -173,10 +182,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else to endif in if-else structure`() {
doTest(
"%",
@ -202,10 +212,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
${c}endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to if in if-else structure`() {
doTest(
"%",
@ -231,10 +242,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from foreach to endforeach`() {
doTest(
"%",
@ -248,10 +260,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
${c}endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endforeach to foreach`() {
doTest(
"%",
@ -265,10 +278,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from foreach to break`() {
doTest(
"%",
@ -288,10 +302,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from break to endforeach`() {
doTest(
"%",
@ -311,10 +326,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
${c}endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from while to endwhile`() {
doTest(
"%",
@ -328,10 +344,11 @@ class MatchitCMakeTest : VimTestCase() {
MATH(EXPR VAR "${"\${index}"}+1")
${c}endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endwhile to while`() {
doTest(
"%",
@ -345,10 +362,11 @@ class MatchitCMakeTest : VimTestCase() {
MATH(EXPR VAR "${"\${index}"}+1")
endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from while to break`() {
doTest(
"%",
@ -368,10 +386,11 @@ class MatchitCMakeTest : VimTestCase() {
endif()
endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from break to endwhile`() {
doTest(
"%",
@ -391,10 +410,11 @@ class MatchitCMakeTest : VimTestCase() {
endif()
${c}endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from function to endfunction`() {
doTest(
"%",
@ -408,10 +428,11 @@ class MatchitCMakeTest : VimTestCase() {
bar(x y z)
${c}endfunction()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endfunction to function`() {
doTest(
"%",
@ -425,10 +446,11 @@ class MatchitCMakeTest : VimTestCase() {
bar(x y z)
endfunction()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from macro to endmacro`() {
doTest(
"%",
@ -442,10 +464,11 @@ class MatchitCMakeTest : VimTestCase() {
message("arg = ${"\${arg}\""}")
${c}endmacro()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endmacro to macro`() {
doTest(
"%",
@ -459,12 +482,13 @@ class MatchitCMakeTest : VimTestCase() {
message("arg = ${"\${arg}\""}")
endmacro()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
// Tests for reverse motion
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from if to endif`() {
doTest(
"g%",
@ -482,10 +506,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
${c}endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else to if`() {
doTest(
"g%",
@ -503,10 +528,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to else`() {
doTest(
"g%",
@ -524,10 +550,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Non-linux system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from if to endif in if-else block`() {
doTest(
"g%",
@ -553,10 +580,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
${c}endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from elseif to if`() {
doTest(
"g%",
@ -582,10 +610,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from elseif in else block to elseif`() {
doTest(
"g%",
@ -611,10 +640,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else to elseif`() {
doTest(
"g%",
@ -640,10 +670,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to else in if-else block`() {
doTest(
"g%",
@ -669,10 +700,11 @@ class MatchitCMakeTest : VimTestCase() {
message("Unknown system")
endif()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from foreach to endforeach`() {
doTest(
"g%",
@ -686,10 +718,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
${c}endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endforeach to foreach`() {
doTest(
"g%",
@ -703,10 +736,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from foreach to endforeach over a break`() {
doTest(
"g%",
@ -726,10 +760,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
${c}endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endforeach to break`() {
doTest(
"g%",
@ -749,10 +784,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from break to foreach`() {
doTest(
"g%",
@ -772,10 +808,11 @@ class MatchitCMakeTest : VimTestCase() {
message(STATUS "X=${"\${X}"}")
endforeach()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from while to endwhile`() {
doTest(
"g%",
@ -789,10 +826,11 @@ class MatchitCMakeTest : VimTestCase() {
MATH(EXPR VAR "${"\${index}"}+1")
${c}endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endwhile to while`() {
doTest(
"g%",
@ -806,10 +844,11 @@ class MatchitCMakeTest : VimTestCase() {
MATH(EXPR VAR "${"\${index}"}+1")
endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from while to endwhile over a break`() {
doTest(
"g%",
@ -829,10 +868,11 @@ class MatchitCMakeTest : VimTestCase() {
endif()
${c}endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endwhile to break`() {
doTest(
"g%",
@ -852,10 +892,11 @@ class MatchitCMakeTest : VimTestCase() {
endif()
endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from break to while`() {
doTest(
"g%",
@ -875,10 +916,11 @@ class MatchitCMakeTest : VimTestCase() {
endif()
endwhile()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from function to endfunction`() {
doTest(
"g%",
@ -892,10 +934,11 @@ class MatchitCMakeTest : VimTestCase() {
bar(x y z)
${c}endfunction()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endfunction to function`() {
doTest(
"g%",
@ -909,10 +952,11 @@ class MatchitCMakeTest : VimTestCase() {
bar(x y z)
endfunction()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from macro to endmacro`() {
doTest(
"g%",
@ -926,10 +970,11 @@ class MatchitCMakeTest : VimTestCase() {
message("arg = ${"\${arg}\""}")
${c}endmacro()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endmacro to macro`() {
doTest(
"g%",
@ -943,7 +988,7 @@ class MatchitCMakeTest : VimTestCase() {
message("arg = ${"\${arg}\""}")
endmacro()
""".trimIndent(),
fileName = "CMakeLists.txt"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "CMakeLists.txt"
)
}
}

View File

@ -18,6 +18,9 @@
package org.jetbrains.plugins.ideavim.extension.matchit
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class MatchitCTest : VimTestCase() {
@ -27,6 +30,7 @@ class MatchitCTest : VimTestCase() {
enableExtensions("matchit")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #if to #endif`() {
doTest(
"%",
@ -38,10 +42,11 @@ class MatchitCTest : VimTestCase() {
#if !defined (VAL_1)
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from whitespace before #if to #endif`() {
doTest(
"%",
@ -53,10 +58,11 @@ class MatchitCTest : VimTestCase() {
#if !defined (VAL_1)
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #if to #elif`() {
doTest(
"%",
@ -72,10 +78,11 @@ class MatchitCTest : VimTestCase() {
$c#elif !defined (VAL_2)
#define VAL_2 2
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #if to #else`() {
doTest(
"%",
@ -91,10 +98,11 @@ class MatchitCTest : VimTestCase() {
$c#else
#define VAL_2 2
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #elif to #else`() {
doTest(
"%",
@ -106,10 +114,11 @@ class MatchitCTest : VimTestCase() {
#elif !defined (VAL_2)
$c#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from whitespace before #elif to #else`() {
doTest(
"%",
@ -121,10 +130,11 @@ class MatchitCTest : VimTestCase() {
#elif !defined (VAL_2)
$c#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #else to #endif`() {
doTest(
"%",
@ -136,10 +146,11 @@ class MatchitCTest : VimTestCase() {
#else
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from whitespace before #else to #endif`() {
doTest(
"%",
@ -151,10 +162,11 @@ class MatchitCTest : VimTestCase() {
#else !defined (VAL_2)
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #endif to #if`() {
doTest(
"%",
@ -176,10 +188,11 @@ class MatchitCTest : VimTestCase() {
#define VAL_3 3
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifdef to #endif`() {
doTest(
"%",
@ -191,10 +204,11 @@ class MatchitCTest : VimTestCase() {
#ifdef DEBUG
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifdef to #elif`() {
doTest(
"%",
@ -206,10 +220,11 @@ class MatchitCTest : VimTestCase() {
#ifdef DEBUG
$c#elif PROD
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifdef to #else`() {
doTest(
"%",
@ -221,10 +236,11 @@ class MatchitCTest : VimTestCase() {
#ifdef DEBUG
$c#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #endif to #ifdef`() {
doTest(
"%",
@ -236,10 +252,11 @@ class MatchitCTest : VimTestCase() {
$c#ifdef DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifndef to #endif`() {
doTest(
"%",
@ -251,10 +268,11 @@ class MatchitCTest : VimTestCase() {
#ifndef DEBUG
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifndef to #elif`() {
doTest(
"%",
@ -266,10 +284,11 @@ class MatchitCTest : VimTestCase() {
#ifndef DEBUG
$c#elif PROD
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #ifndef to #else`() {
doTest(
"%",
@ -281,10 +300,11 @@ class MatchitCTest : VimTestCase() {
#ifndef DEBUG
$c#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #endif to #ifndef`() {
doTest(
"%",
@ -296,10 +316,11 @@ class MatchitCTest : VimTestCase() {
$c#ifndef DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't jump from malformed #if`() {
doTest(
"%",
@ -311,10 +332,11 @@ class MatchitCTest : VimTestCase() {
$c#ifff DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from #if with whitespace to #endif`() {
doTest(
"%",
@ -326,10 +348,11 @@ class MatchitCTest : VimTestCase() {
# if DEBUG
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from nested #if to #endif`() {
doTest(
"%",
@ -345,7 +368,7 @@ class MatchitCTest : VimTestCase() {
$c# endif
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@ -353,6 +376,7 @@ class MatchitCTest : VimTestCase() {
* Tests for reverse g% motion
*/
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #if to #endif`() {
doTest(
"g%",
@ -364,10 +388,11 @@ class MatchitCTest : VimTestCase() {
#if !defined (VAL_1)
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from whitespace before #if to #endif`() {
doTest(
"g%",
@ -379,10 +404,11 @@ class MatchitCTest : VimTestCase() {
#if !defined (VAL_1)
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #endif to #if with whitespace`() {
doTest(
"g%",
@ -394,10 +420,11 @@ class MatchitCTest : VimTestCase() {
$c# if DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #endif to #else`() {
doTest(
"g%",
@ -411,10 +438,11 @@ class MatchitCTest : VimTestCase() {
#define VAL_3 3
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #else to #elif`() {
doTest(
"g%",
@ -432,10 +460,11 @@ class MatchitCTest : VimTestCase() {
#define VAL_3 3
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from whitespace before #else to #elif`() {
doTest(
"g%",
@ -453,10 +482,11 @@ class MatchitCTest : VimTestCase() {
#define VAL_3 3
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #elif to #if`() {
doTest(
"g%",
@ -472,10 +502,11 @@ class MatchitCTest : VimTestCase() {
#elif !defined (VAL_2)
#define VAL_2 2
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #ifdef to #endif`() {
doTest(
"g%",
@ -487,10 +518,11 @@ class MatchitCTest : VimTestCase() {
#ifdef DEBUG
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #endif to #ifdef`() {
doTest(
"g%",
@ -502,10 +534,11 @@ class MatchitCTest : VimTestCase() {
$c#ifdef DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #else to #ifdef`() {
doTest(
"g%",
@ -517,10 +550,11 @@ class MatchitCTest : VimTestCase() {
$c#ifdef DEBUG
#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #elif to #ifdef`() {
doTest(
"g%",
@ -532,10 +566,11 @@ class MatchitCTest : VimTestCase() {
$c#ifdef DEBUG
#elif PROD
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #ifndef to #endif`() {
doTest(
"g%",
@ -547,10 +582,11 @@ class MatchitCTest : VimTestCase() {
#ifndef DEBUG
$c#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #endif to #ifndef`() {
doTest(
"g%",
@ -562,10 +598,11 @@ class MatchitCTest : VimTestCase() {
$c#ifndef DEBUG
#endif
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #elif to #ifndef`() {
doTest(
"g%",
@ -577,10 +614,11 @@ class MatchitCTest : VimTestCase() {
$c#ifndef DEBUG
#elif PROD
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from #else to #ifndef`() {
doTest(
"g%",
@ -592,7 +630,7 @@ class MatchitCTest : VimTestCase() {
$c#ifndef DEBUG
#else
""".trimIndent(),
fileName = "main.c"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "main.c"
)
}
}

View File

@ -18,6 +18,9 @@
package org.jetbrains.plugins.ideavim.extension.matchit
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class MatchitGNUMakeTest : VimTestCase() {
@ -27,6 +30,7 @@ class MatchitGNUMakeTest : VimTestCase() {
enableExtensions("matchit")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from define to endef`() {
doTest(
"%",
@ -42,10 +46,11 @@ class MatchitGNUMakeTest : VimTestCase() {
second line
${c}endef
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endef to define`() {
doTest(
"%",
@ -61,10 +66,11 @@ class MatchitGNUMakeTest : VimTestCase() {
second line
endef
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifdef to endif`() {
doTest(
"%",
@ -78,10 +84,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info defined)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifdef`() {
doTest(
"%",
@ -95,10 +102,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info defined)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifndef to endif`() {
doTest(
"%",
@ -112,10 +120,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not defined)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifndef`() {
doTest(
"%",
@ -129,10 +138,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not defined)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifeq to endif`() {
doTest(
"%",
@ -146,10 +156,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info empty)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifeq`() {
doTest(
"%",
@ -163,10 +174,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info empty)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifneq to endif`() {
doTest(
"%",
@ -180,10 +192,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifneq`() {
doTest(
"%",
@ -197,10 +210,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifneq to else`() {
doTest(
"%",
@ -214,10 +228,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifeq to else in ifeq-else block`() {
doTest(
"%",
@ -239,10 +254,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else ifeq to else`() {
doTest(
"%",
@ -264,10 +280,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifeq in else block to else`() {
doTest(
"%",
@ -289,10 +306,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else to endif in ifeq-else block`() {
doTest(
"%",
@ -314,10 +332,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifeq in ifeq-else block`() {
doTest(
"%",
@ -339,10 +358,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifneq to else in ifneq-else block`() {
doTest(
"%",
@ -364,10 +384,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else ifneq to else`() {
doTest(
"%",
@ -389,10 +410,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from ifneq in else block to else`() {
doTest(
"%",
@ -414,10 +436,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from else to endif in ifneq-else block`() {
doTest(
"%",
@ -439,10 +462,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from endif to ifneq in ifneq-else block`() {
doTest(
"%",
@ -464,12 +488,13 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
// Reverse tests
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from define to endef`() {
doTest(
"g%",
@ -485,10 +510,11 @@ class MatchitGNUMakeTest : VimTestCase() {
second line
${c}endef
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endef to define`() {
doTest(
"g%",
@ -504,10 +530,11 @@ class MatchitGNUMakeTest : VimTestCase() {
second line
endef
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifdef to endif`() {
doTest(
"g%",
@ -521,10 +548,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info defined)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to ifdef`() {
doTest(
"g%",
@ -538,10 +566,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info defined)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifndef to endif`() {
doTest(
"g%",
@ -555,10 +584,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not defined)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to ifndef`() {
doTest(
"g%",
@ -572,10 +602,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not defined)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifeq to endif`() {
doTest(
"g%",
@ -589,10 +620,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info empty)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to ifeq`() {
doTest(
"g%",
@ -606,10 +638,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info empty)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifneq to endif`() {
doTest(
"g%",
@ -623,10 +656,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to ifneq`() {
doTest(
"g%",
@ -640,10 +674,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifneq to else`() {
doTest(
"g%",
@ -657,10 +692,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not empty)
else
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifeq to endif in ifeq-else block`() {
doTest(
"g%",
@ -682,10 +718,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else ifeq to ifeq`() {
doTest(
"g%",
@ -707,10 +744,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifeq in else block to ifeq`() {
doTest(
"g%",
@ -732,10 +770,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else to else in ifeq-else block`() {
doTest(
"g%",
@ -757,10 +796,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to else in ifeq-else block`() {
doTest(
"g%",
@ -782,10 +822,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info not x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifneq to endif in ifneq-else block`() {
doTest(
"g%",
@ -807,10 +848,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
${c}endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else ifneq to ifneq`() {
doTest(
"g%",
@ -832,10 +874,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from ifneq in else block to ifneq`() {
doTest(
"g%",
@ -857,10 +900,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from else to else in ifneq-else block`() {
doTest(
"g%",
@ -882,10 +926,11 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from endif to else in ifneq-else block`() {
doTest(
"g%",
@ -907,7 +952,7 @@ class MatchitGNUMakeTest : VimTestCase() {
$(info x86 based)
endif
""".trimIndent(),
fileName = "Makefile"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "Makefile"
)
}
}

View File

@ -23,6 +23,8 @@ import com.intellij.ide.highlighter.JavaFileType
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import com.maddyhome.idea.vim.helper.experimentalApi
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class MatchitGeneralTest : VimTestCase() {
@ -36,6 +38,7 @@ class MatchitGeneralTest : VimTestCase() {
* Tests to make sure we didn't break the default % motion
*/
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from Java comment start to end`() {
doTest(
"%",
@ -49,10 +52,11 @@ class MatchitGeneralTest : VimTestCase() {
*
*$c/
""".trimIndent(),
fileType = JavaFileType.INSTANCE
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, JavaFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from Java comment end to start`() {
doTest(
"%",
@ -66,10 +70,11 @@ class MatchitGeneralTest : VimTestCase() {
*
*/
""".trimIndent(),
fileType = JavaFileType.INSTANCE
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, JavaFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test 25 percent jump`() {
doTest(
"25%",
@ -85,10 +90,11 @@ class MatchitGeneralTest : VimTestCase() {
int c;
int d;
""".trimIndent(),
fileType = HtmlFileType.INSTANCE
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, HtmlFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from visual end of line to opening parenthesis`() {
doTest(
"v$%",
@ -98,6 +104,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from visual end of line to opening parenthesis then back to closing`() {
doTest(
"v$%%",
@ -107,13 +114,15 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from opening parenthesis to closing parenthesis`() {
doTest(
"d%",
"$c(x == 123)", "", fileType = HtmlFileType.INSTANCE
"$c(x == 123)", "", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, HtmlFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from closing parenthesis to opening parenthesis`() {
doTest(
"d%",
@ -121,6 +130,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from opening curly brace to closing curly brace`() {
doTest(
"d%",
@ -128,6 +138,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from closing curly brace to opening curly brace`() {
doTest(
"d%",
@ -135,6 +146,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from opening square bracket to closing square bracket`() {
doTest(
"d%",
@ -142,6 +154,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete everything from closing square bracket to opening square bracket`() {
doTest(
"d%",
@ -152,6 +165,7 @@ class MatchitGeneralTest : VimTestCase() {
/*
* Tests for visual mode and deleting on the new Matchit patterns.
*/
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from visual end of line to opening angle bracket`() {
doTest(
"v$%",
@ -161,6 +175,7 @@ class MatchitGeneralTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from visual end of line to start of for loop`() {
doTest(
"v$%",
@ -174,7 +189,7 @@ class MatchitGeneralTest : VimTestCase() {
puts n
en${se}d
""".trimIndent(),
VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER, fileName = "ruby.rb"
VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER, "ruby.rb"
)
}
@ -188,6 +203,7 @@ class MatchitGeneralTest : VimTestCase() {
""",
description = "Our code changes the motion type to linewise, but it should not"
)
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete from elseif to else`() {
doTest(
"d%",
@ -216,10 +232,11 @@ class MatchitGeneralTest : VimTestCase() {
end
""".trimIndent()
},
fileName = "ruby.rb"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete from elseif to else 2`() {
doTest(
"d%",
@ -239,10 +256,11 @@ class MatchitGeneralTest : VimTestCase() {
puts "Positive"
end
""".trimIndent(),
fileName = "ruby.rb"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete from else to elsif with reverse motion`() {
doTest(
"dg%",
@ -262,10 +280,11 @@ class MatchitGeneralTest : VimTestCase() {
puts "Positive"
end
""".trimIndent(),
fileName = "ruby.rb"
VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete from opening to closing div`() {
doTest(
"d%",
@ -274,22 +293,22 @@ class MatchitGeneralTest : VimTestCase() {
<img src="fff">
</div>
""".trimIndent(),
"$c<",
fileType = HtmlFileType.INSTANCE
"$c<", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, HtmlFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete from opening angle bracket to closing angle bracket`() {
doTest(
"d%",
"""
$c<div></div>
""".trimIndent(),
"$c</div>",
fileType = HtmlFileType.INSTANCE
"$c</div>", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, HtmlFileType.INSTANCE
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete whole function from def`() {
doTest(
"d%",
@ -298,11 +317,11 @@ class MatchitGeneralTest : VimTestCase() {
puts "hello"
end
""".trimIndent(),
"",
fileName = "ruby.rb"
"", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete whole function from def with reverse motion`() {
doTest(
"dg%",
@ -311,11 +330,11 @@ class MatchitGeneralTest : VimTestCase() {
puts "hello"
end
""".trimIndent(),
"",
fileName = "ruby.rb"
"", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete whole function from end`() {
doTest(
"d%",
@ -324,11 +343,11 @@ class MatchitGeneralTest : VimTestCase() {
puts "hello"
en${c}d
""".trimIndent(),
"",
fileName = "ruby.rb"
"", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test delete whole function from end with reverse motion`() {
doTest(
"dg%",
@ -337,8 +356,7 @@ class MatchitGeneralTest : VimTestCase() {
puts "hello"
en${c}d
""".trimIndent(),
"",
fileName = "ruby.rb"
"", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE, "ruby.rb"
)
}
}

View File

@ -20,6 +20,8 @@ package org.jetbrains.plugins.ideavim.extension.matchit
import com.intellij.ide.highlighter.HtmlFileType
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class MatchitHtmlTest : VimTestCase() {
@ -29,6 +31,7 @@ class MatchitHtmlTest : VimTestCase() {
enableExtensions("matchit")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test basic jump to closing tag`() {
doTest(
"%",
@ -42,6 +45,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test basic jump to opening tag`() {
doTest(
"%",
@ -55,6 +59,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test multiline jump to closing tag`() {
doTest(
"%",
@ -72,6 +77,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test multiline jump to opening tag`() {
doTest(
"%",
@ -89,6 +95,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to closing tag while ignoring nested tags`() {
doTest(
"%",
@ -110,6 +117,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to closing tag while ignoring outer tags`() {
doTest(
"%",
@ -127,6 +135,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to opening tag while ignoring nested tags`() {
doTest(
"%",
@ -148,6 +157,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to opening tag while ignoring outer tags`() {
doTest(
"%",
@ -165,6 +175,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to closing tag while in tag attributes`() {
doTest(
"%",
@ -178,6 +189,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't jump on standalone tags`() {
doTest(
"%",
@ -195,6 +207,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't jump on empty lines`() {
doTest(
"%",
@ -212,6 +225,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump forwards to matching angle bracket on opening tag`() {
doTest(
"%",
@ -225,6 +239,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump forwards to matching angle bracket when on whitespace`() {
doTest(
"%",
@ -234,6 +249,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to last angle bracket when in tag body`() {
doTest(
"%",
@ -247,6 +263,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump forwards to matching angle bracket on closing tag`() {
doTest(
"%",
@ -260,6 +277,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump backwards to matching angle bracket on opening tag`() {
doTest(
"%",
@ -273,6 +291,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump backwards to matching angle bracket on closing tag`() {
doTest(
"%",
@ -286,6 +305,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to matching square bracket inside tag`() {
doTest(
"%",
@ -299,6 +319,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to matching parenthesis inside tag`() {
doTest(
"%",
@ -312,6 +333,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to matching curly brace in tag body`() {
doTest(
"%",
@ -325,6 +347,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to closing tag when inside brackets in opening tag`() {
doTest(
"%",
@ -338,6 +361,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump to opening curly brace when in tag body`() {
doTest(
"%",
@ -351,6 +375,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't jump on standalone tag with brackets on the same line`() {
doTest(
"%",
@ -364,6 +389,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from opening to closing tag while ignoring comments`() {
doTest(
"%",
@ -393,6 +419,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from closing to opening tag while ignoring comments`() {
doTest(
"%",
@ -422,6 +449,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from opening to closing tag inside a comment block`() {
doTest(
"%",
@ -439,6 +467,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from closing to opening tag inside a comment block`() {
doTest(
"%",
@ -456,6 +485,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from opening to closing angle bracket inside a comment block`() {
doTest(
"%",
@ -473,6 +503,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from closing to opening angle bracket inside a comment block`() {
doTest(
"%",
@ -490,6 +521,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from opening to closing angle bracket on a comment marker`() {
doTest(
"%",
@ -507,6 +539,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from opening to closing angle bracket ignoring bracket in string`() {
doTest(
"%",
@ -524,6 +557,7 @@ class MatchitHtmlTest : VimTestCase() {
* g% motion tests. For HTML, g% should behave the same as %.
*/
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing tag`() {
doTest(
"g%",
@ -537,6 +571,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to opening tag`() {
doTest(
"g%",
@ -550,6 +585,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing tag while ignoring nested tags`() {
doTest(
"g%",
@ -571,6 +607,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing tag while ignoring outer tags`() {
doTest(
"g%",
@ -588,6 +625,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to opening tag while ignoring nested tags`() {
doTest(
"g%",
@ -609,6 +647,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to opening tag while ignoring outer tags`() {
doTest(
"g%",
@ -626,6 +665,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing tag while in tag attributes`() {
doTest(
"g%",
@ -639,6 +679,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't reverse jump on standalone tags`() {
doTest(
"g%",
@ -656,6 +697,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't reverse jump on empty lines`() {
doTest(
"g%",
@ -673,6 +715,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing angle bracket`() {
doTest(
"g%",
@ -686,6 +729,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing angle bracket when on whitespace`() {
doTest(
"g%",
@ -695,6 +739,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to last angle bracket when in tag body`() {
doTest(
"g%",
@ -708,6 +753,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to opening angle bracket`() {
doTest(
"g%",
@ -721,6 +767,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to matching square bracket inside tag`() {
doTest(
"g%",
@ -734,6 +781,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to matching parenthesis inside tag`() {
doTest(
"g%",
@ -747,6 +795,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to matching curly brace in tag body`() {
doTest(
"g%",
@ -760,6 +809,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to closing tag when inside brackets in opening tag`() {
doTest(
"g%",
@ -773,6 +823,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump to opening curly brace when in tag body`() {
doTest(
"g%",
@ -786,6 +837,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test don't reverse jump on standalone tag with brackets on the same line`() {
doTest(
"g%",
@ -799,6 +851,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from opening to closing tag while ignoring comments`() {
doTest(
"g%",
@ -828,6 +881,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from closing to opening tag while ignoring comments`() {
doTest(
"g%",
@ -857,6 +911,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from opening to closing tag inside a comment block`() {
doTest(
"g%",
@ -874,6 +929,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from closing to opening tag inside a comment block`() {
doTest(
"g%",
@ -891,6 +947,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from opening to closing angle bracket inside a comment block`() {
doTest(
"g%",
@ -908,6 +965,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from closing to opening angle bracket inside a comment block`() {
doTest(
"g%",
@ -925,6 +983,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from opening to closing angle bracket on a comment marker`() {
doTest(
"g%",
@ -942,6 +1001,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test reverse jump from opening to closing angle bracket ignoring bracket in string`() {
doTest(
"g%",
@ -955,6 +1015,7 @@ class MatchitHtmlTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test jump from multiline opening tag to closing`() {
doTest(
"%",

View File

@ -34,6 +34,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
enableExtensions("multiple-cursors")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testNextOccurrence() {
val before = """public class ChangeLineAction extends EditorAction {
public ChangeLineAction() {
@ -73,6 +74,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testAllOccurrencesIterative() {
val before = """public class ChangeLineAction extends EditorAction {
public ChangeLineAction() {
@ -112,6 +114,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testNotWholeOccurrence() {
val before = """Int
|Integer
@ -136,6 +139,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectSubstring() {
val before = """q${c}we
|asdqweasd
@ -154,6 +158,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectSingleOccurrence() {
val before = """q${c}we
|asd
@ -176,6 +181,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectionWithMultipleCarets() {
val before = """qwe
|sdfgdfs${c}fdasfg
@ -189,6 +195,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(before)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectAll() {
val before = """qwe
|asd
@ -209,6 +216,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectAllNotWhole() {
val before = """Int
|Integer
@ -232,6 +240,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectAllSingleOccurrence() {
val before = """qwe
|asd
@ -258,6 +267,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
"additional cursors. IdeaVim has native support, so doesn't track if a selection is due to an additional cursor " +
"so IdeaVim will remove arbitrary selections, while vim-multiple-cursors do not."
)
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testRemoveSelectionVisualMode() {
val before = """q${s}we
|dsgkldfjs ldfl gkjsdsl kj
@ -277,6 +287,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testRemoveSubSelection() {
val before = """Int
|kekInteger
@ -293,6 +304,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testRemoveOccurrence() {
val before = """private i${c}nt a = 0;
|private int b = 1;
@ -313,6 +325,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSkipOccurrence() {
val before = """pr${c}ivate int a = 0;
|private int b = 1;
@ -330,6 +343,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSkipAndThenSelectAllOccurrences() {
val before = """pr${c}ivate int a = 0;
|private int b = 1;
@ -347,6 +361,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSeveralActions() {
val before = """public class Main {
| public static void main(String[] args) {
@ -415,6 +430,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(afterInsert)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSelectTwice() {
val before = """qwe
|asd
@ -439,6 +455,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSkipSelectionSubstring() {
val before = """qw${c}e
|asdqweasd
@ -459,6 +476,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testSkipSelectionVisualMode() {
val before = """q${s}we
|dsgkldfjs ldfl gkjsdsl kj
@ -473,6 +491,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(before)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testAddSelectionVisualMode() {
val before = """jdfsg sdf${c}dfkgjhfkgkldfjsg
|dfkjghdfsgs
@ -487,6 +506,7 @@ class VimMultipleCursorsExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun testNextOccurrenceCaseSensitive() {
val before = """@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun getCellType(${c}pos: VisualPosition): CellType {
@ -537,6 +557,7 @@ fun getCellType(${s}pos$se: VisualPosition): CellType {
doTest(keys, before, after, VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test pattern is always case sensitive`() {
val before = """test ${c}Test tEst TeSt tEST Test test Test test"""
configureByText(before)
@ -547,6 +568,7 @@ fun getCellType(${s}pos$se: VisualPosition): CellType {
assertState(after)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test ignores regex in search pattern`() {
val before = "test ${s}t.*st${c}$se toast tallest t.*st"
val editor = configureByText(before)

View File

@ -19,6 +19,8 @@
package org.jetbrains.plugins.ideavim.extension.paragraphmotion
import com.maddyhome.idea.vim.command.VimStateMachine
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
class ParagraphMotionTest : VimTestCase() {
@ -28,6 +30,7 @@ class ParagraphMotionTest : VimTestCase() {
enableExtensions("vim-paragraph-motion")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph next without whitespace`() {
val before = """I found it in a legendary land
|${c}all rocks and lavender and tufted grass,
@ -42,6 +45,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("}", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph next with whitespace`() {
val before = """I found it in a legendary land
|${c}all rocks and lavender and tufted grass,
@ -56,6 +60,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("}", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph next with whitespace visual`() {
val before = """I found it in a legendary land
|${c}all rocks and lavender and tufted grass,
@ -70,6 +75,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("v}", before, after, VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph next with whitespace delete`() {
val before = """I found it in a legendary land
|${c}all rocks and lavender and tufted grass,
@ -84,6 +90,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("d}", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph prev without whitespace`() {
val before = """I found it in a legendary land
|all rocks and lavender and tufted grass,
@ -98,6 +105,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("{", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph prev with whitespace`() {
val before = """I found it in a legendary land
|all rocks and lavender and tufted grass,
@ -112,6 +120,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("{", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph prev with whitespace visual`() {
val before = """I found it in a legendary land
|all rocks and lavender and tufted grass,
@ -126,6 +135,7 @@ class ParagraphMotionTest : VimTestCase() {
doTest("v{", before, after, VimStateMachine.Mode.VISUAL, VimStateMachine.SubMode.VISUAL_CHARACTER)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test paragraph prev with whitespace delete`() {
val before = """I found it in a legendary land
|all rocks and lavender and tufted grass,

View File

@ -25,6 +25,8 @@ import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import com.maddyhome.idea.vim.newapi.vim
import com.maddyhome.idea.vim.register.RegisterConstants.UNNAMED_REGISTER
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
import org.jetbrains.plugins.ideavim.rangeOf
@ -35,6 +37,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
enableExtensions("ReplaceWithRegister")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with empty register`() {
val text = "one ${c}two three"
VimPlugin.getRegister().resetRegisters()
@ -44,6 +47,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertState(text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test simple replace`() {
val text = "one ${c}two three"
@ -54,6 +58,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertEquals("one", VimPlugin.getRegister().lastRegister?.text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test empty text`() {
val text = ""
@ -63,6 +68,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertState("on${c}e")
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with empty text`() {
val text = "${c}one"
@ -72,6 +78,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertState(c)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace use different register`() {
val text = "one ${c}two three four"
@ -84,6 +91,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertEquals("two", VimPlugin.getRegister().lastRegister?.text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace use clipboard register`() {
val text = "one ${c}two three four"
@ -93,6 +101,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertEquals("two", VimPlugin.getRegister().lastRegister?.text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace use wrong register`() {
val text = "one ${c}two three"
@ -101,6 +110,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertState(text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with line`() {
val text = """
|I fou${c}nd it in a legendary land|
@ -117,6 +127,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with line with clipboard register`() {
val text = """
|I fou${c}nd it in a legendary land|
@ -133,6 +144,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace block selection`() {
val text = """
${c}one two three
@ -153,6 +165,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with number`() {
val text = "one ${c}two three four"
@ -164,6 +177,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
}
@VimBehaviorDiffers("one on${c}e on${c}e four")
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test replace with multiple carets`() {
val text = "one ${c}two ${c}three four"
@ -174,6 +188,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertEquals("one", VimPlugin.getRegister().lastRegister?.text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test dot repeat`() {
val text = "one ${c}two three four"
@ -186,6 +201,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
// --------------------------------------- grr --------------------------
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line replace`() {
val text = """
I found it in ${c}a legendary land
@ -208,6 +224,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertEquals("legendary", VimPlugin.getRegister().lastRegister?.text)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line replace with line`() {
val text = """
I found it in ${c}a legendary land
@ -228,6 +245,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line replace with line empty line`() {
val text = """
I found it in ${c}a legendary land
@ -251,6 +269,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
}
@VimBehaviorDiffers(description = "Where is the new line comes from?...")
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line replace with block`() {
val text = """
${c}one two three
@ -281,6 +300,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
hard by the torrent of a mountain pass.
"""
)
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line with number`() {
val text = """
I found it in ${c}a legendary land
@ -301,6 +321,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line dot repeat`() {
val text = """
I found it in ${c}a legendary land
@ -329,6 +350,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
${c}where it was settled on some sodden sand
"""
)
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test line multicaret`() {
val text = """
I found it in ${c}a legendary land
@ -352,6 +374,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
// ------------------------------------- gr + visual ----------------------
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test visual replace`() {
val text = """
I ${c}found it in a legendary land
@ -375,6 +398,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test visual replace with line`() {
val text = """
|I fo${c}und it in a legendary land|
@ -396,6 +420,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test visual replace with two lines`() {
val text = """
|I found it in ${c}a legendary land|
@ -418,6 +443,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test visual line replace`() {
val text = """
I fo${c}und it in a legendary land
@ -440,6 +466,7 @@ class ReplaceWithRegisterTest : VimTestCase() {
assertMode(VimStateMachine.Mode.COMMAND)
}
@TestWithoutNeovim(reason = SkipNeovimReason.PLUGIN)
fun `test visual line replace with line`() {
val text = """
I fo${c}und it in a legendary land

View File

@ -23,6 +23,8 @@ package org.jetbrains.plugins.ideavim.extension.surround
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.command.VimStateMachine
import com.maddyhome.idea.vim.helper.VimBehaviorDiffers
import org.jetbrains.plugins.ideavim.SkipNeovimReason
import org.jetbrains.plugins.ideavim.TestWithoutNeovim
import org.jetbrains.plugins.ideavim.VimTestCase
/**
@ -37,6 +39,7 @@ class VimSurroundExtensionTest : VimTestCase() {
/* surround */
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundWordParens() {
val before = "if ${c}condition {\n" + "}\n"
val after = "if ${c}(condition) {\n" + "}\n"
@ -46,6 +49,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("yse(", before, "if ( condition ) {\n" + "}\n", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundWORDBlock() {
val before = "if (condition) ${c}return;\n"
val after = "if (condition) {return;}\n"
@ -55,6 +59,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ysE{", before, "if (condition) { return; }\n", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundWordArray() {
val before = "int foo = bar${c}index;"
val after = "int foo = bar[index];"
@ -64,6 +69,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("yse[", before, "int foo = bar[ index ];", VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundWordAngle() {
val before = "foo = new Bar${c}Baz();"
val after = "foo = new Bar<Baz>();"
@ -72,6 +78,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("yse>", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundQuotes() {
val before = "foo = ${c}new Bar.Baz;"
val after = "foo = \"new Bar.Baz\";"
@ -80,6 +87,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ys4w\"", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundTag() {
configureByText("Hello ${c}World!\n")
typeText(injector.parser.parseKeys("ysiw<em>"))
@ -87,6 +95,7 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-1569
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundTagWithAttributes() {
configureByText("Hello ${c}World!")
typeText(injector.parser.parseKeys("ysiw<span class=\"important\" data-foo=\"bar\">"))
@ -94,24 +103,28 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-1569
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurraungTagAsInIssue() {
configureByText("<p>${c}Hello</p>")
typeText(injector.parser.parseKeys("VS<div class = \"container\">"))
assertState("<div class = \"container\"><p>Hello</p></div>")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundCustomElement() {
configureByText("${c}Click me!")
typeText(injector.parser.parseKeys("VS<custom-button>"))
assertState("<custom-button>Click me!</custom-button>")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundFunctionName() {
configureByText("foo = b${c}ar")
typeText(injector.parser.parseKeys("ysiwfbaz"))
assertState("foo = ${c}baz(bar)")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundFunctionNameDoesNothingIfInputIsEmpty() {
// The cursor does not move. This is different from Vim
// where the cursor moves to the beginning of the text object.
@ -120,18 +133,21 @@ class VimSurroundExtensionTest : VimTestCase() {
assertState("foo = b${c}ar")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundFunctionNameWithInnerSpacing() {
configureByText("foo = b${c}ar")
typeText(injector.parser.parseKeys("ysiwFbaz"))
assertState("foo = ${c}baz( bar )")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundSpace() {
configureByText("foo(b${c}ar)")
typeText(injector.parser.parseKeys("csbs"))
assertState("foo${c} bar")
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatSurround() {
val before = "if ${c}condition {\n}\n"
val after = "if ((condition)) {\n}\n"
@ -139,6 +155,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("ysiw)", "l", "."), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatSurroundDouble() {
val before = "if ${c}condition {\n}\n"
val after = "if (((condition))) {\n}\n"
@ -146,6 +163,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("ysiw)", "l", ".", "l", "."), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatDifferentChanges() {
val before = """
if "${c}condition" { }
@ -159,6 +177,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("ysiw)", "cs\"'", "j", "."), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatWrapWithFunction() {
val before = """
if "${c}condition" { }
@ -178,6 +197,7 @@ class VimSurroundExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatWrapWithTag() {
val before = """
${c}abc
@ -193,6 +213,7 @@ class VimSurroundExtensionTest : VimTestCase() {
/* visual surround */
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testVisualSurroundWordParens() {
val before = "if ${c}condition {\n" + "}\n"
val after = "if ${c}(condition) {\n" + "}\n"
@ -210,6 +231,7 @@ class VimSurroundExtensionTest : VimTestCase() {
/* Delete surroundings */
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingParens() {
val before = "if (${c}condition) {\n" + "}\n"
val after = "if condition {\n" + "}\n"
@ -219,6 +241,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ds)", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingQuote() {
val before = "if (\"${c}foo\".equals(foo)) {\n" + "}\n"
val after = "if (${c}foo.equals(foo)) {\n" + "}\n"
@ -226,6 +249,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ds\"", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingBlock() {
val before = "if (condition) {${c}return;}\n"
val after = "if (condition) return;\n"
@ -235,6 +259,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ds{", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingArray() {
val before = "int foo = bar[${c}index];"
val after = "int foo = barindex;"
@ -244,6 +269,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ds[", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingAngle() {
val before = "foo = new Bar<${c}Baz>();"
val after = "foo = new BarBaz();"
@ -253,6 +279,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("ds<", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingTag() {
val before = "<div><p>${c}Foo</p></div>"
val after = "<div>${c}Foo</div>"
@ -261,6 +288,7 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-1085
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteSurroundingParamsAtLineEnd() {
val before = "Foo\n" + "Seq(\"-${c}Yrangepos\")\n"
val after = "Foo\n" + "Seq\"-Yrangepos\"\n"
@ -269,6 +297,7 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-1085
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteMultiLineSurroundingParamsAtLineEnd() {
val before = "Foo\n" +
"Bar\n" +
@ -285,6 +314,7 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-2227
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testDeleteInvalidSurroundingCharacter() {
val text = "if (${c}condition) {"
@ -294,6 +324,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("yibds{", text, text, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatDeleteSurroundParens() {
val before = "if ((${c}condition)) {\n}\n"
val after = "if condition {\n}\n"
@ -301,6 +332,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("dsb."), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatDeleteSurroundQuotes() {
val before = "if (\"${c}condition\") {\n}\n"
val after = "if (condition) {\n}\n"
@ -310,6 +342,7 @@ class VimSurroundExtensionTest : VimTestCase() {
/* Change surroundings */
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testChangeSurroundingParens() {
val before = "if (${c}condition) {\n" + "}\n"
val after = "if [condition] {\n" + "}\n"
@ -317,6 +350,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("csbr"), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testChangeSurroundingBlock() {
val before = "if (condition) {${c}return;}"
val after = "if (condition) (return;)"
@ -324,6 +358,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("csBb"), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testChangeSurroundingTagSimple() {
val before = "<div><p>${c}Foo</p></div>"
val after = "<div>${c}(Foo)</div>"
@ -331,6 +366,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("cstb"), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testChangeSurroundingTagAnotherTag() {
val before = "<div><p>${c}Foo</p></div>"
val after = "<div>${c}<b>Foo</b></div>"
@ -338,6 +374,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("cst<b>"), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testRepeatChangeSurroundingParens() {
val before = "foo(${c}index)(index2) = bar;"
val after = "foo[index][index2] = bar;"
@ -346,6 +383,7 @@ class VimSurroundExtensionTest : VimTestCase() {
}
// VIM-2227
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testChangeInvalidSurroundingCharacter() {
val text = "if (${c}condition) {"
@ -366,6 +404,7 @@ class VimSurroundExtensionTest : VimTestCase() {
<p>Some text</p>
"""
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test wrap with tag full line`() {
doTest(
listOf("VS<p>"),
@ -398,6 +437,7 @@ class VimSurroundExtensionTest : VimTestCase() {
</div>
"""
)
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test wrap with tag full line in middle`() {
doTest(
listOf("VS<p>"),
@ -419,6 +459,7 @@ class VimSurroundExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test wrap line with char selection`() {
doTest(
listOf("vawES<p>"),
@ -440,6 +481,7 @@ class VimSurroundExtensionTest : VimTestCase() {
)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testWithAnExistingMapping() {
val before = "(foo)"
val after = "[foo]"
@ -451,6 +493,7 @@ class VimSurroundExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test change new line`() {
val before = """
"\n"
@ -462,6 +505,7 @@ class VimSurroundExtensionTest : VimTestCase() {
assertState(after)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testMappingSurroundPlugin() {
val before = "if (condition) ${c}return;\n"
val after = "if (condition) \"return\";\n"
@ -469,6 +513,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(":map gw ysiw\"<CR>gw", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundPluginWithMacro() {
val before = """
if (con${c}dition) return;
@ -482,6 +527,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest("qqds)qj@q", before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun testSurroundPluginWithMacroAndMapping() {
val before = """
if (con${c}dition) return;
@ -496,6 +542,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test change surround with multicaret`() {
val before = """
(${c}abc)
@ -509,6 +556,7 @@ class VimSurroundExtensionTest : VimTestCase() {
doTest(listOf("cs(]"), before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE)
}
@TestWithoutNeovim(SkipNeovimReason.PLUGIN)
fun `test delete surround with multicaret`() {
val before = """
(${c}abc)

View File

@ -64,7 +64,7 @@ class IncrementDecrementTest : VimPropertyTestBase() {
moveCaretToRandomPlace(env, editor)
NeovimTesting.setupEditor(editor, this)
NeovimTesting.typeCommand(":set nrformats+=octal<CR>", this, editor)
NeovimTesting.typeCommand(":set nrformats+=octal<CR>", this)
env.executeCommands(Generator.sampledFrom(IncrementDecrementActions(editor, this)))
@ -84,7 +84,7 @@ private class IncrementDecrementActions(private val editor: Editor, val test: Vi
val action = injector.parser.parseKeys(key).single()
env.logMessage("Use command: ${injector.parser.toKeyNotation(action)}.")
VimTestCase.typeText(listOf(action), editor, editor.project)
NeovimTesting.typeCommand(key, test, editor)
NeovimTesting.typeCommand(key, test)
IdeEventQueue.getInstance().flushQueue()
PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue()

View File

@ -158,8 +158,8 @@ abstract class VimChangeGroupBase : VimChangeGroup {
}
}
if (type == null ||
operatorArguments.mode.inInsertMode || caret.registerStorage.storeText(editor, updatedRange, type, true) ||
caret != editor.primaryCaret() // sticky tape for VIM-2703 todo remove in the next release
operatorArguments.mode.inInsertMode || caret.registerStorage.storeText(editor, updatedRange, type, true)
|| caret != editor.primaryCaret() // sticky tape for VIM-2703 todo remove in the next release
) {
val startOffsets = updatedRange.startOffsets
val endOffsets = updatedRange.endOffsets

View File

@ -179,8 +179,7 @@ abstract class VimOptionServiceBase : OptionService {
}
},
ToggleOption(OptionConstants.experimentalapiName, OptionConstants.experimentalapiAlias, false),
ToggleOption("closenotebooks", "closenotebooks", true),
ToggleOption(OptionConstants.experimentalapiName, OptionConstants.experimentalapiAlias, false)
)
private val globalValues = mutableMapOf<String, VimDataType>()

View File

@ -35,18 +35,6 @@ import com.maddyhome.idea.vim.vimscript.model.ExecutionResult
data class CmdCommand(val ranges: Ranges, val argument: String) : Command.SingleExecution(ranges) {
override val argFlags = flags(RangeFlag.RANGE_FORBIDDEN, ArgumentFlag.ARGUMENT_OPTIONAL, Access.READ_ONLY)
private val unsupportedArgs = listOf(
Regex("-range(=[^ ])?") to "-range",
Regex("-complete=[^ ]*") to "-complete",
Regex("-count=[^ ]*") to "-count",
Regex("-addr=[^ ]*") to "-addr",
Regex("-bang") to "-bang",
Regex("-bar") to "-bar",
Regex("-register") to "-register",
Regex("-buffer") to "-buffer",
Regex("-keepscript") to "-keepscript",
)
// Static definitions needed for aliases.
private companion object {
const val overridePrefix = "!"
@ -88,14 +76,6 @@ data class CmdCommand(val ranges: Ranges, val argument: String) : Command.Single
argument = argument.removePrefix(overridePrefix).trim()
}
for ((arg, message) in unsupportedArgs) {
val match = arg.find(argument)
match?.range?.let {
argument = argument.removeRange(it)
injector.messages.showStatusBarMessage("'$message' is not supported by `command`")
}
}
// Handle alias arguments
val hasArguments = argument.startsWith(argsPrefix)
var minNumberOfArgs = 0

View File

@ -30,6 +30,7 @@ data class Register(val char: Char) : Expression() {
override fun evaluate(editor: VimEditor, context: ExecutionContext, vimContext: VimLContext): VimDataType {
val register = injector.registerGroup.getRegister(char) ?: throw ExException("Register is not supported yet")
return VimString(injector.parser.toPrintableString(register.keys))
// todo Esc like keys should be one char
return VimString(injector.parser.toKeyNotation(register.keys))
}
}

View File

@ -112,8 +112,6 @@ interface VariableService {
*/
fun unlockVariable(variable: Variable, depth: Int, editor: VimEditor, context: ExecutionContext, vimContext: VimLContext)
fun getGlobalVariables(): Map<String, VimDataType>
/**
* Clears all global variables
*/

View File

@ -71,10 +71,6 @@ abstract class VimVariableServiceBase : VariableService {
value.unlockVar(depth)
}
override fun getGlobalVariables(): Map<String, VimDataType> {
return globalVariables
}
override fun storeVariable(variable: Variable, value: VimDataType, editor: VimEditor, context: ExecutionContext, vimContext: VimLContext) {
val scope = variable.scope ?: getDefaultVariableScope(vimContext)
val name = variable.name.evaluate(editor, context, vimContext).value