[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
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage
import org.gradle.kotlin.dsl.withType
@@ -219,11 +220,10 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
}
}
@Test
fun `test that jvm target attributes are propagated to java configurations`() {
val disambiguationAttribute = org.gradle.api.attributes.Attribute.of("disambiguationAttribute", String::class.java)
val project = buildProjectWithMPP {
class TestDisambiguationAttributePropagation {
private val disambiguationAttribute = org.gradle.api.attributes.Attribute.of("disambiguationAttribute", String::class.java)
private val mppProject get() = buildProjectWithMPP {
kotlin {
jvm("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
val javaConfigurations = listOf(
private val javaConfigurations = listOf(
"compileClasspath",
"runtimeClasspath",
"implementation",
@@ -245,52 +249,81 @@ class ConfigurationsTest : MultiplatformExtensionTest() {
"runtimeOnly"
)
val kotlinJvmConfigurations = listOf(
"jvmWithJavaCompileClasspath",
"jvmWithJavaRuntimeClasspath",
"jvmWithJavaApi",
"jvmWithJavaImplementation",
"jvmWithJavaCompileOnly",
"jvmWithJavaRuntimeOnly",
)
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()
@Test
fun `test that jvm target attributes are propagated to java configurations`() {
val kotlinJvmConfigurations = listOf(
"jvmWithJavaCompileClasspath",
"jvmWithJavaRuntimeClasspath",
"jvmWithJavaCompilationApi",
"jvmWithJavaCompilationImplementation",
"jvmWithJavaCompilationCompileOnly",
"jvmWithJavaCompilationRuntimeOnly",
)
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
)
}
}
}
}