[Gradle] Add test to check consumable configurations have unique

attributes set.

^KT-55751 Verification Pending
This commit is contained in:
Anton Lakotka
2023-02-21 08:42:52 +01:00
committed by Space Team
parent 9804ea80c4
commit fff24378f1
@@ -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<KotlinNativeTarget>().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")
}
}
}