[KPM] MviKotlinIdeaDependencyResolutionTest: Take host into account for platform libaries
KT-51386
This commit is contained in:
committed by
Space
parent
a4eb62e317
commit
05d33d9df6
+8
@@ -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") }
|
||||
|
||||
+60
-18
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user