[MPP] Assert that the coroutine block actually runs

^KT-58712
This commit is contained in:
Timofey Solonin
2023-07-04 18:25:59 +02:00
committed by Space Team
parent 3ac009ea38
commit 2760a25e2c
2 changed files with 22 additions and 1 deletions
@@ -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<AssertionError> { project.runLifecycleAwareTest{} }
}
}
@@ -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 }