From fb6a2f5bb41e103851fa8e43a4363054a4f80691 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Mon, 12 Dec 2022 11:56:10 +0100 Subject: [PATCH] [Gradle] Implement MppCompositeBuildIT based on martinbonnin's commit ^KT-52172 Verification Pending --- .../kotlin/gradle/mpp/MppCompositeBuildIT.kt | 59 +++++++++++++++++-- .../kotlin/gradle/testbase/testDsl.kt | 2 +- .../util/IdeaKotlinDependencyMatchers.kt | 2 + .../jetbrains/kotlin/gradle/util/fileUtil.kt | 7 +++ .../gradle/util/resolveIdeDependencies.kt | 2 +- .../sample1/build.gradle.kts | 8 ++- .../sample1/included-build/build.gradle.kts | 3 +- .../included-build/settings.gradle.kts | 3 + 8 files changed, 77 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt index 99ae4b0254f..1a454f1d4d3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/MppCompositeBuildIT.kt @@ -6,13 +6,11 @@ package org.jetbrains.kotlin.gradle.mpp import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.KOTLIN_VERSION import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency.Type.Regular import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.* import org.jetbrains.kotlin.gradle.testbase.* -import org.jetbrains.kotlin.gradle.util.kotilnNativeDistributionDependencies -import org.jetbrains.kotlin.gradle.util.kotlinStdlibDependencies -import org.jetbrains.kotlin.gradle.util.replaceText -import org.jetbrains.kotlin.gradle.util.resolveIdeDependencies +import org.jetbrains.kotlin.gradle.util.* import org.junit.jupiter.api.DisplayName import kotlin.io.path.absolutePathString @@ -80,4 +78,57 @@ class MppCompositeBuildIT : KGPBaseTest() { } } } + + @GradleTest + fun `test - sample1 - ide dependencies`(gradleVersion: GradleVersion) { + project("mpp-composite-build/sample1", gradleVersion) { + projectPath.resolve("included-build").addDefaultBuildFiles() + buildGradleKts.replaceText("", KOTLIN_VERSION) + projectPath.resolve("included-build/build.gradle.kts").replaceText("", KOTLIN_VERSION) + + resolveIdeDependencies(":") { dependencies -> + dependencies["commonMain"].assertMatches( + kotlinStdlibDependencies, + regularSourceDependency("included-build::included/commonMain") + ) + + dependencies["jvmMain"].assertMatches( + kotlinStdlibDependencies, + jetbrainsAnnotationDependencies, + + dependsOnDependency(":/commonMain"), + projectArtifactDependency( + Regular, "included-build::included", + FilePathRegex(".*/included-build/included/build/libs/included-jvm.jar") + ) + ) + } + } + } + + @GradleTest + fun `test - sample1 - assemble and execute`(gradleVersion: GradleVersion) { + project("mpp-composite-build/sample1", gradleVersion) { + projectPath.resolve("included-build").addDefaultBuildFiles() + buildGradleKts.replaceText("", KOTLIN_VERSION) + projectPath.resolve("included-build/build.gradle.kts").replaceText("", KOTLIN_VERSION) + + build("assemble") { + assertTasksExecuted(":compileCommonMainKotlinMetadata") + assertTasksExecuted(":compileKotlinJvm") + assertTasksExecuted(":compileKotlinJs") + } + + build("assemble") { + assertTasksUpToDate(":compileCommonMainKotlinMetadata") + assertTasksUpToDate(":compileKotlinJvm") + assertTasksUpToDate(":compileKotlinJs") + } + + build("check") { + assertTasksExecuted(":jvmTest") + assertTasksExecuted(":jsTest") + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt index 5de4511aada..3b731b3a176 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/testDsl.kt @@ -406,7 +406,7 @@ private fun setupProjectFromTestResources( private val String.testProjectPath: Path get() = Paths.get("src", "test", "resources", "testProject", this) -private fun Path.addDefaultBuildFiles() { +internal fun Path.addDefaultBuildFiles() { addPluginManagementToSettings() val buildSrc = resolve("buildSrc") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt index a0aa164f602..3a4734ca4ee 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/IdeaKotlinDependencyMatchers.kt @@ -12,6 +12,8 @@ import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates val kotlinStdlibDependencies = binaryCoordinates(Regex(".*kotlin-stdlib.*")) +val jetbrainsAnnotationDependencies = binaryCoordinates(Regex("org\\.jetbrains:annotations:.*")) + val kotilnNativeDistributionDependencies = IdeaKotlinDependencyMatcher("native distribution") { dependency -> dependency is IdeaKotlinResolvedBinaryDependency && dependency.isNativeDistribution } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt index 513f7e8e6e0..e4739ee6058 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/fileUtil.kt @@ -7,6 +7,9 @@ package org.jetbrains.kotlin.gradle.util import org.jetbrains.kotlin.gradle.testbase.createTempDirDeleteOnExit import java.io.File +import java.nio.file.Path +import kotlin.io.path.readText +import kotlin.io.path.writeText fun File.getFileByName(name: String): File = findFileByName(name) ?: throw AssertionError("Could not find file with name '$name' in $this") @@ -98,6 +101,10 @@ private fun normalizeTail(prefixEnd: Int, path: String, separator: Boolean): Str return result.toString() } +fun Path.replaceText(oldValue: String, newValue: String) { + writeText(readText().replace(oldValue, newValue)) +} + fun File.replaceText(oldValue: String, newValue: String) { writeText(readText().replace(oldValue, newValue)) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt index c1516053566..ffb4b143f57 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/resolveIdeDependencies.kt @@ -24,7 +24,7 @@ internal fun TestProject.resolveIdeDependencies( assertions: BuildResult.(dependencies: IdeaKotlinDependenciesContainer) -> Unit ) { build("${subproject.orEmpty()}:resolveIdeDependencies") { - val subprojectPathPrefix = subproject?.removePrefix(":")?.replace(":", "/")?.plus("/") ?: "" + val subprojectPathPrefix = subproject?.removePrefix(":")?.takeIf { it.isNotEmpty() }?.replace(":", "/")?.plus("/") ?: "" val output = projectPath.resolve("${subprojectPathPrefix}build/ide/dependencies/proto").toFile() if (!output.isDirectory) fail("Missing output directory: $output") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/build.gradle.kts index 2360047205b..4dabb3a0cfd 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/build.gradle.kts @@ -1,8 +1,14 @@ plugins { - id("org.jetbrains.kotlin.multiplatform").version("1.7.21") + id("org.jetbrains.kotlin.multiplatform").version("") } repositories { + mavenLocal() + mavenCentral() +} + +repositories { + mavenLocal() mavenCentral() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/build.gradle.kts index 1236a0ca4e0..2294635b4e5 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/build.gradle.kts @@ -1,7 +1,6 @@ plugins { - id("org.jetbrains.kotlin.multiplatform").version("1.7.21").apply(false) + id("org.jetbrains.kotlin.multiplatform").version("").apply(false) } - group = "included-build" version = "0.0.1" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/settings.gradle.kts index 3df608b92a4..c4b6e60fe36 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/settings.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/mpp-composite-build/sample1/included-build/settings.gradle.kts @@ -1,7 +1,10 @@ +@file:Suppress("UnstableApiUsage") + include("included") dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() } } \ No newline at end of file