[Gradle] Test that framework configurations task dependencies

^KT-63011
This commit is contained in:
Anton Lakotka
2023-11-07 08:36:54 +01:00
committed by Space Team
parent 999b0f7099
commit 5aa8ecca9b
2 changed files with 44 additions and 0 deletions
@@ -9,6 +9,7 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.util.assertConfigurationsHaveTaskDependencies
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
import org.jetbrains.kotlin.gradle.util.kotlin
import kotlin.test.*
@@ -100,6 +101,32 @@ class FatFrameworksTest {
assertEquals("barDebugFramework", barFat.attributes.getAttribute(KotlinNativeTarget.kotlinNativeFrameworkNameAttribute))
}
@Test
fun `consumable configurations of frameworks have correct dependencies on producing tasks`() {
val project = buildProjectWithMPP {
kotlin {
iosX64 { binaries.framework("foo", listOf(DEBUG)) }
iosArm64 { binaries.framework("foo", listOf(DEBUG)) }
}
}
project.evaluate()
project.assertConfigurationsHaveTaskDependencies(
"fooDebugFrameworkIosX64",
":linkFooDebugFrameworkIosX64"
)
project.assertConfigurationsHaveTaskDependencies(
"fooDebugFrameworkIosArm64",
":linkFooDebugFrameworkIosArm64"
)
project.assertConfigurationsHaveTaskDependencies(
"fooDebugFrameworkIosFat",
":linkFooDebugFrameworkIosFat"
)
}
private fun testFatFrameworkGrouping(
vararg allExpectedFatFrameworks: String,
configureTargets: KotlinMultiplatformExtension.() -> Unit,
@@ -110,4 +110,21 @@ fun Project.assertNotContainsDependencies(configurationName: String, vararg depe
inline fun <reified T> assertIsInstance(value: Any?): T {
if (value is T) return value
fail("Expected $value to implement ${T::class.java}")
}
/**
* Assert that given consumable configuration [configurationName] depends on [expectedTaskNames] tasks
*/
fun Project.assertConfigurationsHaveTaskDependencies(
configurationName: String,
vararg expectedTaskNames: String
) {
val actualNames = configurations
.getByName(configurationName)
.outgoing
.artifacts
.buildDependencies.getDependencies(null)
.map { it.path }
assertEquals(expectedTaskNames.toSet(), actualNames.toSet(), "Unexpected task dependencies for $configurationName")
}