@@ -21,12 +21,19 @@ import de.mannodermaus.gradle.plugins.junit5.safeProperty
2121import de.mannodermaus.gradle.plugins.junit5.selectors
2222import de.mannodermaus.gradle.plugins.junit5.tags
2323import de.mannodermaus.gradle.plugins.junit5.variantData
24+ import org.gradle.api.DefaultTask
2425import org.gradle.api.Project
26+ import org.gradle.api.Task
2527import org.gradle.api.file.FileCollection
28+ import org.gradle.api.internal.file.IdentityFileResolver
2629import org.gradle.api.plugins.JavaBasePlugin
2730import org.gradle.api.tasks.InputFiles
2831import org.gradle.api.tasks.JavaExec
2932import org.gradle.api.tasks.Optional
33+ import org.gradle.process.JavaForkOptions
34+ import org.gradle.process.ProcessForkOptions
35+ import org.gradle.process.internal.DefaultJavaForkOptions
36+ import org.gradle.process.internal.DefaultProcessForkOptions
3037import org.junit.platform.console.ConsoleLauncher
3138import java.io.File
3239
@@ -98,8 +105,8 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
98105 // instrumented by Clover in JUnit's build will be shadowed by JARs pulled in
99106 // via the junitPlatform configuration... leading to zero code coverage for
100107 // the respective modules.
101- val defaultTestTask = getDefaultUnitTestTask ()
102- val taskClasspath = defaultTestTask .classpath +
108+ val defaultJUnit4Task = getDefaultJUnit4Task ()
109+ val taskClasspath = defaultJUnit4Task .classpath +
103110 project.configurations.getByName(" junitPlatform" )
104111
105112 // Aggregate test root directories from the given providers
@@ -115,9 +122,9 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
115122 // Apply other arguments and properties from the default test task, unless disabled
116123 // (these are most likely provided by the AGP's testOptions closure)
117124 if (junit5.unitTests.applyDefaultTestOptions) {
118- task.jvmArgs(defaultTestTask .jvmArgs)
119- task.systemProperties(defaultTestTask .systemProperties)
120- task.environment(defaultTestTask .environment)
125+ task.jvmArgs(defaultJUnit4Task .jvmArgs)
126+ task.systemProperties(defaultJUnit4Task .systemProperties)
127+ task.environment(defaultJUnit4Task .environment)
121128 }
122129
123130 // Build the task arguments
@@ -126,7 +133,7 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
126133 project.logger.junit5Info(" JVM Arguments: ${task.jvmArgs.joinToString()} " )
127134
128135 // Hook into the main JUnit 5 task
129- val defaultJUnit5Task = project.tasks.maybeCreate( TASK_NAME_DEFAULT )
136+ val defaultJUnit5Task = getDefaultJUnit5Task( )
130137 defaultJUnit5Task.dependsOn(task)
131138
132139 // Apply additional user configuration
@@ -135,6 +142,20 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
135142
136143 /* Private */
137144
145+ private fun getDefaultJUnit4Task (): AndroidUnitTest {
146+ val name = scope.getTaskName(VariantType .UNIT_TEST .prefix, VariantType .UNIT_TEST .suffix)
147+ return project.tasks.getByName(name) as AndroidUnitTest
148+ }
149+
150+ private fun getDefaultJUnit5Task (): Task {
151+ var defaultTask = project.tasks.findByName(TASK_NAME_DEFAULT )
152+ if (defaultTask == null ) {
153+ defaultTask = project.tasks.create(TASK_NAME_DEFAULT , JUnit5UnitTestRunAll ::class .java)
154+ project.junit5.unitTests.applyConfiguration(defaultTask)
155+ }
156+ return defaultTask!!
157+ }
158+
138159 private fun configureTaskInputs (
139160 task : AndroidJUnit5UnitTest ,
140161 junit5 : AndroidJUnitPlatformExtension ) {
@@ -165,7 +186,7 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
165186 task : AndroidJUnit5UnitTest ,
166187 junit5 : AndroidJUnitPlatformExtension ) {
167188 // Connect to the default unit test task
168- val variantUnitTestTask = this .getDefaultUnitTestTask ()
189+ val variantUnitTestTask = this .getDefaultJUnit4Task ()
169190 try {
170191 // Android Gradle Plugin 3.x provides additional input parameters
171192 task.resCollection = variantUnitTestTask.resCollection
@@ -185,11 +206,6 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
185206 mainTestTask.dependsOn(task)
186207 }
187208
188- private fun getDefaultUnitTestTask (): AndroidUnitTest {
189- val name = scope.getTaskName(VariantType .UNIT_TEST .prefix, VariantType .UNIT_TEST .suffix)
190- return project.tasks.getByName(name) as AndroidUnitTest
191- }
192-
193209 private fun configureTaskOutputs (
194210 task : AndroidJUnit5UnitTest ,
195211 junit5 : AndroidJUnitPlatformExtension ): File {
@@ -254,3 +270,116 @@ open class AndroidJUnit5UnitTest : JavaExec(), JUnit5UnitTest {
254270 }
255271 }
256272}
273+
274+ /* *
275+ * Facade for the main JUnit 5 Unit Test task.
276+ * Allows the default task to also be configured by unitTests.all.
277+ */
278+ open class JUnit5UnitTestRunAll : DefaultTask (), JUnit5UnitTest {
279+
280+ private val emptyJavaForkOptions = DefaultJavaForkOptions (IdentityFileResolver ())
281+ private val emptyProcessForkOptions = DefaultProcessForkOptions (IdentityFileResolver ())
282+ private val emptyFileCollection = project.files()
283+
284+ override fun setSystemProperties (p0 : MutableMap <String , * >? ) {
285+ }
286+
287+ override fun getExecutable () = " "
288+
289+ override fun setDefaultCharacterEncoding (p0 : String? ) {
290+ }
291+
292+ override fun jvmArgs (p0 : MutableIterable <* >? ) = emptyJavaForkOptions
293+
294+ override fun jvmArgs (vararg p0 : Any? ) = emptyJavaForkOptions
295+
296+ override fun environment (p0 : MutableMap <String , * >? ) = emptyProcessForkOptions
297+
298+ override fun environment (p0 : String? , p1 : Any? ) = emptyProcessForkOptions
299+
300+ override fun setMinHeapSize (p0 : String? ) {
301+ }
302+
303+ override fun systemProperties (p0 : MutableMap <String , * >? ) = emptyJavaForkOptions
304+
305+ override fun setExecutable (p0 : String? ) {
306+ }
307+
308+ override fun setExecutable (p0 : Any? ) {
309+ }
310+
311+ override fun executable (p0 : Any? ) = emptyProcessForkOptions
312+
313+ override fun setJvmArgs (p0 : MutableList <String >? ) {
314+ }
315+
316+ override fun setJvmArgs (p0 : MutableIterable <* >? ) {
317+ }
318+
319+ override fun setAllJvmArgs (p0 : MutableList <String >? ) {
320+ }
321+
322+ override fun setAllJvmArgs (p0 : MutableIterable <* >? ) {
323+ }
324+
325+ override fun setDebug (p0 : Boolean ) {
326+ }
327+
328+ override fun getWorkingDir () = project.file(" " )
329+
330+ override fun setBootstrapClasspath (p0 : FileCollection ? ) {
331+ }
332+
333+ override fun getDefaultCharacterEncoding () = " "
334+
335+ override fun setMaxHeapSize (p0 : String? ) {
336+ }
337+
338+ override fun systemProperty (p0 : String? , p1 : Any? ) = emptyJavaForkOptions
339+
340+ override fun getBootstrapClasspath () = emptyFileCollection
341+
342+ override fun workingDir (p0 : Any? ) = emptyProcessForkOptions
343+
344+ override fun setWorkingDir (p0 : File ? ) {
345+ }
346+
347+ override fun setWorkingDir (p0 : Any? ) {
348+ }
349+
350+ override fun setEnvironment (p0 : MutableMap <String , * >? ) {
351+ }
352+
353+ override fun getEnableAssertions () = false
354+
355+ override fun setEnableAssertions (p0 : Boolean ) {
356+ }
357+
358+ override fun getMaxHeapSize () = " "
359+
360+ override fun copyTo (p0 : JavaForkOptions ? ) = emptyJavaForkOptions
361+
362+ override fun copyTo (p0 : ProcessForkOptions ? ) = emptyProcessForkOptions
363+
364+ override fun getJvmArgs (): MutableList <String > {
365+ return mutableListOf ()
366+ }
367+
368+ override fun getSystemProperties (): MutableMap <String , Any > {
369+ return mutableMapOf ()
370+ }
371+
372+ override fun getMinHeapSize () = " "
373+
374+ override fun getEnvironment (): MutableMap <String , Any > {
375+ return mutableMapOf ()
376+ }
377+
378+ override fun getAllJvmArgs (): MutableList <String > {
379+ return mutableListOf ()
380+ }
381+
382+ override fun getDebug () = false
383+
384+ override fun bootstrapClasspath (vararg p0 : Any? ) = emptyJavaForkOptions
385+ }
0 commit comments