diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt index 698592da58..3a50782b5c 100644 --- a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt +++ b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt @@ -8,7 +8,6 @@ package org.jetbrains.plugins.ideavim import com.intellij.testFramework.LoggedErrorProcessor -import com.intellij.testFramework.TestLoggerFactory.TestLoggerAssertionError import org.junit.jupiter.api.assertThrows import org.junit.jupiter.api.fail @@ -32,7 +31,7 @@ object OnlyThrowLoggedErrorProcessor : LoggedErrorProcessor() { * Asserts that [T] was thrown via `LOG.error("message", e)` call where `e` has a type of [T]. */ inline fun assertThrowsLogError(crossinline action: () -> Unit): T { - val exception = assertThrows { + val exception = assertThrows { LoggedErrorProcessor.executeWith(OnlyThrowLoggedErrorProcessor) { action() } diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt index 86b4eaa70e..8582052645 100644 --- a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt +++ b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/VimTestCase.kt @@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.actionSystem.PlatformCoreDataKeys import com.intellij.openapi.actionSystem.ex.ActionUtil import com.intellij.openapi.actionSystem.impl.SimpleDataContext +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.PathManager import com.intellij.openapi.application.WriteAction import com.intellij.openapi.diagnostic.thisLogger @@ -350,9 +351,15 @@ abstract class VimNoWriteActionTestCase { protected fun configureByText(fileType: FileType, content: String): Editor { fixture.configureByText(fileType, content) - setDefaultIntelliJSettings(fixture.editor) + // Note: Change to coroutines + ApplicationManager.getApplication().invokeAndWait { + setDefaultIntelliJSettings(fixture.editor) + } NeovimTesting.setupEditor(fixture.editor, testInfo) - setEditorVisibleSize(screenWidth, screenHeight) + // Note: Change to coroutines + ApplicationManager.getApplication().invokeAndWait { + setEditorVisibleSize(screenWidth, screenHeight) + } return fixture.editor } @@ -444,7 +451,11 @@ abstract class VimNoWriteActionTestCase { protected fun typeText(vararg keys: String) = typeText(keys.flatMap { injector.parser.parseKeys(it) }) protected fun typeText(keys: List): Editor { - return typeText(fixture.editor, keys) + var editor: Editor? = null + ApplicationManager.getApplication().invokeAndWait { + editor = typeText(fixture.editor, keys) + } + return editor!! } protected fun typeText(editor: Editor, keys: List): Editor { @@ -601,8 +612,10 @@ abstract class VimNoWriteActionTestCase { ) } assertEquals(expectedOffsets.size, carets.size, "Wrong amount of carets") - for (i in expectedOffsets.indices) { - assertEquals(expectedOffsets[i], carets[i].offset) + ApplicationManager.getApplication().runReadAction { + for (i in expectedOffsets.indices) { + assertEquals(expectedOffsets[i], carets[i].offset) + } } NeovimTesting.assertState(fixture.editor, testInfo) @@ -700,7 +713,12 @@ abstract class VimNoWriteActionTestCase { } fun assertSelection(expected: String?) { - val selected = fixture.editor.selectionModel.selectedText + var selected: String? = null + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runReadAction { + selected = fixture.editor.selectionModel.selectedText + } + } assertEquals(expected, selected) } @@ -890,7 +908,9 @@ abstract class VimNoWriteActionTestCase { protected fun performTest(keys: String, after: String, modeAfter: Mode) { typeText(keys) - PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() + ApplicationManager.getApplication().invokeAndWait { + PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() + } assertState(after) assertState(modeAfter) } diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt index e062f66819..e9de192b0f 100644 --- a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt +++ b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt @@ -9,6 +9,7 @@ package org.jetbrains.plugins.ideavim import com.intellij.ide.IdeEventQueue +import com.intellij.openapi.application.ApplicationManager import com.intellij.testFramework.fixtures.CodeInsightTestFixture import com.intellij.util.containers.toArray import com.maddyhome.idea.vim.api.injector @@ -55,14 +56,16 @@ annotation class VimBehaviorDiffers( val shouldBeFixed: Boolean = true, ) -inline fun waitAndAssert(timeInMillis: Int = 1000, condition: () -> Boolean) { - val end = System.currentTimeMillis() + timeInMillis - while (end > System.currentTimeMillis()) { - Thread.sleep(10) - IdeEventQueue.getInstance().flushQueue() - if (condition()) return +inline fun waitAndAssert(timeInMillis: Int = 1000, crossinline condition: () -> Boolean) { + ApplicationManager.getApplication().invokeAndWait { + val end = System.currentTimeMillis() + timeInMillis + while (end > System.currentTimeMillis()) { + Thread.sleep(10) + IdeEventQueue.getInstance().flushQueue() + if (condition()) return@invokeAndWait + } + fail() } - fail() } fun assertHappened(timeInMillis: Int = 1000, precision: Int, condition: () -> Boolean) { @@ -72,14 +75,16 @@ fun assertHappened(timeInMillis: Int = 1000, precision: Int, condition: () -> Bo } fun assertDoesntChange(timeInMillis: Int = 1000, condition: () -> Boolean) { - val end = System.currentTimeMillis() + timeInMillis - while (end > System.currentTimeMillis()) { - if (!condition()) { - fail() - } + ApplicationManager.getApplication().invokeAndWait { + val end = System.currentTimeMillis() + timeInMillis + while (end > System.currentTimeMillis()) { + if (!condition()) { + fail() + } - Thread.sleep(10) - IdeEventQueue.getInstance().flushQueue() + Thread.sleep(10) + IdeEventQueue.getInstance().flushQueue() + } } } diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/VimJavaTestCase.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/VimJavaTestCase.kt index b1e0ab0a8b..9e66edfdde 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/VimJavaTestCase.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/VimJavaTestCase.kt @@ -10,6 +10,6 @@ package org.jetbrains.plugins.ideavim import com.intellij.ide.highlighter.JavaFileType -abstract class VimJavaTestCase : VimTestCase() { +abstract class VimJavaTestCase : VimNoWriteActionTestCase() { protected fun configureByJavaText(content: String) = configureByText(JavaFileType.INSTANCE, content) } \ No newline at end of file diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/ChangeActionJavaTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/ChangeActionJavaTest.kt index ee9bc60440..5e00390483 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/ChangeActionJavaTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/ChangeActionJavaTest.kt @@ -10,6 +10,7 @@ package org.jetbrains.plugins.ideavim.action import com.intellij.codeInsight.folding.CodeFoldingManager import com.intellij.codeInsight.folding.impl.FoldingUtil +import com.intellij.openapi.application.ApplicationManager import com.maddyhome.idea.vim.api.injector import org.jetbrains.plugins.ideavim.SkipNeovimReason import org.jetbrains.plugins.ideavim.TestWithoutNeovim @@ -135,12 +136,24 @@ and some text after""", and some text after """.trimIndent(), ) - CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) - assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, true) + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runWriteAction { + CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) + assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, true) + } + } typeText(injector.parser.parseKeys("za")) - assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, false) + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runWriteAction { + assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, false) + } + } typeText(injector.parser.parseKeys("za")) - assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, true) + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runWriteAction { + assertEquals(FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded, true) + } + } } // VIM-287 |zc| |o| @@ -158,9 +171,11 @@ and some text after""", """.trimIndent(), ) - fixture.editor.foldingModel.runBatchFoldingOperation { - CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) - FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded = false + ApplicationManager.getApplication().invokeAndWait { + fixture.editor.foldingModel.runBatchFoldingOperation { + CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) + FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded = false + } } typeText(injector.parser.parseKeys("o")) diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/change/insert/VisualBlockInsertActionJavaTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/change/insert/VisualBlockInsertActionJavaTest.kt index 00a31270e1..b7a3ab19f8 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/change/insert/VisualBlockInsertActionJavaTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/change/insert/VisualBlockInsertActionJavaTest.kt @@ -10,6 +10,7 @@ package org.jetbrains.plugins.ideavim.action.change.insert import com.intellij.codeInsight.folding.CodeFoldingManager import com.intellij.codeInsight.folding.impl.FoldingUtil +import com.intellij.openapi.application.ApplicationManager import com.maddyhome.idea.vim.api.injector import org.jetbrains.plugins.ideavim.SkipNeovimReason import org.jetbrains.plugins.ideavim.TestWithoutNeovim @@ -30,9 +31,11 @@ bar """, ) - fixture.editor.foldingModel.runBatchFoldingOperation { - CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) - FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded = false + ApplicationManager.getApplication().invokeAndWait { + fixture.editor.foldingModel.runBatchFoldingOperation { + CodeFoldingManager.getInstance(fixture.project).updateFoldRegions(fixture.editor) + FoldingUtil.findFoldRegionStartingAtLine(fixture.editor, 0)!!.isExpanded = false + } } typeText(injector.parser.parseKeys("j" + "" + "j" + "I" + "X" + "")) diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/search/SearchAgainNextActionJavaTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/search/SearchAgainNextActionJavaTest.kt index 5fa321f252..ebdb64a29e 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/search/SearchAgainNextActionJavaTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/search/SearchAgainNextActionJavaTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.plugins.ideavim.action.motion.search +import com.intellij.openapi.application.ApplicationManager import com.maddyhome.idea.vim.api.getVisualLineCount import com.maddyhome.idea.vim.newapi.vim import org.jetbrains.plugins.ideavim.VimJavaTestCase @@ -26,14 +27,18 @@ class SearchAgainNextActionJavaTest : VimJavaTestCase() { """.trimIndent() ) - val foldingModel = fixture.editor.foldingModel - foldingModel.runBatchFoldingOperation { - val foldRegion = foldingModel.addFoldRegion(61, 71, "pupa") - foldRegion!!.isExpanded = false + ApplicationManager.getApplication().invokeAndWait { + val foldingModel = fixture.editor.foldingModel + foldingModel.runBatchFoldingOperation { + val foldRegion = foldingModel.addFoldRegion(61, 71, "pupa") + foldRegion!!.isExpanded = false + } + assertEquals(2, fixture.editor.vim.getVisualLineCount()) } - assertEquals(2, fixture.editor.vim.getVisualLineCount()) typeText("/pupa") - assertEquals(4, fixture.editor.vim.getVisualLineCount()) + ApplicationManager.getApplication().invokeAndWait { + assertEquals(4, fixture.editor.vim.getVisualLineCount()) + } } } diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionJavaTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionJavaTest.kt index b4ccbf5a3d..5b6f8ab479 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionJavaTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/action/motion/updown/MotionDownActionJavaTest.kt @@ -8,6 +8,7 @@ package org.jetbrains.plugins.ideavim.action.motion.updown +import com.intellij.openapi.application.ApplicationManager import com.maddyhome.idea.vim.api.getVisualLineCount import com.maddyhome.idea.vim.newapi.vim import org.jetbrains.plugins.ideavim.VimJavaTestCase @@ -24,14 +25,18 @@ class MotionDownActionJavaTest : VimJavaTestCase() { */ """.trimIndent()) - val foldingModel = fixture.editor.foldingModel - foldingModel.runBatchFoldingOperation { - val foldRegion = foldingModel.addFoldRegion(61, 71, "pupa") - foldRegion!!.isExpanded = false + ApplicationManager.getApplication().invokeAndWait { + val foldingModel = fixture.editor.foldingModel + foldingModel.runBatchFoldingOperation { + val foldRegion = foldingModel.addFoldRegion(61, 71, "pupa") + foldRegion!!.isExpanded = false + } + assertEquals(2, fixture.editor.vim.getVisualLineCount()) } - assertEquals(2, fixture.editor.vim.getVisualLineCount()) typeText("gg" + "$" + "j") - assertEquals(2, fixture.editor.vim.getVisualLineCount()) + ApplicationManager.getApplication().invokeAndWait { + assertEquals(2, fixture.editor.vim.getVisualLineCount()) + } } } \ No newline at end of file diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandJavaTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandJavaTest.kt index 343cc6dfca..a990d5e9af 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandJavaTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/ex/implementation/commands/MapCommandJavaTest.kt @@ -9,9 +9,9 @@ package org.jetbrains.plugins.ideavim.ex.implementation.commands import com.intellij.openapi.actionSystem.DataContext +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.textarea.TextComponentEditorImpl import com.intellij.openapi.util.Disposer -import com.intellij.testFramework.TestLoggerFactory import com.maddyhome.idea.vim.api.injector import com.maddyhome.idea.vim.ex.ExException import com.maddyhome.idea.vim.newapi.vim @@ -178,15 +178,17 @@ class MapCommandJavaTest : VimJavaTestCase() { typeText(commandToKeys("map kk l")) typeText(injector.parser.parseKeys("k")) - checkDelayedMapping( - text, - """ + ApplicationManager.getApplication().invokeAndWait { + checkDelayedMapping( + text, + """ -$c---- 12345 abcde ----- """.trimIndent(), - ) + ) + } } @TestWithoutNeovim(reason = SkipNeovimReason.DIFFERENT) @@ -204,15 +206,17 @@ class MapCommandJavaTest : VimJavaTestCase() { typeText(commandToKeys("map kk l")) typeText(injector.parser.parseKeys("k")) - checkDelayedMapping( - text, - """ + ApplicationManager.getApplication().invokeAndWait { + checkDelayedMapping( + text, + """ ----- 12345 a${c}bcde ----- """.trimIndent(), - ) + ) + } } @TestWithoutNeovim(SkipNeovimReason.DIFFERENT) @@ -233,15 +237,17 @@ class MapCommandJavaTest : VimJavaTestCase() { typeText(commandToKeys("map jz w")) typeText(injector.parser.parseKeys("k")) - checkDelayedMapping( - text, - """ + ApplicationManager.getApplication().invokeAndWait { + checkDelayedMapping( + text, + """ ----- ${c}12345 abcde ----- """.trimIndent(), - ) + ) + } } @Test @@ -349,10 +355,10 @@ class MapCommandJavaTest : VimJavaTestCase() { indicateErrors = true, null, ) - val exception = assertThrowsLogError { + val exception = assertThrowsLogError { typeText(injector.parser.parseKeys("t")) } - assertIs(exception.cause) // Exception is wrapped into LOG.error twice + assertIs(exception.cause!!.cause) // Exception is wrapped into LOG.error twice assertPluginError(true) assertPluginErrorMessageContains("E121: Undefined variable: s:mapping") @@ -374,15 +380,17 @@ class MapCommandJavaTest : VimJavaTestCase() { typeText(commandToKeys("map kk h")) typeText(injector.parser.parseKeys("kk")) - checkDelayedMapping( - text, - """ + ApplicationManager.getApplication().invokeAndWait { + checkDelayedMapping( + text, + """ ----- ${c}12345 abcde ----- """.trimIndent(), - ) + ) + } assertMode(Mode.NORMAL()) } @@ -397,10 +405,11 @@ class MapCommandJavaTest : VimJavaTestCase() { """.trimIndent() configureByJavaText(text) - assertThrowsLogError { + val exception = assertThrowsLogError { typeText(commandToKeys("inoremap unknownFunction() ? '\\' : '\\u\\'")) typeText(injector.parser.parseKeys("i")) } + assertIs(exception.cause) assertPluginError(true) assertPluginErrorMessageContains("E117: Unknown function: unknownFunction") diff --git a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/group/visual/TemplateTest.kt b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/group/visual/TemplateTest.kt index 31bb607abb..711d9aa36e 100644 --- a/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/group/visual/TemplateTest.kt +++ b/tests/java-tests/src/test/kotlin/org/jetbrains/plugins/ideavim/group/visual/TemplateTest.kt @@ -16,7 +16,9 @@ import com.intellij.codeInsight.template.TemplateManager import com.intellij.codeInsight.template.impl.TemplateManagerImpl import com.intellij.ide.DataManager import com.intellij.injected.editor.EditorWindow +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.Editor +import com.intellij.psi.PsiElement import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler import com.intellij.testFramework.PlatformTestUtil import com.intellij.testFramework.fixtures.CodeInsightTestUtil.doInlineRename @@ -65,7 +67,9 @@ class TemplateTest : VimJavaTestCase() { } """.trimIndent(), ) - doInlineRename(VariableInplaceRenameHandler(), "myNewVar", fixture) + ApplicationManager.getApplication().invokeAndWait { + doInlineRename(VariableInplaceRenameHandler(), "myNewVar", fixture) + } assertState( """ class Hello { @@ -143,7 +147,9 @@ class TemplateTest : VimJavaTestCase() { waitAndAssertMode(fixture, Mode.SELECT(SelectionType.CHARACTER_WISE)) assertState(Mode.SELECT(SelectionType.CHARACTER_WISE)) - LookupManager.hideActiveLookup(fixture.project) + ApplicationManager.getApplication().invokeAndWait { + LookupManager.hideActiveLookup(fixture.project) + } typeText(injector.parser.parseKeys("")) assertState(Mode.INSERT) typeText(injector.parser.parseKeys("pre" + "")) @@ -176,7 +182,9 @@ class TemplateTest : VimJavaTestCase() { waitAndAssertMode(fixture, Mode.SELECT(SelectionType.CHARACTER_WISE)) assertState(Mode.SELECT(SelectionType.CHARACTER_WISE)) - LookupManager.hideActiveLookup(fixture.project) + ApplicationManager.getApplication().invokeAndWait { + LookupManager.hideActiveLookup(fixture.project) + } typeText(injector.parser.parseKeys("")) assertState(Mode.INSERT) assertState( @@ -206,7 +214,9 @@ class TemplateTest : VimJavaTestCase() { waitAndAssertMode(fixture, Mode.SELECT(SelectionType.CHARACTER_WISE)) assertState(Mode.SELECT(SelectionType.CHARACTER_WISE)) - LookupManager.hideActiveLookup(fixture.project) + ApplicationManager.getApplication().invokeAndWait { + LookupManager.hideActiveLookup(fixture.project) + } typeText(injector.parser.parseKeys("")) assertState(Mode.INSERT) assertState( @@ -236,7 +246,9 @@ class TemplateTest : VimJavaTestCase() { waitAndAssertMode(fixture, Mode.SELECT(SelectionType.CHARACTER_WISE)) assertState(Mode.SELECT(SelectionType.CHARACTER_WISE)) - LookupManager.hideActiveLookup(fixture.project) + ApplicationManager.getApplication().invokeAndWait { + LookupManager.hideActiveLookup(fixture.project) + } typeText(injector.parser.parseKeys("")) assertState(Mode.INSERT) assertState( @@ -527,8 +539,12 @@ class TemplateTest : VimJavaTestCase() { template.addVariable("V1", "", "\"123\"", true) template.addVariable("V2", "", "\"239\"", true) - manager.startTemplate(fixture.editor, template) - PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runWriteAction { + manager.startTemplate(fixture.editor, template) + } + PlatformTestUtil.dispatchAllInvocationEventsInIdeEventQueue() + } assertMode(Mode.NORMAL()) assertOffset(2) @@ -555,7 +571,9 @@ class TemplateTest : VimJavaTestCase() { ) startRenaming(VariableInplaceRenameHandler()) val lookupValue = fixture.lookupElementStrings?.get(0) ?: kotlin.test.fail() - fixture.finishLookup(Lookup.NORMAL_SELECT_CHAR) + ApplicationManager.getApplication().invokeAndWait { + fixture.finishLookup(Lookup.NORMAL_SELECT_CHAR) + } assertState( """ class Hello { @@ -570,7 +588,15 @@ class TemplateTest : VimJavaTestCase() { private fun startRenaming(handler: VariableInplaceRenameHandler): Editor { val editor = if (fixture.editor is EditorWindow) (fixture.editor as EditorWindow).delegate else fixture.editor - handler.doRename(fixture.elementAtCaret, editor, dataContext) + var elementToRename: PsiElement? = null + ApplicationManager.getApplication().invokeAndWait { + ApplicationManager.getApplication().runReadAction { + elementToRename = fixture.elementAtCaret + } + ApplicationManager.getApplication().runWriteAction { + handler.doRename(elementToRename!!, editor, dataContext) + } + } return editor }