[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
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("<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 fun Path.addDefaultBuildFiles() {
internal fun Path.addDefaultBuildFiles() {
addPluginManagementToSettings()
val buildSrc = resolve("buildSrc")
@@ -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
}
@@ -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))
}
@@ -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")
@@ -1,8 +1,14 @@
plugins {
id("org.jetbrains.kotlin.multiplatform").version("1.7.21")
id("org.jetbrains.kotlin.multiplatform").version("<kgp_version>")
}
repositories {
mavenLocal()
mavenCentral()
}
repositories {
mavenLocal()
mavenCentral()
}
@@ -1,7 +1,6 @@
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"
version = "0.0.1"
@@ -1,7 +1,10 @@
@file:Suppress("UnstableApiUsage")
include("included")
dependencyResolutionManagement {
repositories {
mavenLocal()
mavenCentral()
}
}