diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/OnlyThrowLoggedErrorProcessor.kt
index 698592da5..3a50782b5 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 <reified T : Throwable> assertThrowsLogError(crossinline action: () -> Unit): T {
-  val exception = assertThrows<TestLoggerAssertionError> {
+  val exception = assertThrows<Throwable> {
     LoggedErrorProcessor.executeWith<Throwable>(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 86b4eaa70..858205264 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<KeyStroke?>): 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<KeyStroke?>): 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 e062f6681..e9de192b0 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 b1e0ab0a8..9e66edfdd 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 ee9bc6044..5e0039048 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 00a31270e..b7a3ab19f 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" + "<C-V>" + "j" + "I" + "X" + "<Esc>"))
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 5fa321f25..ebdb64a29 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<CR>")
-    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 b4ccbf5a3..5b6f8ab47 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 343cc6dfc..a990d5e9a 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<TestLoggerFactory.TestLoggerAssertionError> {
+    val exception = assertThrowsLogError<Throwable> {
       typeText(injector.parser.parseKeys("t"))
     }
-    assertIs<ExException>(exception.cause) // Exception is wrapped into LOG.error twice
+    assertIs<ExException>(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<ExException> {
+    val exception = assertThrowsLogError<Throwable> {
       typeText(commandToKeys("inoremap <expr> <cr> unknownFunction() ? '\\<C-y>' : '\\<C-g>u\\<CR>'"))
       typeText(injector.parser.parseKeys("i<CR>"))
     }
+    assertIs<ExException>(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 31bb607ab..711d9aa36 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("<Left>"))
     assertState(Mode.INSERT)
     typeText(injector.parser.parseKeys("pre" + "<CR>"))
@@ -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("<Right>"))
     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("<Left>"))
     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("<Right>"))
     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
   }