diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt index 64e2cc87545..261f9d654c1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt @@ -8,11 +8,14 @@ package org.jetbrains.kotlin.gradle.unitTests import org.gradle.api.ProjectConfigurationException +import org.gradle.internal.impldep.org.testng.TestException +import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.IllegalLifecycleException import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.ProjectConfigurationResult.Failure import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.* +import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest import org.jetbrains.kotlin.gradle.utils.future @@ -553,4 +556,17 @@ class KotlinPluginLifecycleTest { assertTrue(FinaliseDsl !in Stage.until(FinaliseDsl)) assertTrue(FinaliseDsl.previousOrFirst in Stage.until(FinaliseDsl)) } + + @Test + fun `test - runLifecycleAwareTest - in a project with lifecycle`() { + val project = ProjectBuilder.builder().build() + project.applyMultiplatformPlugin() + project.runLifecycleAwareTest{} + } + + @Test + fun `test - runLifecycleAwareTest - in a project without lifecycle`() { + val project = ProjectBuilder.builder().build() + assertFailsWith { project.runLifecycleAwareTest{} } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/lifecycleUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/lifecycleUtils.kt index 74424c075d4..d9d1004f888 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/lifecycleUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/lifecycleUtils.kt @@ -10,11 +10,16 @@ import org.gradle.api.internal.project.ProjectInternal import org.jetbrains.kotlin.gradle.plugin.kotlinPluginLifecycle import org.jetbrains.kotlin.tooling.core.withLinearClosure import java.lang.AssertionError +import kotlin.test.assertTrue fun Project.runLifecycleAwareTest(block: suspend Project.() -> Unit) { - kotlinPluginLifecycle.launch { block() } + kotlinPluginLifecycle.launch { + block() + } try { (this as ProjectInternal).evaluate() + assertTrue(kotlinPluginLifecycle.isStarted) + assertTrue(kotlinPluginLifecycle.isFinished) } catch (t: Throwable) { /* Prefer throwing AssertionError directly, if possible */ val allCauses = t.withLinearClosure { it.cause }