Skip to content

Commit

Permalink
Migrate java tests to VimNoWriteActionTestCase
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexPl292 committed Feb 20, 2025
1 parent 96a1456 commit e18035b
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}

Expand Down Expand Up @@ -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)
}
Expand Down
33 changes: 19 additions & 14 deletions src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand All @@ -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()
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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|
Expand All @@ -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"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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>"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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())
}
}
}
Loading

0 comments on commit e18035b

Please sign in to comment.