From fff24378f1ab785e1e2538553cb65ab53f652ef1 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Tue, 21 Feb 2023 08:42:52 +0100 Subject: [PATCH] [Gradle] Add test to check consumable configurations have unique attributes set. ^KT-55751 Verification Pending --- .../regressionTests/ConfigurationsTest.kt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt index 27db7e0c7c2..a2fe38ba9d2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/regressionTests/ConfigurationsTest.kt @@ -23,11 +23,13 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages +import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.targets import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.util.* +import org.jetbrains.kotlin.gradle.utils.toMap import java.util.* import kotlin.test.* @@ -555,4 +557,48 @@ class ConfigurationsTest : MultiplatformExtensionTest() { assertFalse(isTestDependencyPresent("releaseUnitTestCompileClasspath")) assertFalse(isTestDependencyPresent("releaseUnitTestRuntimeClasspath")) } + + // See KT-55751 + @Test + fun `consumable configurations should have unique attribute set`() { + val project = buildProjectWithMPP { + plugins.apply("maven-publish") + + val distinguishingAttribute = Attribute.of(String::class.java) + kotlin { + jvm { attributes { attribute(distinguishingAttribute, "jvm") } } + jvm("jvm2") { attributes { attribute(distinguishingAttribute, "jvm2") } } + + macosX64 { + binaries.framework("main", listOf(NativeBuildType.DEBUG)) + } + + linuxX64() + + targets.filterIsInstance().forEach { + it.binaries { + sharedLib("main", listOf(NativeBuildType.DEBUG)) + staticLib("main", listOf(NativeBuildType.DEBUG)) + } + } + } + } + + project.evaluate() + + val duplicatedConsumableConfigurations = project.configurations + .filter { it.isCanBeConsumed } + .filterNot { it.attributes.isEmpty } + .groupBy { it.attributes.toMap() } + .values + .filter { it.size > 1 } + + if (duplicatedConsumableConfigurations.isNotEmpty()) { + val msg = duplicatedConsumableConfigurations.joinToString(separator = "\n") { configs -> + val list = configs.joinToString { it.name } + " * $list" + } + fail("Following configurations have the same attributes:\n$msg") + } + } } \ No newline at end of file