Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ class AffectedModuleDetectorPlugin : Plugin<Project> {
}

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
Expand All @@ -183,34 +183,34 @@ class AffectedModuleDetectorPlugin : Plugin<Project> {
}
}

private fun getAffectedPath(
private fun getAffectedPaths(
taskType: AffectedModuleTaskType,
project: Project
): String? {
): List<String> {
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 -> {
Expand All @@ -219,8 +219,8 @@ class AffectedModuleDetectorPlugin : Plugin<Project> {
}
}

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<String> {
return if (task.isNullOrBlank()) emptyList() else listOf("${project.path}:$task")
}

private fun filterAndroidTests(project: Project) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
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{
* assembleAndroidTestTask = "assembleDevDebugAndroidTest"
* }
*/
open class AffectedTestConfiguration {
var testTasksProvider: Provider<TaskNames>? = 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<String> = listOf(DEFAULT_JVM_TEST_TASK),
val androidTestTasks: List<String> = listOf(DEFAULT_ANDROID_TEST_TASK),
val assembleAndroidTestTasks: List<String> = listOf(DEFAULT_ASSEMBLE_ANDROID_TEST_TASK),
): Serializable

companion object {
const val name = "affectedTestConfiguration"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down