diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index e6465064015..02d1c0d0a9a 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -45,12 +45,10 @@ class TestJvmConstraintsPlugin : Plugin { // Jacoco plugin is not applied on every project project.pluginManager.withPlugin("org.gradle.jacoco") { project.tasks.withType().configureEach { - // Disable jacoco for additional 'testJvm' tests to speed things up a bit - if (testJvmSpec.javaTestLauncher.isPresent) { - extensions.configure { - isEnabled = false - } - } + configureJacocoForAdditionalTestJvm( + testJvmSpec.javaTestLauncher.isPresent, + project.rootProject.providers.gradleProperty("checkCoverage").isPresent + ) } } } @@ -153,3 +151,15 @@ class TestJvmConstraintsPlugin : Plugin { taskExtension.nativeImageCapable.convention(projectExtension.nativeImageCapable) } } + +internal fun Test.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher: Boolean, + checkCoverage: Boolean +) { + // Disable jacoco for additional 'testJvm' tests unless coverage was explicitly requested. + if (hasAdditionalTestJvmLauncher && !checkCoverage) { + extensions.configure { + isEnabled = false + } + } +} diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt index aa05e0ef01d..438da18f92b 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt @@ -4,6 +4,7 @@ import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension.Comp import org.assertj.core.api.Assertions.assertThat import org.gradle.api.tasks.testing.Test as GradleTest import org.gradle.testfixtures.ProjectBuilder +import org.gradle.testing.jacoco.plugins.JacocoTaskExtension import org.junit.jupiter.api.Test class TestJvmConstraintsPluginTest { @@ -19,4 +20,52 @@ class TestJvmConstraintsPluginTest { assertThat(project.extensions.findByName(TEST_JVM_CONSTRAINTS)).isInstanceOf(TestJvmConstraintsExtension::class.java) assertThat(testTask.extensions.findByName(TEST_JVM_CONSTRAINTS)).isInstanceOf(TestJvmConstraintsExtension::class.java) } + + @Test + fun `jacoco is disabled for additional test jvm when coverage is not checked`() { + val testTask = testTaskWithJacoco() + + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = true, + checkCoverage = false + ) + + assertThat(jacocoExtension(testTask).isEnabled).isFalse() + } + + @Test + fun `jacoco remains enabled for additional test jvm when coverage is checked`() { + val testTask = testTaskWithJacoco() + + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = true, + checkCoverage = true + ) + + assertThat(jacocoExtension(testTask).isEnabled).isTrue() + } + + @Test + fun `jacoco remains enabled when using the daemon jvm`() { + val testTask = testTaskWithJacoco() + + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = false, + checkCoverage = false + ) + + assertThat(jacocoExtension(testTask).isEnabled).isTrue() + } + + private fun testTaskWithJacoco(): GradleTest { + val project = ProjectBuilder.builder().build() + + project.pluginManager.apply("java") + project.pluginManager.apply("jacoco") + + return project.tasks.named("test", GradleTest::class.java).get() + } + + private fun jacocoExtension(testTask: GradleTest): JacocoTaskExtension = + testTask.extensions.getByType(JacocoTaskExtension::class.java) }