diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt index 2954ee6a7e1..a956335b094 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt @@ -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 = + 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 + ) + } } } } \ No newline at end of file