Skip to content

Commit 4f1095c

Browse files
author
Marcel Schnelle
authored
Create Jacoco tasks optionally, yielding to existing task (but logging a warning) (#159)
1 parent 5b6ae92 commit 4f1095c

File tree

4 files changed

+34
-9
lines changed

4 files changed

+34
-9
lines changed

plugin/android-junit5/src/main/kotlin/de/mannodermaus/gradle/plugins/junit5/Plugin.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ package de.mannodermaus.gradle.plugins.junit5
22

33
import com.android.build.gradle.api.BaseVariant
44
import com.android.builder.model.Version.ANDROID_GRADLE_PLUGIN_VERSION
5-
import de.mannodermaus.gradle.plugins.junit5.internal.android
6-
import de.mannodermaus.gradle.plugins.junit5.internal.createJUnit5ConfigurationFor
7-
import de.mannodermaus.gradle.plugins.junit5.internal.requireGradle
8-
import de.mannodermaus.gradle.plugins.junit5.internal.requireVersion
9-
import de.mannodermaus.gradle.plugins.junit5.internal.testTaskOf
5+
import de.mannodermaus.gradle.plugins.junit5.internal.*
106
import de.mannodermaus.gradle.plugins.junit5.providers.DirectoryProvider
117
import de.mannodermaus.gradle.plugins.junit5.providers.JavaDirectoryProvider
128
import de.mannodermaus.gradle.plugins.junit5.providers.KotlinDirectoryProvider
@@ -94,7 +90,10 @@ class AndroidJUnitPlatformPlugin : Plugin<Project> {
9490
// Create a Jacoco friend task
9591
val enabledVariants = jacocoOptions.onlyGenerateTasksForVariants
9692
if (enabledVariants.isEmpty() || enabledVariants.contains(variant.name)) {
97-
AndroidJUnit5JacocoReport.create(this, variant, testTask, directoryProviders)
93+
val jacocoTask = AndroidJUnit5JacocoReport.create(this, variant, testTask, directoryProviders)
94+
if (jacocoTask == null) {
95+
project.logger.junit5Warn("Jacoco task for variant '${variant.name}' already exists. Disabling customization for JUnit 5...")
96+
}
9897
}
9998
}
10099
}

plugin/android-junit5/src/main/kotlin/de/mannodermaus/gradle/plugins/junit5/internal/Extensions.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ fun Logger.junit5Info(text: String) {
141141
info("[android-junit5]: $text")
142142
}
143143

144+
/**
145+
* Log the provided warning message using the plugin's Log Tag.
146+
*/
147+
fun Logger.junit5Warn(text: String) {
148+
warn("[android-junit5]: $text")
149+
}
150+
144151
/**
145152
* Shorthand function to check for the existence of a plugin on a Project.
146153
*/

plugin/android-junit5/src/main/kotlin/de/mannodermaus/gradle/plugins/junit5/tasks/Jacoco.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import de.mannodermaus.gradle.plugins.junit5.providers.mainClassDirectories
1111
import de.mannodermaus.gradle.plugins.junit5.providers.mainSourceDirectories
1212
import org.gradle.api.Project
1313
import org.gradle.api.file.FileCollection
14+
import org.gradle.api.tasks.CacheableTask
1415
import org.gradle.api.tasks.testing.Test
1516
import org.gradle.testing.jacoco.plugins.JacocoTaskExtension
1617
import org.gradle.testing.jacoco.tasks.JacocoReport
@@ -24,16 +25,21 @@ private const val GROUP_REPORTING = "reporting"
2425
* Required to be "open" in order for Groovy's proxy magic to do its thing.
2526
*/
2627
@Suppress("MemberVisibilityCanPrivate")
28+
@CacheableTask
2729
open class AndroidJUnit5JacocoReport : JacocoReport() {
2830

2931
companion object {
3032
fun create(project: Project,
3133
variant: BaseVariant,
3234
testTask: Test,
33-
directoryProviders: Collection<DirectoryProvider>): AndroidJUnit5JacocoReport {
35+
directoryProviders: Collection<DirectoryProvider>): AndroidJUnit5JacocoReport? {
3436
val configAction = ConfigAction(project, variant, testTask, directoryProviders)
35-
return project.tasks.create(configAction.name, configAction.type) {
36-
configAction.execute(it)
37+
return if (project.tasks.findByName(configAction.name) == null) {
38+
project.tasks.create(configAction.name, configAction.type) {
39+
configAction.execute(it)
40+
}
41+
} else {
42+
null
3743
}
3844
}
3945
}

plugin/android-junit5/src/test/kotlin/de/mannodermaus/gradle/plugins/junit5/PluginSpec.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.gradle.api.ProjectConfigurationException
1313
import org.gradle.api.Task
1414
import org.gradle.api.internal.plugins.PluginApplicationException
1515
import org.gradle.api.tasks.testing.Test
16+
import org.gradle.testing.jacoco.tasks.JacocoReport
1617
import org.jetbrains.spek.api.Spek
1718
import org.jetbrains.spek.api.dsl.context
1819
import org.jetbrains.spek.api.dsl.describe
@@ -239,6 +240,18 @@ class PluginSpec : Spek({
239240
}
240241
}
241242

243+
on("having a Jacoco task already") {
244+
val project = testProjectBuilder.build()
245+
project.tasks.create("jacocoTestReportDebug", JacocoReport::class.java)
246+
project.evaluate()
247+
248+
it("doesn't cause a conflict") {
249+
assertThat(project.tasks.findByName("jacocoTestReport")).isNotNull()
250+
assertThat(project.tasks.findByName("jacocoTestReportDebug")).isInstanceOf(JacocoReport::class.java)
251+
assertThat(project.tasks.findByName("jacocoTestReportRelease")).isInstanceOf(AndroidJUnit5JacocoReport::class.java)
252+
}
253+
}
254+
242255
on("using a custom build type") {
243256
val project = testProjectBuilder.build()
244257

0 commit comments

Comments
 (0)