diff --git a/plugins/gradle/java/testSources/testFramework/GradleExecutionBaseTestCase.kt b/plugins/gradle/java/testSources/testFramework/GradleExecutionBaseTestCase.kt index e367bfa17812..ca3d16aa9ccd 100644 --- a/plugins/gradle/java/testSources/testFramework/GradleExecutionBaseTestCase.kt +++ b/plugins/gradle/java/testSources/testFramework/GradleExecutionBaseTestCase.kt @@ -15,7 +15,11 @@ import org.junit.jupiter.api.AfterEach abstract class GradleExecutionBaseTestCase : GradleProjectTestCase() { - private lateinit var executionFixture: GradleExecutionTestFixture + private var _executionFixture: GradleExecutionTestFixture? = null + private val executionFixture: GradleExecutionTestFixture + get() = requireNotNull(_executionFixture) { + "Gradle execution fixture wasn't setup. Please use [GradleBaseTestCase.test] function inside your tests." + } fun getExecutionEnvironment(): ExecutionEnvironment { return executionFixture.getExecutionEnvironment() @@ -30,13 +34,14 @@ abstract class GradleExecutionBaseTestCase : GradleProjectTestCase() { cleanupProjectBuildDirectory() - executionFixture = GradleExecutionTestFixtureImpl(project, projectRoot) + _executionFixture = GradleExecutionTestFixtureImpl(project, projectRoot) executionFixture.setUp() } override fun tearDown() { runAll( - { executionFixture.tearDown() }, + { _executionFixture?.tearDown() }, + { _executionFixture = null }, { cleanupProjectBuildDirectory() }, { super.tearDown() }, ) diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/GradleProjectBaseTestCase.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/GradleProjectBaseTestCase.kt index 0a2caa500f1d..a8c05d33852f 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/GradleProjectBaseTestCase.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/GradleProjectBaseTestCase.kt @@ -11,28 +11,26 @@ import org.junit.jupiter.api.AfterAll @GradleProjectTestApplication abstract class GradleProjectBaseTestCase { - private var fixture: GradleProjectTestFixture? = null - + private var _gradleFixture: GradleProjectTestFixture? = null val gradleFixture: GradleProjectTestFixture - get() = requireNotNull(fixture) { - "Gradle fixture isn't setup. Please use [GradleBaseTestCase.test] function inside your tests." + get() = requireNotNull(_gradleFixture) { + "Gradle fixture wasn't setup. Please use [GradleBaseTestCase.test] function inside your tests." } open fun setUp() = Unit open fun tearDown() = Unit - open fun patchFixtureBuilder(fixtureBuilder: GradleTestFixtureBuilder): GradleTestFixtureBuilder = fixtureBuilder - open fun test(gradleVersion: GradleVersion, fixtureBuilder: GradleTestFixtureBuilder, test: () -> Unit) { - val patchedBuilder = patchFixtureBuilder(fixtureBuilder) - fixture = getOrCreateGradleTestFixture(gradleVersion, patchedBuilder) - setUp() runAll( - { test() }, + { + _gradleFixture = getOrCreateGradleTestFixture(gradleVersion, fixtureBuilder) + setUp() + test() + }, { tearDown() }, - { rollbackOrDestroyGradleTestFixture(gradleFixture) }, - { fixture = null } + { _gradleFixture?.let { rollbackOrDestroyGradleTestFixture(it) } }, + { _gradleFixture = null } ) } diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/fixtures/impl/GradleProjectTestFixtureImpl.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/fixtures/impl/GradleProjectTestFixtureImpl.kt index 52e845196cc4..2c0def5691b3 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/fixtures/impl/GradleProjectTestFixtureImpl.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/testFramework/fixtures/impl/GradleProjectTestFixtureImpl.kt @@ -32,12 +32,18 @@ internal class GradleProjectTestFixtureImpl private constructor( override val fileFixture: FileTestFixture ) : GradleProjectTestFixture { - private lateinit var _project: Project - - private lateinit var testDisposable: Disposable + private var _testDisposable: Disposable? = null + private val testDisposable: Disposable + get() = requireNotNull(_testDisposable) { + "Gradle fixture wasn't setup. Please use [GradleBaseTestCase.test] function inside your tests." + } + private var _project: Project? = null override val project: Project - get() = _project + get() = requireNotNull(_project) { + "Gradle fixture wasn't setup. Please use [GradleBaseTestCase.test] function inside your tests." + } + override val module: Module get() = project.modules.single { it.name == project.name } @@ -57,7 +63,7 @@ internal class GradleProjectTestFixtureImpl private constructor( ) override fun setUp() { - testDisposable = Disposer.newDisposable() + _testDisposable = Disposer.newDisposable() sdkFixture.setUp() fileFixture.setUp() @@ -65,21 +71,15 @@ internal class GradleProjectTestFixtureImpl private constructor( installGradleProjectReloadWatcher() _project = runBlocking { openProjectAsync(fileFixture.root) } - IndexingTestUtil.waitUntilIndexesAreReady(_project) + IndexingTestUtil.waitUntilIndexesAreReady(project) } override fun tearDown() { runAll( { ApplicationManager.getApplication().serviceIfCreated()?.waitUntilIndicesAreInitialized() }, { runBlocking { fileFixture.root.refreshAndAwait() } }, - { - runBlocking { - if (this@GradleProjectTestFixtureImpl::_project.isInitialized) { - _project.closeProjectAsync() - } - } - }, - { Disposer.dispose(testDisposable) }, + { runBlocking { _project?.closeProjectAsync() } }, + { _testDisposable?.let { Disposer.dispose(it) } }, { fileFixture.tearDown() }, { sdkFixture.tearDown() } )