[KPM] MviKotlinIdeaDependencyResolutionTest: Take host into account for platform libaries

KT-51386
This commit is contained in:
sebastian.sellmair
2022-03-08 10:27:40 +01:00
committed by Space
parent a4eb62e317
commit 05d33d9df6
2 changed files with 68 additions and 18 deletions
@@ -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") }
@@ -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",