From 05d33d9df6572d639f95608a48a521d6791a071a Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Tue, 8 Mar 2022 10:27:40 +0100 Subject: [PATCH] [KPM] MviKotlinIdeaDependencyResolutionTest: Take host into account for platform libaries KT-51386 --- ...LightweightIdeaDependencyResolutionTest.kt | 8 ++ .../MviKotlinIdeaDependencyResolutionTest.kt | 78 ++++++++++++++----- 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/AbstractLightweightIdeaDependencyResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/AbstractLightweightIdeaDependencyResolutionTest.kt index e16c7e20ac2..789cb3af194 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/AbstractLightweightIdeaDependencyResolutionTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/AbstractLightweightIdeaDependencyResolutionTest.kt @@ -13,8 +13,12 @@ import org.gradle.api.artifacts.verification.DependencyVerificationMode import org.gradle.api.internal.project.ProjectInternal import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.commonizer.KonanDistribution +import org.jetbrains.kotlin.commonizer.platformLibsDir import org.jetbrains.kotlin.compilerRunner.konanHome import org.jetbrains.kotlin.gradle.enableDefaultStdlibDependency +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.IdeaKotlinDependencyMatcher +import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost +import org.jetbrains.kotlin.konan.target.KonanTarget abstract class AbstractLightweightIdeaDependencyResolutionTest { @@ -28,6 +32,10 @@ abstract class AbstractLightweightIdeaDependencyResolutionTest { } val Project.konanDistribution get() = KonanDistribution(project.konanHome) + + fun Project.nativePlatformLibraries(target: KonanTarget): IdeaKotlinDependencyMatcher? = + IdeaKotlinDependencyMatcher.InDirectory(project.konanDistribution.platformLibsDir.resolve(target.name)) + .takeIf { target.enabledOnCurrentHost } } fun RepositoryHandler.mavenCentralCacheRedirector() = maven { it.setUrl("https://cache-redirector.jetbrains.com/maven-central") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/MviKotlinIdeaDependencyResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/MviKotlinIdeaDependencyResolutionTest.kt index 891430d1d4a..6aeb9800940 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/MviKotlinIdeaDependencyResolutionTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/kpm/idea/MviKotlinIdeaDependencyResolutionTest.kt @@ -9,34 +9,38 @@ package org.jetbrains.kotlin.gradle.kpm.idea import com.android.build.gradle.LibraryExtension import com.android.build.gradle.LibraryPlugin -import org.jetbrains.kotlin.commonizer.platformLibsDir import org.jetbrains.kotlin.commonizer.stdlib import org.jetbrains.kotlin.gradle.android.androidPrototype import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin import org.jetbrains.kotlin.gradle.kpm.buildIdeaKotlinProjectModel import org.jetbrains.kotlin.gradle.kpm.idea.IdeaKotlinDependency.Companion.CLASSPATH_BINARY_TYPE -import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.* -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinIosArm64Variant -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinIosX64Variant -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinJvmVariant -import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.jvm -import org.jetbrains.kotlin.konan.target.KonanTarget +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsFragment +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertContainsModule +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertIsNotEmpty +import org.jetbrains.kotlin.gradle.kpm.idea.testFixtures.assertResolvedBinaryDependencies +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.* +import org.jetbrains.kotlin.konan.target.KonanTarget.* import org.junit.Test class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyResolutionTest() { @Test - fun `test - simple ios and jvm project`() { + fun `test - simple ios linux and jvm project`() { val project = buildProject() val kotlin = project.applyKpmPlugin { mainAndTest { fragments.create("jvm", KotlinJvmVariant::class.java) + val linuxX64Variant = fragments.create("linuxX64", KotlinLinuxX64Variant::class.java) val iosX64Variant = fragments.create("iosX64", KotlinIosX64Variant::class.java) val iosArm64Variant = fragments.create("iosArm64", KotlinIosArm64Variant::class.java) val iosCommon = fragments.create("iosCommon") + val nativeCommon = fragments.create("nativeCommon") - iosCommon.refines(common) + linuxX64Variant.refines(nativeCommon) + + nativeCommon.refines(common) + iosCommon.refines(nativeCommon) iosX64Variant.refines(iosCommon) iosArm64Variant.refines(iosCommon) @@ -66,6 +70,50 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR "org.jetbrains:annotations:13.0", ) + module.assertContainsFragment("nativeCommon").assertResolvedBinaryDependencies( + CLASSPATH_BINARY_TYPE, + project.konanDistribution.stdlib, + "com.arkivanov.mvikotlin:mvikotlin:3.0.0-beta01:main:commonMain", + "com.arkivanov.mvikotlin:mvikotlin:3.0.0-beta01:main:jsNativeMain", + "com.arkivanov.essenty:lifecycle:0.2.2:main:commonMain", + "com.arkivanov.essenty:instance-keeper:0.2.2:main:commonMain", + + /* + The following dependencies are actually marked as 'implementation' on mvikotlin. + We still resolve those dependencies, because this source set is shared native and + the shared native compiler expects those dependencies as well. + + Including those dependencies for IDE analysis is up for discussion. + */ + "com.arkivanov.mvikotlin:utils-internal:3.0.0-beta01:main:commonMain", + "com.arkivanov.mvikotlin:utils-internal:3.0.0-beta01:main:nativeMain", + "com.arkivanov.mvikotlin:rx:3.0.0-beta01:main:commonMain", + "com.arkivanov.mvikotlin:rx-internal:3.0.0-beta01:main:commonMain", + "com.arkivanov.mvikotlin:rx-internal:3.0.0-beta01:main:nativeMain", + "com.arkivanov.essenty:utils-internal:0.2.2:main:commonMain", + "com.arkivanov.essenty:utils-internal:0.2.2:main:nativeMain", + + + /* Unwanted but accepted dependencies */ + "org.jetbrains.kotlin:kotlin-stdlib:1.6.10", + "org.jetbrains:annotations:13.0" + ) + + module.assertContainsFragment("linuxX64").assertResolvedBinaryDependencies( + CLASSPATH_BINARY_TYPE, + project.konanDistribution.stdlib, + project.nativePlatformLibraries(LINUX_X64), + "com.arkivanov.mvikotlin:mvikotlin-linuxx64:3.0.0-beta01", + "com.arkivanov.essenty:lifecycle-linuxx64:0.2.2", + "com.arkivanov.essenty:instance-keeper-linuxx64:0.2.2", + "com.arkivanov.mvikotlin:rx-internal-linuxx64:3.0.0-beta01", + "com.arkivanov.mvikotlin:utils-internal-linuxx64:3.0.0-beta01", + "com.arkivanov.mvikotlin:rx-linuxx64:3.0.0-beta01", + "com.arkivanov.essenty:utils-internal-linuxx64:0.2.2", + "org.jetbrains.kotlin:kotlin-stdlib:1.6.10", + "org.jetbrains:annotations:13.0", + ) + module.assertContainsFragment("iosCommon").assertResolvedBinaryDependencies( CLASSPATH_BINARY_TYPE, project.konanDistribution.stdlib, @@ -76,13 +124,7 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR "org.jetbrains.kotlin:kotlin-stdlib:1.6.10", "org.jetbrains:annotations:13.0", - /* - The following dependencies are actually marked as 'implementation' on mvikotlin. - We still resolve those dependencies, because this source set is shared native and - the shared native compiler expects those dependencies as well. - - Including those dependencies for IDE analysis is up for discussion. - */ + /* Internals are listed here as well. See comment above */ "com.arkivanov.mvikotlin:utils-internal:3.0.0-beta01:main:commonMain", "com.arkivanov.mvikotlin:utils-internal:3.0.0-beta01:main:darwinMain", "com.arkivanov.mvikotlin:utils-internal:3.0.0-beta01:main:nativeMain", @@ -97,7 +139,7 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR module.assertContainsFragment("iosX64").assertResolvedBinaryDependencies( CLASSPATH_BINARY_TYPE, project.konanDistribution.stdlib, - IdeaKotlinDependencyMatcher.InDirectory(project.konanDistribution.platformLibsDir.resolve(KonanTarget.IOS_X64.name)), + project.nativePlatformLibraries(IOS_X64), "org.jetbrains.kotlin:kotlin-stdlib:1.6.10", "org.jetbrains:annotations:13.0", "com.arkivanov.mvikotlin:mvikotlin-iosx64:3.0.0-beta01", @@ -114,7 +156,7 @@ class MviKotlinIdeaDependencyResolutionTest : AbstractLightweightIdeaDependencyR module.assertContainsFragment("iosArm64").assertResolvedBinaryDependencies( CLASSPATH_BINARY_TYPE, project.konanDistribution.stdlib, - IdeaKotlinDependencyMatcher.InDirectory(project.konanDistribution.platformLibsDir.resolve(KonanTarget.IOS_ARM64.name)), + project.nativePlatformLibraries(IOS_ARM64), "com.arkivanov.mvikotlin:mvikotlin-iosarm64:3.0.0-beta01", "com.arkivanov.essenty:lifecycle-iosarm64:0.2.2", "com.arkivanov.essenty:instance-keeper-iosarm64:0.2.2",