[Gradle] Implement IdeAndroidDependencyResolutionTest

Added failing test for: KT-56430
This commit is contained in:
Sebastian Sellmair
2023-02-06 09:56:50 +01:00
committed by Space Team
parent dec9704cea
commit 7341f37838
4 changed files with 85 additions and 1 deletions
@@ -17,6 +17,10 @@ import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver.Companion.SO
fun interface IdeAdditionalArtifactResolver {
fun resolve(sourceSet: KotlinSourceSet, dependencies: Set<IdeaKotlinDependency>)
object Empty : IdeAdditionalArtifactResolver {
override fun resolve(sourceSet: KotlinSourceSet, dependencies: Set<IdeaKotlinDependency>) = Unit
}
}
internal fun IdeDependencyResolver.withAdditionalArtifactResolver(resolver: IdeAdditionalArtifactResolver) =
@@ -129,7 +129,7 @@ interface IdeMultiplatformImport {
enum class AdditionalArtifactResolutionPhase {
PreAdditionalArtifactResolution,
SourcesAndJavadocArtifactResolution,
SourcesAndDocumentationResolution,
PostAdditionalArtifactResolution
}
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.measureTimeMillisWithResult
import kotlin.system.measureTimeMillis
@Suppress("LoggingStringTemplateAsArgument")
internal class IdeMultiplatformImportImpl(
private val extension: KotlinProjectExtension
) : IdeMultiplatformImport {
@@ -0,0 +1,79 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.gradle.dependencyResolutionTests.tcs
import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryDependency
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeArtifactResolutionQuerySourcesAndDocumentationResolver
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImportStatistics
import org.jetbrains.kotlin.gradle.util.*
import org.jetbrains.kotlin.gradle.utils.androidExtension
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.fail
/**
* Android is not supposed to resolve any dependencies in this import.
* 'Android' refers to the 'classic' Android plugins (like com.android.application, ...library, ...)
*/
class IdeAndroidDependencyResolutionTest {
private val project = buildProject {
enableDefaultStdlibDependency(true)
enableDependencyVerification(false)
setMultiplatformAndroidSourceSetLayoutVersion(2)
applyMultiplatformPlugin()
plugins.apply("com.android.library")
androidExtension.compileSdkVersion(33)
repositories.mavenLocal()
repositories.mavenCentralCacheRedirector()
multiplatformExtension.apply {
android()
sourceSets.getByName("commonMain").dependencies {
implementation("com.arkivanov.mvikotlin:mvikotlin:3.0.2")
}
}
}.evaluate()
private val androidSourceSets = project.multiplatformExtension.android().compilations.flatMap { it.kotlinSourceSets }
.ifEmpty { fail("Expected at least one Android SourceSet") }
@BeforeTest
fun checkEnvironment() {
assumeAndroidSdkAvailable()
}
@Test
fun `test - android source sets do not resolve binary dependencies`() {
androidSourceSets.forEach { sourceSet ->
val binaryDependencies = project.kotlinIdeMultiplatformImport.resolveDependencies(sourceSet)
.filterIsInstance<IdeaKotlinBinaryDependency>()
if (binaryDependencies.isNotEmpty()) {
fail("Expected no binary dependencies being resolved for Android. Found $binaryDependencies")
}
}
}
@Test
fun `test - Android SourceSets - do not execute Sources And Documentation Resolver`() {
androidSourceSets.forEach { sourceSet ->
project.kotlinIdeMultiplatformImport.resolveDependencies(sourceSet)
if (
IdeArtifactResolutionQuerySourcesAndDocumentationResolver::class.java in
project.kotlinIdeMultiplatformImportStatistics.getExecutionTimes()
) {
fail("${IdeArtifactResolutionQuerySourcesAndDocumentationResolver::class.simpleName} as executed on ${sourceSet.name}")
}
}
}
}