[Gradle] Implement MppCompositeBuildIT based on martinbonnin's commit

^KT-52172 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-12-12 11:56:10 +01:00
committed by Space Team
parent abd58445c9
commit fb6a2f5bb4
8 changed files with 77 additions and 9 deletions
@@ -6,13 +6,11 @@
package org.jetbrains.kotlin.gradle.mpp package org.jetbrains.kotlin.gradle.mpp
import org.gradle.util.GradleVersion 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.tcs.IdeaKotlinSourceDependency.Type.Regular
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.* import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.*
import org.jetbrains.kotlin.gradle.testbase.* import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.kotilnNativeDistributionDependencies import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.util.kotlinStdlibDependencies
import org.jetbrains.kotlin.gradle.util.replaceText
import org.jetbrains.kotlin.gradle.util.resolveIdeDependencies
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import kotlin.io.path.absolutePathString 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("<kgp_version>", KOTLIN_VERSION)
projectPath.resolve("included-build/build.gradle.kts").replaceText("<kgp_version>", 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("<kgp_version>", KOTLIN_VERSION)
projectPath.resolve("included-build/build.gradle.kts").replaceText("<kgp_version>", KOTLIN_VERSION)
build("assemble") {
assertTasksExecuted(":compileCommonMainKotlinMetadata")
assertTasksExecuted(":compileKotlinJvm")
assertTasksExecuted(":compileKotlinJs")
}
build("assemble") {
assertTasksUpToDate(":compileCommonMainKotlinMetadata")
assertTasksUpToDate(":compileKotlinJvm")
assertTasksUpToDate(":compileKotlinJs")
}
build("check") {
assertTasksExecuted(":jvmTest")
assertTasksExecuted(":jsTest")
}
}
}
} }
@@ -406,7 +406,7 @@ private fun setupProjectFromTestResources(
private val String.testProjectPath: Path get() = Paths.get("src", "test", "resources", "testProject", this) private val String.testProjectPath: Path get() = Paths.get("src", "test", "resources", "testProject", this)
private fun Path.addDefaultBuildFiles() { internal fun Path.addDefaultBuildFiles() {
addPluginManagementToSettings() addPluginManagementToSettings()
val buildSrc = resolve("buildSrc") val buildSrc = resolve("buildSrc")
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates
val kotlinStdlibDependencies = binaryCoordinates(Regex(".*kotlin-stdlib.*")) val kotlinStdlibDependencies = binaryCoordinates(Regex(".*kotlin-stdlib.*"))
val jetbrainsAnnotationDependencies = binaryCoordinates(Regex("org\\.jetbrains:annotations:.*"))
val kotilnNativeDistributionDependencies = IdeaKotlinDependencyMatcher("native distribution") { dependency -> val kotilnNativeDistributionDependencies = IdeaKotlinDependencyMatcher("native distribution") { dependency ->
dependency is IdeaKotlinResolvedBinaryDependency && dependency.isNativeDistribution dependency is IdeaKotlinResolvedBinaryDependency && dependency.isNativeDistribution
} }
@@ -7,6 +7,9 @@ package org.jetbrains.kotlin.gradle.util
import org.jetbrains.kotlin.gradle.testbase.createTempDirDeleteOnExit import org.jetbrains.kotlin.gradle.testbase.createTempDirDeleteOnExit
import java.io.File 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 = fun File.getFileByName(name: String): File =
findFileByName(name) ?: throw AssertionError("Could not find file with name '$name' in $this") 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() return result.toString()
} }
fun Path.replaceText(oldValue: String, newValue: String) {
writeText(readText().replace(oldValue, newValue))
}
fun File.replaceText(oldValue: String, newValue: String) { fun File.replaceText(oldValue: String, newValue: String) {
writeText(readText().replace(oldValue, newValue)) writeText(readText().replace(oldValue, newValue))
} }
@@ -24,7 +24,7 @@ internal fun TestProject.resolveIdeDependencies(
assertions: BuildResult.(dependencies: IdeaKotlinDependenciesContainer) -> Unit assertions: BuildResult.(dependencies: IdeaKotlinDependenciesContainer) -> Unit
) { ) {
build("${subproject.orEmpty()}:resolveIdeDependencies") { 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() val output = projectPath.resolve("${subprojectPathPrefix}build/ide/dependencies/proto").toFile()
if (!output.isDirectory) fail("Missing output directory: $output") if (!output.isDirectory) fail("Missing output directory: $output")
@@ -1,8 +1,14 @@
plugins { plugins {
id("org.jetbrains.kotlin.multiplatform").version("1.7.21") id("org.jetbrains.kotlin.multiplatform").version("<kgp_version>")
} }
repositories { repositories {
mavenLocal()
mavenCentral()
}
repositories {
mavenLocal()
mavenCentral() mavenCentral()
} }
@@ -1,7 +1,6 @@
plugins { plugins {
id("org.jetbrains.kotlin.multiplatform").version("1.7.21").apply(false) id("org.jetbrains.kotlin.multiplatform").version("<kgp_version>").apply(false)
} }
group = "included-build" group = "included-build"
version = "0.0.1" version = "0.0.1"
@@ -1,7 +1,10 @@
@file:Suppress("UnstableApiUsage")
include("included") include("included")
dependencyResolutionManagement { dependencyResolutionManagement {
repositories { repositories {
mavenLocal()
mavenCentral() mavenCentral()
} }
} }