mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-05 01:50:56 +07:00
IDEA-340613 [Gradle|TestFramework] fix: reuse JUnit 5 waiting logic for the platform async activities
GitOrigin-RevId: c8f10565571195da8281818505382bae2172372a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5d2aa3fa9b
commit
d7314ef4d1
@@ -28,7 +28,7 @@ internal class TestApplicationExtension : BeforeAllCallback, AfterEachCallback {
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
private fun ExtensionContext.testApplication(): Result<Unit> {
|
||||
fun ExtensionContext.testApplication(): Result<Unit> {
|
||||
val store = root.getStore(ExtensionContext.Namespace.GLOBAL)
|
||||
val resource = store.getOrComputeIfAbsent("application") {
|
||||
TestApplicationResource(initTestApplication())
|
||||
|
||||
@@ -1,22 +1,14 @@
|
||||
// Copyright 2000-2022 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
|
||||
|
||||
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.runAll
|
||||
import com.intellij.testFramework.fixtures.BareTestFixture
|
||||
import com.intellij.testFramework.fixtures.IdeaTestFixture
|
||||
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.GradleProjectTestFixture
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.ESListenerLeakTracker
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.application.GradleTestApplication
|
||||
import org.jetbrains.plugins.gradle.testFramework.util.onFailureCatching
|
||||
import org.junit.jupiter.api.AfterAll
|
||||
import org.junit.jupiter.api.BeforeAll
|
||||
|
||||
|
||||
@GradleTestApplication
|
||||
abstract class GradleProjectBaseTestCase {
|
||||
|
||||
private var fixture: GradleProjectTestFixture? = null
|
||||
@@ -46,31 +38,13 @@ abstract class GradleProjectBaseTestCase {
|
||||
|
||||
companion object {
|
||||
|
||||
private lateinit var applicationFixture: ApplicationFixture
|
||||
|
||||
private lateinit var listenerLeakTracker: ESListenerLeakTracker
|
||||
|
||||
private val initializedFixtures = LinkedHashSet<FixtureId>()
|
||||
private val fixtures = LinkedHashMap<FixtureId, GradleProjectTestFixture>()
|
||||
|
||||
@JvmStatic
|
||||
@BeforeAll
|
||||
fun setUpGradleBaseTestCase() {
|
||||
applicationFixture = ApplicationFixture()
|
||||
applicationFixture.setUp()
|
||||
|
||||
listenerLeakTracker = ESListenerLeakTracker()
|
||||
listenerLeakTracker.setUp()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@AfterAll
|
||||
fun tearDownGradleBaseTestCase() {
|
||||
runAll(
|
||||
{ destroyAllGradleFixtures() },
|
||||
{ listenerLeakTracker.tearDown() },
|
||||
{ applicationFixture.tearDown() }
|
||||
)
|
||||
destroyAllGradleFixtures()
|
||||
}
|
||||
|
||||
private fun getOrCreateGradleTestFixture(gradleVersion: GradleVersion, builder: GradleTestFixtureBuilder): GradleProjectTestFixture {
|
||||
@@ -114,35 +88,4 @@ abstract class GradleProjectBaseTestCase {
|
||||
private fun GradleProjectTestFixture.getFixtureId() =
|
||||
FixtureId(projectName, gradleVersion)
|
||||
}
|
||||
|
||||
/**
|
||||
* @see com.intellij.testFramework.junit5.TestApplication
|
||||
*/
|
||||
private class ApplicationFixture : IdeaTestFixture {
|
||||
|
||||
private lateinit var bareFixture: BareTestFixture
|
||||
|
||||
private lateinit var virtualFilePointerTracker: VirtualFilePointerTracker
|
||||
private lateinit var libraryLeakTracker: LibraryTableTracker
|
||||
private lateinit var sdkLeakTracker: SdkLeakTracker
|
||||
|
||||
override fun setUp() {
|
||||
bareFixture = IdeaTestFixtureFactory.getFixtureFactory()
|
||||
.createBareFixture()
|
||||
bareFixture.setUp()
|
||||
|
||||
virtualFilePointerTracker = VirtualFilePointerTracker()
|
||||
libraryLeakTracker = LibraryTableTracker()
|
||||
sdkLeakTracker = SdkLeakTracker()
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
runAll(
|
||||
{ invokeAndWaitIfNeeded { sdkLeakTracker.checkForJdkTableLeaks() } },
|
||||
{ libraryLeakTracker.assertDisposed() },
|
||||
{ virtualFilePointerTracker.assertPointersAreDisposed() },
|
||||
{ bareFixture.tearDown() }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
// 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 org.jetbrains.annotations.TestOnly
|
||||
import org.junit.jupiter.api.extension.ExtendWith
|
||||
|
||||
/**
|
||||
* @see com.intellij.testFramework.junit5.TestApplication
|
||||
*/
|
||||
@TestOnly
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@ExtendWith(
|
||||
GradleTestApplicationExtension::class,
|
||||
GradleTestApplicationLeakTrackerExtension::class,
|
||||
)
|
||||
annotation class GradleTestApplication {
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
// 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.testFramework.common.cleanApplicationState
|
||||
import com.intellij.testFramework.junit5.impl.testApplication
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback
|
||||
import org.junit.jupiter.api.extension.ExtensionContext
|
||||
|
||||
/**
|
||||
* @see com.intellij.testFramework.junit5.impl.TestApplicationExtension
|
||||
*/
|
||||
@TestOnly
|
||||
class GradleTestApplicationExtension : BeforeAllCallback, AfterAllCallback {
|
||||
override fun beforeAll(context: ExtensionContext) {
|
||||
context.testApplication().getOrThrow()
|
||||
}
|
||||
|
||||
override fun afterAll(context: ExtensionContext) {
|
||||
ApplicationManager.getApplication().cleanApplicationState()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
// 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.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.runAll
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.ExternalSystemListenerLeakTracker
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback
|
||||
import org.junit.jupiter.api.extension.BeforeAllCallback
|
||||
import org.junit.jupiter.api.extension.ExtensionContext
|
||||
|
||||
/**
|
||||
* @see com.intellij.testFramework.junit5.impl.TestApplicationLeakTrackerExtension
|
||||
*/
|
||||
@TestOnly
|
||||
class GradleTestApplicationLeakTrackerExtension : BeforeAllCallback, AfterAllCallback {
|
||||
|
||||
companion object {
|
||||
private const val LEAK_TRACKERS_KEY = "Gradle application-level leak trackers"
|
||||
}
|
||||
|
||||
override fun beforeAll(context: ExtensionContext) {
|
||||
context.getStore(ExtensionContext.Namespace.GLOBAL)
|
||||
.put(LEAK_TRACKERS_KEY, GradleLeakTrackers())
|
||||
}
|
||||
|
||||
override fun afterAll(context: ExtensionContext) {
|
||||
context.getStore(ExtensionContext.Namespace.GLOBAL)
|
||||
.get(LEAK_TRACKERS_KEY, GradleLeakTrackers::class.java)
|
||||
.checkNothingLeaked()
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
private class GradleLeakTrackers {
|
||||
|
||||
val sdkLeakTracker = SdkLeakTracker()
|
||||
val libraryLeakTracker = LibraryTableTracker()
|
||||
val virtualFilePointerTracker = VirtualFilePointerTracker()
|
||||
val externalSystemListenerLeakTracker = ExternalSystemListenerLeakTracker()
|
||||
|
||||
fun checkNothingLeaked() {
|
||||
runAll(
|
||||
{ externalSystemListenerLeakTracker.tearDown() },
|
||||
{ invokeAndWaitIfNeeded { sdkLeakTracker.checkForJdkTableLeaks() } },
|
||||
{ libraryLeakTracker.assertDisposed() },
|
||||
{ virtualFilePointerTracker.assertPointersAreDisposed() },
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.plugins.gradle.service.project.open.linkAndRefreshGradleProject
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.GradleTestFixture
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.GradleTestFixtureFactory
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.ESListenerLeakTracker
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.ExternalSystemListenerLeakTracker
|
||||
import org.jetbrains.plugins.gradle.testFramework.fixtures.tracker.OperationLeakTracker
|
||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||
import org.jetbrains.plugins.gradle.util.getGradleProjectReloadOperation
|
||||
@@ -35,7 +35,7 @@ class GradleTestFixtureImpl(
|
||||
override val gradleVersion: GradleVersion,
|
||||
) : GradleTestFixture {
|
||||
|
||||
private lateinit var listenerLeakTracker: ESListenerLeakTracker
|
||||
private lateinit var listenerLeakTracker: ExternalSystemListenerLeakTracker
|
||||
private lateinit var reloadLeakTracker: OperationLeakTracker
|
||||
|
||||
private lateinit var testDisposable: Disposable
|
||||
@@ -48,7 +48,7 @@ class GradleTestFixtureImpl(
|
||||
override lateinit var gradleJvm: String
|
||||
|
||||
override fun setUp() {
|
||||
listenerLeakTracker = ESListenerLeakTracker()
|
||||
listenerLeakTracker = ExternalSystemListenerLeakTracker()
|
||||
listenerLeakTracker.setUp()
|
||||
|
||||
reloadLeakTracker = OperationLeakTracker { getGradleProjectReloadOperation(it) }
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.intellij.openapi.externalSystem.service.remote.ExternalSystemProgress
|
||||
import com.intellij.testFramework.common.runAll
|
||||
import com.intellij.testFramework.fixtures.IdeaTestFixture
|
||||
|
||||
class ESListenerLeakTracker : IdeaTestFixture {
|
||||
class ExternalSystemListenerLeakTracker : IdeaTestFixture {
|
||||
|
||||
override fun setUp() = Unit
|
||||
|
||||
Reference in New Issue
Block a user