diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FatFrameworksTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FatFrameworksTest.kt index 1792c2afdeb..d602511e7fa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FatFrameworksTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/FatFrameworksTest.kt @@ -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, diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/assertions.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/assertions.kt index bcd2a91552c..6839e53a397 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/assertions.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/util/assertions.kt @@ -110,4 +110,21 @@ fun Project.assertNotContainsDependencies(configurationName: String, vararg depe inline fun 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") } \ No newline at end of file