diff --git a/build.gradle.kts b/build.gradle.kts index 51790791d..5c11b8ece 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -71,6 +71,8 @@ dependencies { antlr("org.antlr:antlr4:$antlrVersion") api(project(":vim-engine")) + + testApi("com.squareup.okhttp3:okhttp:4.10.0") } configurations { diff --git a/gradle.properties b/gradle.properties index b6adae334..c8ebc23e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ downloadIdeaSources=true instrumentPluginCode=true version=SNAPSHOT javaVersion=11 -remoteRobotVersion=0.11.10 +remoteRobotVersion=0.11.15 antlrVersion=4.10.1 diff --git a/src/main/java/com/maddyhome/idea/vim/VimPlugin.java b/src/main/java/com/maddyhome/idea/vim/VimPlugin.java index 2df1a10c6..115895744 100644 --- a/src/main/java/com/maddyhome/idea/vim/VimPlugin.java +++ b/src/main/java/com/maddyhome/idea/vim/VimPlugin.java @@ -32,6 +32,7 @@ import com.intellij.openapi.keymap.ex.KeymapManagerEx; import com.intellij.openapi.keymap.impl.DefaultKeymap; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.SystemInfo; import com.maddyhome.idea.vim.api.VimInjectorKt; import com.maddyhome.idea.vim.api.VimKeyGroup; @@ -88,6 +89,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable private final @NotNull VimState state = new VimState(); + public Disposable onOffDisposable; + VimPlugin() { ApplicationConfigurationMigrator.getInstance().migrate(); } @@ -335,6 +338,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable * execution, what theoretically may cause bugs (e.g. VIM-2540) */ private void turnOnPlugin() { + onOffDisposable = Disposer.newDisposable(this, "IdeaVimOnOffDisposer"); + // 1) Update state ApplicationManager.getApplication().invokeLater(this::updateState); @@ -370,6 +375,8 @@ public class VimPlugin implements PersistentStateComponent<Element>, Disposable // Unregister vim actions in command mode RegisterActions.unregisterActions(); + + Disposer.dispose(onOffDisposable); } private boolean stateUpdated = false; diff --git a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt index ad266a9b9..8fac00005 100644 --- a/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt +++ b/src/main/java/com/maddyhome/idea/vim/listener/VimListenerManager.kt @@ -122,9 +122,9 @@ object VimListenerManager { VimPlugin.getOptionService().addListener(OptionConstants.guicursorName, GuicursorChangeListener) VimPlugin.getOptionService().addListener(OptionConstants.iskeywordName, KeywordOptionChangeListener, true) - EventFacade.getInstance().addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance()) + EventFacade.getInstance().addEditorFactoryListener(VimEditorFactoryListener, VimPlugin.getInstance().onOffDisposable) - EditorFactory.getInstance().eventMulticaster.addCaretListener(VimCaretListener, VimPlugin.getInstance()) + EditorFactory.getInstance().eventMulticaster.addCaretListener(VimCaretListener, VimPlugin.getInstance().onOffDisposable) } fun disable() { @@ -136,8 +136,6 @@ object VimListenerManager { VimPlugin.getOptionService().removeListener(OptionConstants.showcmdName, ShowCmdOptionChangeListener) VimPlugin.getOptionService().removeListener(OptionConstants.guicursorName, GuicursorChangeListener) VimPlugin.getOptionService().removeListener(OptionConstants.iskeywordName, KeywordOptionChangeListener) - - EditorFactory.getInstance().eventMulticaster.removeCaretListener(VimCaretListener) } } diff --git a/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt b/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt index bc49a7ad6..c6508c623 100644 --- a/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt +++ b/src/test/java/org/jetbrains/plugins/ideavim/RegisterActionsTest.kt @@ -38,14 +38,18 @@ class RegisterActionsTest : VimTestCase() { @TestWithoutNeovim(reason = SkipNeovimReason.EDITOR_MODIFICATION) fun `test action in disabled plugin`() { - 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(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) { - VimPlugin.setEnabled(false) + try { + 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(keys, before, after, VimStateMachine.Mode.COMMAND, VimStateMachine.SubMode.NONE) { + VimPlugin.setEnabled(false) + } + } finally { + VimPlugin.setEnabled(true) } } diff --git a/src/test/java/ui/UiTests.kt b/src/test/java/ui/UiTests.kt index 2f0114bda..f1ff1f11d 100644 --- a/src/test/java/ui/UiTests.kt +++ b/src/test/java/ui/UiTests.kt @@ -21,9 +21,7 @@ package ui import com.automation.remarks.junit.VideoRule import com.automation.remarks.video.annotations.Video import com.intellij.remoterobot.RemoteRobot -import com.intellij.remoterobot.fixtures.ComponentFixture import com.intellij.remoterobot.fixtures.ContainerFixture -import com.intellij.remoterobot.search.locators.byXpath import com.intellij.remoterobot.stepsProcessing.step import com.intellij.remoterobot.utils.keyboard import org.assertj.swing.core.MouseButton @@ -50,7 +48,6 @@ import ui.utils.tripleClickOnRight import ui.utils.uiTest import ui.utils.vimExit import java.awt.Point -import java.awt.event.KeyEvent import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -136,13 +133,8 @@ class UiTests { createNewProjectLink.click() dialog("New Project") { findText("Java").click() - find( - ComponentFixture::class.java, - byXpath("//div[@class='FrameworksTree']") - ).findText("Kotlin/JVM").click() - runJs("robot.pressAndReleaseKey(${KeyEvent.VK_SPACE})") - button("Next").click() - button("Finish").click() + checkBox("Add sample code").select() + button("Create").click() } } } diff --git a/src/test/java/ui/utils/UiTestWrapper.kt b/src/test/java/ui/utils/UiTestWrapper.kt index fa2dd6daa..81462d173 100644 --- a/src/test/java/ui/utils/UiTestWrapper.kt +++ b/src/test/java/ui/utils/UiTestWrapper.kt @@ -72,6 +72,6 @@ private fun saveFile(url: String, folder: String, name: String): File { return File(folder).apply { mkdirs() }.resolve(name).apply { - writeText(response.body()?.string() ?: "") + writeText(response.body?.string() ?: "") } }