From 3ac472ceb3ce24616bdf96f06feddd81a88bc01e Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 15 Nov 2021 19:27:57 +0400 Subject: [PATCH] Fix Android unit test tasks not running in `allTests` The Android unit test tasks were not created by the Kotlin Gradle plugin, so the plugin didn't add the tadk dependencies to its aggregating `allTests` task. Issue #KT-38456 Issue #KT-44227 --- .../AbstractKotlinAndroidGradleTests.kt | 9 +++++++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 26 ++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt index 0db8c9d897d..a3b5b7e96ae 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt @@ -457,6 +457,15 @@ open class KotlinAndroid36GradleIT : KotlinAndroid34GradleIT() { } } } + + @Test + fun `test MPP allTests task depending on Android unit tests`(): Unit = with(Project("new-mpp-android")) { + build(":lib:allTests", "--dry-run") { + assertSuccessful() + assertContains(":lib:testDebugUnitTest SKIPPED") + assertContains(":lib:testReleaseUnitTest SKIPPED") + } + } } open class KotlinAndroid70GradleIT : KotlinAndroid36GradleIT() { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index baa25683d6d..f14e5bad9ed 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -7,12 +7,9 @@ package org.jetbrains.kotlin.gradle.plugin import com.android.build.gradle.* import com.android.build.gradle.BasePlugin -import com.android.build.gradle.api.AndroidSourceSet -import com.android.build.gradle.api.BaseVariant -import com.android.build.gradle.api.SourceKind +import com.android.build.gradle.api.* import org.gradle.api.* import org.gradle.api.artifacts.repositories.ArtifactRepository -import org.gradle.api.attributes.Bundling import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.gradle.api.file.ConfigurableFileTree @@ -47,6 +44,7 @@ import org.jetbrains.kotlin.gradle.targets.js.jsPluginDeprecationMessage import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry import org.jetbrains.kotlin.gradle.tooling.includeKotlinToolingMetadataInApk import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.utils.addToStdlib.cast @@ -883,6 +881,8 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool } project.includeKotlinToolingMetadataInApk() + + addAndroidUnitTestTasksAsDependenciesToAllTest(project) } /** @@ -981,6 +981,24 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool kotlinOptions.jvmTarget = "1.6" } + private fun addAndroidUnitTestTasksAsDependenciesToAllTest(project: Project) { + val allTestTaskName = project.kotlinTestRegistry.allTestsTaskName + project.tasks.matching { it.name == allTestTaskName }.configureEach { task -> + task.dependsOn(project.provider { + val androidUnitTestTasks = mutableListOf() + forEachVariant(project) { variant -> + if (variant is UnitTestVariant) { + // There's no API for getting the Android unit test tasks from the variant, so match them by name: + androidUnitTestTasks.add(project.provider { + project.tasks.matching { it.name == lowerCamelCaseName("test", variant.name) } + }) + } + } + androidUnitTestTasks + }) + } + } + private fun preprocessVariant( variantData: BaseVariant, compilation: KotlinJvmAndroidCompilation,