[MPP] Validate that a project with an explicit stdlib-js dependency assembles ^KT-60901 ^KT-61126
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/StdlibJsDependencyIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/StdlibJsDependencyIT.kt new file mode 100644 index 0000000..2b35e56 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/StdlibJsDependencyIT.kt
@@ -0,0 +1,86 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.* +import org.jetbrains.kotlin.gradle.util.replaceText +import org.junit.jupiter.api.DisplayName + +@MppGradlePluginTests +@DisplayName("Multiplatform stdlib-js explicit dependency test") +class StdlibJsDependencyIT : KGPBaseTest() { + + @DisplayName("Js and jvm targets with stdlib-js dependency in jsMain assembles") + @GradleTest + fun testJsAndJvmTargetWithDependencyInJsMain(gradleVersion: GradleVersion) { + projectWithJsTargetAndStdlibJsDependency( + otherTarget = "jvm()", + sourceSetWithStdlibJsDependency = "jsMain", + gradleVersion + ) { + build("assemble") + } + } + + @DisplayName("Only js target with stdlib-js dependency in jsMain assembles") + @GradleTest + fun testOnlyJsTargetWithDependencyInJsMain(gradleVersion: GradleVersion) { + projectWithJsTargetAndStdlibJsDependency( + otherTarget = "", + sourceSetWithStdlibJsDependency = "jsMain", + gradleVersion + ) { + build("assemble") + } + } + + @DisplayName("Js and jvm target with stdlib-js dependency in commonMain fails with an ambiguity error") + @GradleTest + fun testJsAndJvmTargetWithDependencyInCommonMain(gradleVersion: GradleVersion) { + projectWithJsTargetAndStdlibJsDependency( + otherTarget = "jvm()", + sourceSetWithStdlibJsDependency = "commonMain", + gradleVersion + ) { + buildAndFail("assemble") { + assertOutputContains( + "cannot choose between the following variants of org.jetbrains.kotlin:kotlin-stdlib-js" + ) + } + } + } + + @DisplayName("Only js target with stdlib-js dependency in commonMain assembles") + @GradleTest + fun testOnlyJsTargetWithDependencyInCommonMain(gradleVersion: GradleVersion) { + projectWithJsTargetAndStdlibJsDependency( + otherTarget = "", + sourceSetWithStdlibJsDependency = "commonMain", + gradleVersion + ) { + build("assemble") + } + } + + private fun projectWithJsTargetAndStdlibJsDependency( + otherTarget: String, + sourceSetWithStdlibJsDependency: String, + gradleVersion: GradleVersion, + perform: TestProject.() -> Unit + ) { + project( + "stdlib-js-dependency", + gradleVersion, + ) { + buildGradleKts.replaceText("<otherTarget>", otherTarget) + buildGradleKts.replaceText("<sourceSetWithStdlibJsDependency>", sourceSetWithStdlibJsDependency) + + perform() + } + } + +} \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/build.gradle.kts new file mode 100644 index 0000000..ddde1fa --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/build.gradle.kts
@@ -0,0 +1,22 @@ +plugins { + kotlin("multiplatform") +} + +group = "com.example" +version = "1.0" + +repositories { + mavenLocal() + mavenCentral() +} + +kotlin { + js() + <otherTarget> + + sourceSets.getByName("<sourceSetWithStdlibJsDependency>") { + dependencies { + implementation(kotlin("stdlib-js")) + } + } +}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/settings.gradle.kts new file mode 100644 index 0000000..26d5444 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/settings.gradle.kts
@@ -0,0 +1 @@ +rootProject.name = "stdlib-js-dependency" \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonMain/kotlin/CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonMain/kotlin/CommonMain.kt new file mode 100644 index 0000000..a62c3f4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonMain/kotlin/CommonMain.kt
@@ -0,0 +1 @@ +val a = 1 \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonTest/kotlin/CommonTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonTest/kotlin/CommonTest.kt new file mode 100644 index 0000000..331fdd4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/commonTest/kotlin/CommonTest.kt
@@ -0,0 +1 @@ +val b = 1 \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsMain/kotlin/JsMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsMain/kotlin/JsMain.kt new file mode 100644 index 0000000..aaf7d9c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsMain/kotlin/JsMain.kt
@@ -0,0 +1 @@ +val c = 1 \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsTest/kotlin/JsTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsTest/kotlin/JsTest.kt new file mode 100644 index 0000000..59946dc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jsTest/kotlin/JsTest.kt
@@ -0,0 +1 @@ +val d = 1 \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmMain/kotlin/JvmMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmMain/kotlin/JvmMain.kt new file mode 100644 index 0000000..3e76be5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmMain/kotlin/JvmMain.kt
@@ -0,0 +1 @@ +val e = 1 \ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmTest/kotlin/JvmTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmTest/kotlin/JvmTest.kt new file mode 100644 index 0000000..2042701 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/stdlib-js-dependency/src/jvmTest/kotlin/JvmTest.kt
@@ -0,0 +1 @@ +val f = 1 \ No newline at end of file