[Commonizer] Add CommonizerHierarchicalIT

Test platform dependencies on leaf source sets
^KT-46716 Verification pending
This commit is contained in:
Pavel Kirpichenkov
2021-06-07 16:12:42 +03:00
committed by Space
parent 5f7576e546
commit d76bb45716
4 changed files with 84 additions and 0 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle
import org.gradle.api.logging.configuration.WarningMode
import org.gradle.internal.os.OperatingSystem
import org.jetbrains.kotlin.konan.file.File
import org.junit.Test
class CommonizerHierarchicalIT : BaseGradleIT() {
@@ -111,6 +112,22 @@ class CommonizerHierarchicalIT : BaseGradleIT() {
}
}
@Test
fun `test platform dependencies on leaf source sets`() {
with(Project("commonizeHierarchicallyPlatformDependencies")) {
build(":checkPlatformDependencies") {
val klibPlatform = "${File.separator}klib${File.separator}platform${File.separator}".replace("\\", "\\\\")
assertSuccessful()
assertTasksExecuted(":commonizeNativeDistribution")
assertTasksExecuted(":checkLinuxX64MainPlatformDependencies")
assertTasksExecuted(":checkLinuxArm64MainPlatformDependencies")
assertContainsRegex(Regex(""".*linuxX64Main.*$klibPlatform.*[Pp]osix.*"""))
assertContainsRegex(Regex(""".*linuxArm64Main.*$klibPlatform.*[Pp]osix.*"""))
}
}
}
private object Os {
private val os = OperatingSystem.current()
val canCompileApple get() = os.isMacOsX
@@ -0,0 +1,53 @@
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
plugins {
kotlin("multiplatform")
}
repositories {
mavenLocal()
mavenCentral()
}
fun createPlatformDependenciesTestTask(sourceSet: DefaultKotlinSourceSet) {
tasks.create("check${sourceSet.name.capitalize()}PlatformDependencies") {
tasks.maybeCreate("checkPlatformDependencies").dependsOn(this)
// Dependencies forwarded to the IDE will be attached to the intransitiveMetadataConfiguration
val dependenciesConfiguration = configurations.getByName(sourceSet.intransitiveMetadataConfigurationName)
dependsOn("commonize")
doLast {
val dependencies = dependenciesConfiguration.files
dependencies.forEach { dependency ->
logger.quiet("${sourceSet.name} dependency: ${dependency.path}")
}
dependencies.forEach { dependency ->
if ("klib${File.separator}commonized" in dependency.path) {
throw AssertionError(
"${sourceSet.name}: Found unexpected commonized dependency ${dependency.path}"
)
}
}
if (dependencies.isEmpty()) {
throw AssertionError("${sourceSet.name}: Expected at least one platform dependency")
}
val platformKlibPattern = "klib${File.separator}platform"
if (dependencies.none { dependency -> platformKlibPattern in dependency.path }) {
throw AssertionError("${sourceSet.name}: Expected at least one dependency from '$platformKlibPattern'")
}
}
}
}
kotlin {
linuxX64()
linuxArm64()
createPlatformDependenciesTestTask(sourceSets.getByName("linuxX64Main") as DefaultKotlinSourceSet)
createPlatformDependenciesTestTask(sourceSets.getByName("linuxArm64Main") as DefaultKotlinSourceSet)
}
@@ -0,0 +1,4 @@
kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.native.enableDependencyPropagation=false
kotlin.mpp.enableHierarchicalCommonization=true
kotlin.mpp.enableIntransitiveMetadataConfiguration=true
@@ -0,0 +1,10 @@
pluginManagement {
repositories {
mavenLocal()
gradlePluginPortal()
}
val kotlin_version: String by settings
plugins {
kotlin("multiplatform").version(kotlin_version)
}
}