[Gradle] Test that no extra attributes are copied to Java Configurations

^KT-31468
This commit is contained in:
Anton Lakotka
2022-08-12 10:35:36 +02:00
committed by Space
parent 8bfe5691e6
commit 8bb2fe47f4
@@ -7,6 +7,7 @@
package org.jetbrains.kotlin.gradle package org.jetbrains.kotlin.gradle
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Category import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.kotlin.dsl.withType import org.gradle.kotlin.dsl.withType
@@ -219,11 +220,10 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
} }
} }
@Test class TestDisambiguationAttributePropagation {
fun `test that jvm target attributes are propagated to java configurations`() { private val disambiguationAttribute = org.gradle.api.attributes.Attribute.of("disambiguationAttribute", String::class.java)
val disambiguationAttribute = org.gradle.api.attributes.Attribute.of("disambiguationAttribute", String::class.java)
val project = buildProjectWithMPP {
private val mppProject get() = buildProjectWithMPP {
kotlin { kotlin {
jvm("plainJvm") { jvm("plainJvm") {
attributes { attribute(disambiguationAttribute, "plainJvm") } attributes { attribute(disambiguationAttribute, "plainJvm") }
@@ -236,8 +236,12 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
} }
} }
private val javaProject get() = buildProject {
project.plugins.apply("java-library")
}
//NB: There is no "api" configuration registered by Java Plugin //NB: There is no "api" configuration registered by Java Plugin
val javaConfigurations = listOf( private val javaConfigurations = listOf(
"compileClasspath", "compileClasspath",
"runtimeClasspath", "runtimeClasspath",
"implementation", "implementation",
@@ -245,13 +249,15 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
"runtimeOnly" "runtimeOnly"
) )
@Test
fun `test that jvm target attributes are propagated to java configurations`() {
val kotlinJvmConfigurations = listOf( val kotlinJvmConfigurations = listOf(
"jvmWithJavaCompileClasspath", "jvmWithJavaCompileClasspath",
"jvmWithJavaRuntimeClasspath", "jvmWithJavaRuntimeClasspath",
"jvmWithJavaApi", "jvmWithJavaCompilationApi",
"jvmWithJavaImplementation", "jvmWithJavaCompilationImplementation",
"jvmWithJavaCompileOnly", "jvmWithJavaCompilationCompileOnly",
"jvmWithJavaRuntimeOnly", "jvmWithJavaCompilationRuntimeOnly",
) )
val outgoingConfigurations = listOf( val outgoingConfigurations = listOf(
@@ -270,10 +276,10 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
val jvmWithJavaTestConfigurations = listOf( val jvmWithJavaTestConfigurations = listOf(
"jvmWithJavaTestCompileClasspath", "jvmWithJavaTestCompileClasspath",
"jvmWithJavaTestRuntimeClasspath", "jvmWithJavaTestRuntimeClasspath",
"jvmWithJavaTestApi", "jvmWithJavaTestCompilationApi",
"jvmWithJavaTestCompileOnly", "jvmWithJavaTestCompilationCompileOnly",
"jvmWithJavaTestImplementation", "jvmWithJavaTestCompilationImplementation",
"jvmWithJavaTestRuntimeOnly" "jvmWithJavaTestCompilationRuntimeOnly"
) )
val expectedConfigurationsWithDisambiguationAttribute = javaConfigurations + val expectedConfigurationsWithDisambiguationAttribute = javaConfigurations +
@@ -282,7 +288,7 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
testJavaConfigurations + testJavaConfigurations +
jvmWithJavaTestConfigurations jvmWithJavaTestConfigurations
with(project.evaluate()) { with(mppProject.evaluate()) {
val actualConfigurationsWithDisambiguationAttribute = configurations val actualConfigurationsWithDisambiguationAttribute = configurations
.filter { it.attributes.getAttribute(disambiguationAttribute) == "jvmWithJava" } .filter { it.attributes.getAttribute(disambiguationAttribute) == "jvmWithJava" }
.map { it.name } .map { it.name }
@@ -293,4 +299,31 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
) )
} }
} }
@Test
fun `test that no new attributes are added to java configurations`() {
val evaluatedJavaProject = javaProject.evaluate()
val evaluatedMppProject = mppProject.evaluate()
fun AttributeContainer.toStringMap(): Map<String, String> =
keySet().associate { it.name to getAttribute(it).toString() }
for (configurationName in javaConfigurations) {
val expectedAttributes = evaluatedJavaProject
.configurations
.getByName(configurationName)
.attributes.toStringMap()
val actualAttributes = evaluatedMppProject
.configurations
.getByName(configurationName)
.attributes.toStringMap()
assertEquals(
expectedAttributes,
actualAttributes - disambiguationAttribute.name
)
}
}
}
} }