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
This commit is contained in:
Sergey Igushkin
2021-11-15 19:27:57 +04:00
committed by Space
parent 8ea6221932
commit 3ac472ceb3
2 changed files with 31 additions and 4 deletions
@@ -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() {
@@ -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<Any>()
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,