[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 package org.jetbrains.kotlin.gradle.unitTests
import org.gradle.api.ProjectConfigurationException 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.*
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.IllegalLifecycleException import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.IllegalLifecycleException
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.ProjectConfigurationResult.Failure 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.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.buildProjectWithMPP
import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest import org.jetbrains.kotlin.gradle.util.runLifecycleAwareTest
import org.jetbrains.kotlin.gradle.utils.future import org.jetbrains.kotlin.gradle.utils.future
@@ -553,4 +556,17 @@ class KotlinPluginLifecycleTest {
assertTrue(FinaliseDsl !in Stage.until(FinaliseDsl)) assertTrue(FinaliseDsl !in Stage.until(FinaliseDsl))
assertTrue(FinaliseDsl.previousOrFirst 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.gradle.plugin.kotlinPluginLifecycle
import org.jetbrains.kotlin.tooling.core.withLinearClosure import org.jetbrains.kotlin.tooling.core.withLinearClosure
import java.lang.AssertionError import java.lang.AssertionError
import kotlin.test.assertTrue
fun Project.runLifecycleAwareTest(block: suspend Project.() -> Unit) { fun Project.runLifecycleAwareTest(block: suspend Project.() -> Unit) {
kotlinPluginLifecycle.launch { block() } kotlinPluginLifecycle.launch {
block()
}
try { try {
(this as ProjectInternal).evaluate() (this as ProjectInternal).evaluate()
assertTrue(kotlinPluginLifecycle.isStarted)
assertTrue(kotlinPluginLifecycle.isFinished)
} catch (t: Throwable) { } catch (t: Throwable) {
/* Prefer throwing AssertionError directly, if possible */ /* Prefer throwing AssertionError directly, if possible */
val allCauses = t.withLinearClosure { it.cause } val allCauses = t.withLinearClosure { it.cause }