diff --git a/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedModuleDetectorPlugin.kt b/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedModuleDetectorPlugin.kt index 9f4edc1..299abf7 100644 --- a/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedModuleDetectorPlugin.kt +++ b/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedModuleDetectorPlugin.kt @@ -167,7 +167,7 @@ class AffectedModuleDetectorPlugin : Plugin { } project.pluginManager.withPlugin(pluginId) { - getAffectedPath(testType, project)?.let { path -> + getAffectedPaths(testType, project).takeIf { it.isNotEmpty() }?.forEach { path -> val pathOrNull = project.tasks.findByPath(path) val onlyIf = when { pathOrNull == null -> false @@ -183,34 +183,34 @@ class AffectedModuleDetectorPlugin : Plugin { } } - private fun getAffectedPath( + private fun getAffectedPaths( taskType: AffectedModuleTaskType, project: Project - ): String? { + ): List { val tasks = requireNotNull( value = project.extensions.findByName(AffectedTestConfiguration.name), lazyMessage = { "Unable to find ${AffectedTestConfiguration.name} in $project" } ) as AffectedTestConfiguration + val androidTaskNames = tasks.getTestTaskNames() + return when (taskType) { InternalTaskType.ANDROID_TEST -> { - getPathAndTask(project, tasks.runAndroidTestTask) + androidTaskNames.androidTestTasks.takeIf { + it.isNotEmpty() + } ?: getPathAndTask(project, AffectedTestConfiguration.DEFAULT_ANDROID_TEST_TASK) } InternalTaskType.ASSEMBLE_ANDROID_TEST -> { - getPathAndTask(project, tasks.assembleAndroidTestTask) + androidTaskNames.assembleAndroidTestTasks.takeIf { + it.isNotEmpty() + } ?: getPathAndTask(project, AffectedTestConfiguration.DEFAULT_ASSEMBLE_ANDROID_TEST_TASK) } InternalTaskType.ANDROID_JVM_TEST -> { - getPathAndTask(project, tasks.jvmTestTask) - } - - InternalTaskType.JVM_TEST -> { - if (tasks.jvmTestTask != AffectedTestConfiguration.DEFAULT_JVM_TEST_TASK) { - getPathAndTask(project, tasks.jvmTestTask) - } else { - getPathAndTask(project, taskType.originalGradleCommand) - } + androidTaskNames.unitTestTasks.takeIf { + it.isNotEmpty() + } ?: getPathAndTask(project, AffectedTestConfiguration.DEFAULT_JVM_TEST_TASK) } else -> { @@ -219,8 +219,8 @@ class AffectedModuleDetectorPlugin : Plugin { } } - private fun getPathAndTask(project: Project, task: String?): String? { - return if (task.isNullOrBlank()) null else "${project.path}:$task" + private fun getPathAndTask(project: Project, task: String?): List { + return if (task.isNullOrBlank()) emptyList() else listOf("${project.path}:$task") } private fun filterAndroidTests(project: Project) { diff --git a/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfiguration.kt b/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfiguration.kt index 2746e16..2f10027 100644 --- a/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfiguration.kt +++ b/affectedmoduledetector/src/main/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfiguration.kt @@ -1,5 +1,8 @@ package com.dropbox.affectedmoduledetector +import org.gradle.api.provider.Provider +import java.io.Serializable + /** * Used to configure which variant to run for affected tasks by adding following block to modules * affectedTestConfiguration{ @@ -7,10 +10,17 @@ package com.dropbox.affectedmoduledetector * } */ open class AffectedTestConfiguration { + var testTasksProvider: Provider? = null + + fun getTestTaskNames(): TaskNames { + return testTasksProvider?.orNull ?: TaskNames() + } - var assembleAndroidTestTask: String? = DEFAULT_ASSEMBLE_ANDROID_TEST_TASK - var runAndroidTestTask: String? = DEFAULT_ANDROID_TEST_TASK - var jvmTestTask: String? = DEFAULT_JVM_TEST_TASK + data class TaskNames( + val unitTestTasks: List = listOf(DEFAULT_JVM_TEST_TASK), + val androidTestTasks: List = listOf(DEFAULT_ANDROID_TEST_TASK), + val assembleAndroidTestTasks: List = listOf(DEFAULT_ASSEMBLE_ANDROID_TEST_TASK), + ): Serializable companion object { const val name = "affectedTestConfiguration" diff --git a/affectedmoduledetector/src/test/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfigurationTest.kt b/affectedmoduledetector/src/test/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfigurationTest.kt index 90f21e7..9c8acd1 100644 --- a/affectedmoduledetector/src/test/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfigurationTest.kt +++ b/affectedmoduledetector/src/test/kotlin/com/dropbox/affectedmoduledetector/AffectedTestConfigurationTest.kt @@ -15,27 +15,13 @@ class AffectedTestConfigurationTest { @Test fun `GIVEN AffectedTestConfiguration WHEN default values THEN default values returned`() { - assertThat(config.assembleAndroidTestTask).isEqualTo("assembleDebugAndroidTest") - assertThat(config.runAndroidTestTask).isEqualTo("connectedDebugAndroidTest") - assertThat(config.jvmTestTask).isEqualTo("testDebugUnitTest") - } - - @Test - fun `GIVEN AffectedTestConfiguration WHEN values are updated THEN new values are returned`() { - // GIVEN - val assembleAndroidTestTask = "assembleAndroidTestTask" - val runAndroidTestTask = "runAndroidTestTask" - val jvmTest = "jvmTest" - - // WHEN - config.assembleAndroidTestTask = assembleAndroidTestTask - config.runAndroidTestTask = runAndroidTestTask - config.jvmTestTask = jvmTest - - // THEN - assertThat(config.assembleAndroidTestTask).isEqualTo(assembleAndroidTestTask) - assertThat(config.runAndroidTestTask).isEqualTo(runAndroidTestTask) - assertThat(config.jvmTestTask).isEqualTo(jvmTest) + val taskNames = config.getTestTaskNames() + assertThat(taskNames.assembleAndroidTestTasks.size).isEqualTo(1) + assertThat(taskNames.assembleAndroidTestTasks.first()).isEqualTo("assembleDebugAndroidTest") + assertThat(taskNames.androidTestTasks.size).isEqualTo(1) + assertThat(taskNames.androidTestTasks.first()).isEqualTo("connectedDebugAndroidTest") + assertThat(taskNames.unitTestTasks.size).isEqualTo(1) + assertThat(taskNames.unitTestTasks.first()).isEqualTo("testDebugUnitTest") } @Test