From 3f4b37693f5819343e38a4b3453ba2684a1a0e92 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Thu, 23 Mar 2023 14:50:23 +0100 Subject: [PATCH] [Gradle] Implement `test Kotlin Native Link with cycle in dependency constraints` ... to cover KT-57531 --- .../kotlin/gradle/HierarchicalMppIT.kt | 12 +++++++ .../consumer/build.gradle.kts | 14 ++++++++ .../commonMain/kotlin/ConsumerCommonMain.kt | 10 ++++++ .../p1/build.gradle.kts | 33 +++++++++++++++++++ .../p1/src/commonMain/kotlin/P1CommonMain.kt | 1 + .../p2/build.gradle.kts | 27 +++++++++++++++ .../p2/src/commonMain/kotlin/P2CommonMain.kt | 2 ++ .../settings.gradle.kts | 12 +++++++ 8 files changed, 111 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/src/commonMain/kotlin/ConsumerCommonMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/src/commonMain/kotlin/P1CommonMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/src/commonMain/kotlin/P2CommonMain.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/settings.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt index e3fdf1f8b3a..48a8138e627 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt @@ -1130,6 +1130,18 @@ open class HierarchicalMppIT : KGPBaseTest() { } } + @GradleTest + @DisplayName("KT-57531: Kotlin Native Link with cycle in dependency constraints") + fun `test Kotlin Native Link with cycle in dependency constraints`(gradleVersion: GradleVersion) { + project("kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints", gradleVersion) { + build("publish") + build("assemble") { + assertTasksExecuted(":consumer:linkDebugExecutableLinuxX64") + } + } + } + + private fun TestProject.testDependencyTransformations( subproject: String? = null, check: BuildResult.(reports: Iterable) -> Unit diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/build.gradle.kts new file mode 100644 index 00000000000..4f6c4dfe9b5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/build.gradle.kts @@ -0,0 +1,14 @@ +plugins { + kotlin("multiplatform") +} + +kotlin { + linuxX64 { + binaries { + executable() + } + } + sourceSets.commonMain.get().dependencies { + implementation("org.jetbrains.sample:p2:1.0.0") + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/src/commonMain/kotlin/ConsumerCommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/src/commonMain/kotlin/ConsumerCommonMain.kt new file mode 100644 index 00000000000..2f6d86a64a9 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/consumer/src/commonMain/kotlin/ConsumerCommonMain.kt @@ -0,0 +1,10 @@ +object ConsumerCommonMain { + init { + P1CommonMain + P2CommonMain + } +} + +fun main() { + ConsumerCommonMain +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/build.gradle.kts new file mode 100644 index 00000000000..e1a684492e8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/build.gradle.kts @@ -0,0 +1,33 @@ +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget + +plugins { + kotlin("multiplatform") + `maven-publish` +} + +group = "org.jetbrains.sample" +version = "1.0.0" + +publishing { + repositories { + maven(rootProject.buildDir.resolve("repo")) + } +} + +@OptIn(ExperimentalKotlinGradlePluginApi::class) +kotlin { + jvm() + linuxX64() + linuxArm64() + targetHierarchy.default() +} + +dependencies { + constraints { + kotlin.sourceSets.all { + val apiConfiguration = configurations.getByName(apiConfigurationName) + apiConfiguration(project(":p2")) + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/src/commonMain/kotlin/P1CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/src/commonMain/kotlin/P1CommonMain.kt new file mode 100644 index 00000000000..5bc4ca23e3f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p1/src/commonMain/kotlin/P1CommonMain.kt @@ -0,0 +1 @@ +object P1CommonMain \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/build.gradle.kts new file mode 100644 index 00000000000..9a63568bdc1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/build.gradle.kts @@ -0,0 +1,27 @@ +import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi + +plugins { + kotlin("multiplatform") + `maven-publish` +} + +group = "org.jetbrains.sample" +version = "1.0.0" + +publishing { + repositories { + maven(rootProject.buildDir.resolve("repo")) + } +} + +@OptIn(ExperimentalKotlinGradlePluginApi::class) +kotlin { + jvm() + linuxX64() + linuxArm64() + targetHierarchy.default() + + sourceSets.commonMain.get().dependencies { + api(project(":p1")) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/src/commonMain/kotlin/P2CommonMain.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/src/commonMain/kotlin/P2CommonMain.kt new file mode 100644 index 00000000000..af4b477047f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/p2/src/commonMain/kotlin/P2CommonMain.kt @@ -0,0 +1,2 @@ +object P2CommonMain { +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/settings.gradle.kts new file mode 100644 index 00000000000..72cac9c510a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kt-57531-KotlinNativeLink-with-cycle-in-dependency-constraints/settings.gradle.kts @@ -0,0 +1,12 @@ +dependencyResolutionManagement { + repositories { + maven(rootProject.projectDir.resolve("build").resolve("repo")) + mavenLocal() + mavenCentral() + google() + } +} + +include(":p1") +include(":p2") +include(":consumer") \ No newline at end of file