[MPP] Add IT for cinterop commonization

KT-54975
This commit is contained in:
Pavel Kirpichenkov
2022-12-16 15:04:48 +02:00
committed by Space Team
parent 7e2a7579e8
commit 8bdd9b3837
10 changed files with 147 additions and 4 deletions
@@ -11,10 +11,7 @@ import org.jetbrains.kotlin.commonizer.identityString
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryDependency
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency
import org.jetbrains.kotlin.gradle.idea.tcs.extras.isCommonized
import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeDistribution
import org.jetbrains.kotlin.gradle.idea.tcs.extras.isNativeStdlib
import org.jetbrains.kotlin.gradle.idea.tcs.extras.klibExtra
import org.jetbrains.kotlin.gradle.idea.tcs.extras.*
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.assertMatches
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates
import org.jetbrains.kotlin.gradle.testbase.*
@@ -85,4 +82,74 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
}
}
}
@GradleTest
fun testCinterops(gradleVersion: GradleVersion) {
fun Iterable<IdeaKotlinDependency>.cinteropDependencies() =
this.filterIsInstance<IdeaKotlinBinaryDependency>().filter {
it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution
}
project(projectName = "cinteropImport", gradleVersion = gradleVersion) {
build(":dep-with-cinterop:publishToMavenLocal")
// build(":prepareKotlinIdeaImport")
// build("copyCommonizeCInteropForIde")
// build(":clientForBinaryDep:transformCommonMainCInteropDependenciesMetadataForIde")
resolveIdeDependencies("dep-with-cinterop") { dependencies ->
val commonMainDependencies = dependencies["commonMain"].cinteropDependencies()
val commonTestDependencies = dependencies["commonTest"].cinteropDependencies()
val linuxX64MainDependencies = dependencies["linuxX64Main"].cinteropDependencies()
val linuxX64TestDependencies = dependencies["linuxX64Test"].cinteropDependencies()
val linuxArmMainDependencies = dependencies["linuxArm64Main"].cinteropDependencies()
val linuxArmTestDependencies = dependencies["linuxArm64Test"].cinteropDependencies()
for (commonDeps in listOf(commonMainDependencies, commonTestDependencies)) {
commonDeps.assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64, linux_x64")))
}
linuxX64MainDependencies.assertMatches(binaryCoordinates(Regex("a:dep.*linux_x64")))
linuxArmMainDependencies.assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64")))
// TODO (kirpichenkov): cinterops from associate compilations for platform source sets
linuxX64TestDependencies.assertMatches(/*binaryCoordinates(Regex("a:dep.*linux_x64"))*/)
linuxArmTestDependencies.assertMatches(/*binaryCoordinates(Regex("a:dep.*linux_arm64"))*/)
}
resolveIdeDependencies("client-for-binary-dep") { dependencies ->
val commonMainDependencies = dependencies["commonMain"].cinteropDependencies()
val commonTestDependencies = dependencies["commonTest"].cinteropDependencies()
val linuxMainDependencies = dependencies["linuxX64Main"].cinteropDependencies()
val linuxTestDependencies = dependencies["linuxX64Test"].cinteropDependencies()
val linux2MainDependencies = dependencies["linuxArm64Main"].cinteropDependencies()
val linux2TestDependencies = dependencies["linuxArm64Test"].cinteropDependencies()
for (commonDeps in listOf(commonMainDependencies, commonTestDependencies)) {
commonDeps.assertMatches(
)
}
for (platformDeps in listOf(linuxMainDependencies, linuxTestDependencies, linux2MainDependencies, linux2TestDependencies)) {
platformDeps.assertMatches(
)
}
}
resolveIdeDependencies("client-for-project-to-project-dep") { dependencies ->
val commonMainDependencies = dependencies["commonMain"].cinteropDependencies()
val commonTestDependencies = dependencies["commonTest"].cinteropDependencies()
val linuxMainDependencies = dependencies["linuxX64Main"].cinteropDependencies()
val linuxTestDependencies = dependencies["linuxX64Test"].cinteropDependencies()
val linux2MainDependencies = dependencies["linuxArm64Main"].cinteropDependencies()
val linux2TestDependencies = dependencies["linuxArm64Test"].cinteropDependencies()
for (commonDeps in listOf(commonMainDependencies, commonTestDependencies)) {
commonDeps.assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64, linux_x64")))
}
for (platformDeps in listOf(linuxMainDependencies, linuxTestDependencies, linux2MainDependencies, linux2TestDependencies)) {
platformDeps.assertMatches() // TODO (kirpichenkov): project to project dependency, platform source set cinterops
}
}
}
}
}
@@ -0,0 +1,9 @@
allprojects {
group = "a"
version = "1.0"
repositories {
mavenLocal()
mavenCentral()
}
}
@@ -0,0 +1,14 @@
plugins {
kotlin("multiplatform")
}
kotlin {
linuxX64()
linuxArm64()
sourceSets {
getByName("commonMain").dependencies {
implementation("a:dep-with-cinterop:1.0")
}
}
}
@@ -0,0 +1,23 @@
plugins {
kotlin("multiplatform")
id("maven-publish")
}
allprojects {
group = "a"
version = "1.0"
repositories {
mavenLocal()
mavenCentral()
}
}
kotlin {
linuxX64()
linuxArm64()
sourceSets.getByName("commonMain").dependencies {
implementation(project(":dep-with-cinterop"))
}
}
@@ -0,0 +1,9 @@
plugins {
kotlin("multiplatform")
id("maven-publish")
}
kotlin {
linuxX64().compilations.getByName("main").cinterops.create("dep")
linuxArm64().compilations.getByName("main").cinterops.create("dep")
}
@@ -0,0 +1,7 @@
package pkg
import dep.*
class DependencyKotlinClass {
val mode: Dependency = Dependency.GOO
}
@@ -0,0 +1,2 @@
kotlin.mpp.import.enableKgpDependencyResolution=true
kotlin.mpp.enableCInteropCommonization=true
@@ -0,0 +1,6 @@
rootProject.name = "cinterops"
include(":dep-with-cinterop")
include(":client-for-binary-dep")
include(":client-for-project-to-project-dep")