[Gradle] [MPP] Fix 'getDependenciesTransformation' for ^KT-46273

This setup requires a 'jvm like' target and an orphan source set, which
depends on 'commonTest'. This orphan will not participate in any
compilation and therefore will not have any platform.

The code expected at least one test task for this source set
and therefore at least one test framework.

^KT-46273 Verification Pending
This commit is contained in:
sebastian.sellmair
2021-09-22 16:06:59 +02:00
committed by Space
parent 1960fe65b8
commit da361a030e
2 changed files with 53 additions and 13 deletions
@@ -0,0 +1,48 @@
/*
* Copyright 2010-2021 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
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import kotlin.test.Test
class KT46273JvmTargetAndOrphanTestSourceSetTest : MultiplatformExtensionTest() {
override fun setup() {
enableGranularSourceSetsMetadata()
super.setup()
}
@Test
fun `test KT-46273`() {
kotlin.jvm()
val commonTest = kotlin.sourceSets.getByName("commonTest")
commonTest.dependencies {
implementation(kotlin("test"))
}
val orphanTestSourceSet = kotlin.sourceSets.create("orphanTest") as DefaultKotlinSourceSet
orphanTestSourceSet.dependsOn(commonTest)
project.evaluate()
/*
Previously failed with:
Collection is empty.
java.util.NoSuchElementException: Collection is empty.
at kotlin.collections.CollectionsKt___CollectionsKt.single(_Collections.kt:562)
at org.jetbrains.kotlin.gradle.internal.KotlinDependenciesManagementKt.kotlinTestCapabilityForJvmSourceSet(KotlinDependenciesManagement.kt:347)
The dependencies' transformation will be called by the IDE during import.
*/
KotlinDependencyScope.values().forEach { scope ->
orphanTestSourceSet.getDependenciesTransformation(scope)
}
}
}
@@ -11,18 +11,13 @@ import com.android.build.gradle.api.UnitTestVariant
import org.gradle.api.InvalidUserDataException
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.DependencySet
import org.gradle.api.artifacts.ExternalDependency
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.artifacts.*
import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.api.tasks.testing.Test
import org.gradle.api.tasks.testing.junit.JUnitOptions
import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions
import org.gradle.api.tasks.testing.testng.TestNGOptions
import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.execution.KotlinAggregateExecutionSource
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
@@ -31,13 +26,12 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleFragment
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinGradleModule
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope
import org.jetbrains.kotlin.gradle.plugin.sources.withAllDependsOnSourceSets
import org.jetbrains.kotlin.gradle.plugin.sources.resolveAllDependsOnSourceSets
import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope
import org.jetbrains.kotlin.gradle.plugin.sources.withAllDependsOnSourceSets
import org.jetbrains.kotlin.gradle.targets.jvm.JvmCompilationsTestRunSource
import org.jetbrains.kotlin.gradle.tasks.locateTask
import org.jetbrains.kotlin.gradle.testing.KotlinTaskTestRun
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
internal const val KOTLIN_MODULE_GROUP = "org.jetbrains.kotlin"
@@ -348,10 +342,8 @@ private fun kotlinTestCapabilityForJvmSourceSet(project: Project, kotlinSourceSe
KotlinTestJvmFramework.junit
}
}
return when {
frameworks.size > 1 -> null
else -> "$KOTLIN_MODULE_GROUP:$KOTLIN_TEST_ROOT_MODULE_NAME-framework-${frameworks.single()}"
}
return "$KOTLIN_MODULE_GROUP:$KOTLIN_TEST_ROOT_MODULE_NAME-framework-${frameworks.singleOrNull() ?: return null}"
}
internal const val KOTLIN_TEST_ROOT_MODULE_NAME = "kotlin-test"
@@ -402,4 +394,4 @@ private fun Project.tryWithDependenciesIfUnresolved(configuration: Configuration
private fun Configuration.allNonProjectDependencies() = allDependencies.matching { it !is ProjectDependency }
private fun Configuration.nonProjectDependencies() = dependencies.matching { it !is ProjectDependency }
private fun Configuration.nonProjectDependencies() = dependencies.matching { it !is ProjectDependency }