[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,52 +249,81 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
"runtimeOnly" "runtimeOnly"
) )
val kotlinJvmConfigurations = listOf( @Test
"jvmWithJavaCompileClasspath", fun `test that jvm target attributes are propagated to java configurations`() {
"jvmWithJavaRuntimeClasspath", val kotlinJvmConfigurations = listOf(
"jvmWithJavaApi", "jvmWithJavaCompileClasspath",
"jvmWithJavaImplementation", "jvmWithJavaRuntimeClasspath",
"jvmWithJavaCompileOnly", "jvmWithJavaCompilationApi",
"jvmWithJavaRuntimeOnly", "jvmWithJavaCompilationImplementation",
) "jvmWithJavaCompilationCompileOnly",
"jvmWithJavaCompilationRuntimeOnly",
val outgoingConfigurations = listOf(
"jvmWithJavaApiElements",
"jvmWithJavaRuntimeElements",
)
val testJavaConfigurations = listOf(
"testCompileClasspath",
"testCompileOnly",
"testImplementation",
"testRuntimeClasspath",
"testRuntimeOnly"
)
val jvmWithJavaTestConfigurations = listOf(
"jvmWithJavaTestCompileClasspath",
"jvmWithJavaTestRuntimeClasspath",
"jvmWithJavaTestApi",
"jvmWithJavaTestCompileOnly",
"jvmWithJavaTestImplementation",
"jvmWithJavaTestRuntimeOnly"
)
val expectedConfigurationsWithDisambiguationAttribute = javaConfigurations +
kotlinJvmConfigurations +
outgoingConfigurations +
testJavaConfigurations +
jvmWithJavaTestConfigurations
with(project.evaluate()) {
val actualConfigurationsWithDisambiguationAttribute = configurations
.filter { it.attributes.getAttribute(disambiguationAttribute) == "jvmWithJava" }
.map { it.name }
assertEquals(
expectedConfigurationsWithDisambiguationAttribute.sorted(),
actualConfigurationsWithDisambiguationAttribute.sorted()
) )
val outgoingConfigurations = listOf(
"jvmWithJavaApiElements",
"jvmWithJavaRuntimeElements",
)
val testJavaConfigurations = listOf(
"testCompileClasspath",
"testCompileOnly",
"testImplementation",
"testRuntimeClasspath",
"testRuntimeOnly"
)
val jvmWithJavaTestConfigurations = listOf(
"jvmWithJavaTestCompileClasspath",
"jvmWithJavaTestRuntimeClasspath",
"jvmWithJavaTestCompilationApi",
"jvmWithJavaTestCompilationCompileOnly",
"jvmWithJavaTestCompilationImplementation",
"jvmWithJavaTestCompilationRuntimeOnly"
)
val expectedConfigurationsWithDisambiguationAttribute = javaConfigurations +
kotlinJvmConfigurations +
outgoingConfigurations +
testJavaConfigurations +
jvmWithJavaTestConfigurations
with(mppProject.evaluate()) {
val actualConfigurationsWithDisambiguationAttribute = configurations
.filter { it.attributes.getAttribute(disambiguationAttribute) == "jvmWithJava" }
.map { it.name }
assertEquals(
expectedConfigurationsWithDisambiguationAttribute.sorted(),
actualConfigurationsWithDisambiguationAttribute.sorted()
)
}
}
@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
)
}
} }
} }
} }