IJ-CR-129986 [Gradle|TestFramework] fix: restore application and project initial state after each Gradle project test

GitOrigin-RevId: d47227bdc999f0c0c74b684ebaecb35b1e3f9bfd
This commit is contained in:
Sergei Vorobyov
2024-03-29 14:21:28 +00:00
committed by intellij-monorepo-bot
parent ac748035e8
commit 03e140a2da
4 changed files with 14 additions and 16 deletions
@@ -17,7 +17,7 @@ import java.time.Duration
import java.util.concurrent.TimeUnit
@TestOnly
internal class TestApplicationExtension : BeforeAllCallback, AfterEachCallback {
class TestApplicationExtension : BeforeAllCallback, AfterEachCallback {
override fun beforeAll(context: ExtensionContext) {
context.testApplication().getOrThrow()
}
@@ -11,6 +11,7 @@ import org.gradle.util.GradleVersion
import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestsExecutionConsole
import org.jetbrains.plugins.gradle.testFramework.fixture.*
import org.jetbrains.plugins.gradle.testFramework.util.ExternalSystemExecutionTracer
import org.junit.jupiter.api.AfterEach
abstract class GradleExecutionBaseTestCase : GradleProjectTestCase() {
@@ -41,6 +42,15 @@ abstract class GradleExecutionBaseTestCase : GradleProjectTestCase() {
)
}
/**
* Forces a project closing after each Gradle execution test.
* The BuildViewTestFixture cannot release all editors in console view after the test.
*/
@AfterEach
fun destroyAllGradleFixturesAfterEachTest() {
destroyAllGradleFixtures()
}
// '--rerun-tasks' corrupts gradle build caches fo gradle versions before 4.0 (included)
private fun cleanupProjectBuildDirectory() {
runWriteActionAndWait {
@@ -63,7 +63,7 @@ abstract class GradleProjectBaseTestCase {
return fixtures[fixtureId]!!
}
private fun destroyAllGradleFixtures() {
fun destroyAllGradleFixtures() {
runAll(fixtures.values.reversed(), ::destroyGradleFixture)
}
@@ -1,14 +1,12 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gradle.testFramework.fixtures.application
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.invokeAndWaitIfNeeded
import com.intellij.openapi.roots.impl.libraries.LibraryTableTracker
import com.intellij.openapi.vfs.impl.VirtualFilePointerTracker
import com.intellij.testFramework.SdkLeakTracker
import com.intellij.testFramework.common.cleanApplicationState
import com.intellij.testFramework.common.runAll
import com.intellij.testFramework.junit5.impl.testApplication
import com.intellij.testFramework.junit5.impl.TestApplicationExtension
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.ExternalSystemListenerLeakTracker
import org.junit.jupiter.api.extension.AfterAllCallback
import org.junit.jupiter.api.extension.BeforeAllCallback
@@ -27,21 +25,11 @@ import org.junit.jupiter.api.extension.ExtensionContext
*/
@Target(AnnotationTarget.CLASS)
@ExtendWith(
GradleProjectTestApplicationExtension::class,
TestApplicationExtension::class,
GradleProjectTestApplicationLeakTrackerExtension::class,
)
annotation class GradleProjectTestApplication
private class GradleProjectTestApplicationExtension : BeforeAllCallback, AfterAllCallback {
override fun beforeAll(context: ExtensionContext) {
context.testApplication().getOrThrow()
}
override fun afterAll(context: ExtensionContext) {
ApplicationManager.getApplication().cleanApplicationState()
}
}
/**
* @see com.intellij.testFramework.junit5.impl.TestApplicationLeakTrackerExtension
*/