@@ -8,9 +8,10 @@ import org.gradle.kotlin.dsl.*
88
99plugins {
1010 java
11- jacoco apply false
1211}
1312
13+ val projectExtension = extensions.create<TestJvmConstraintsExtension >(TestJvmConstraintsExtension .NAME )
14+
1415val testJvmJavaLauncher = TestJvmJavaLauncher (project)
1516
1617tasks.withType<Test >().configureEach {
@@ -20,34 +21,44 @@ tasks.withType<Test>().configureEach {
2021
2122 inputs.property(" testJvm" , providers.gradleProperty(" testJvm" ))
2223
23- val extension = project.objects.newInstance<TestJvmConstraintsExtension >(name, project.objects, project.providers, project)
24- inputs.property(" ${TestJvmConstraintsExtension .NAME } .allowReflectiveAccessToJdk" , extension.allowReflectiveAccessToJdk)
25- inputs.property(" ${TestJvmConstraintsExtension .NAME } .excludeJdk" , extension.excludeJdk)
26- inputs.property(" ${TestJvmConstraintsExtension .NAME } .forceJdk" , extension.forceJdk)
27- inputs.property(" ${TestJvmConstraintsExtension .NAME } .minJavaVersionForTests" , extension.minJavaVersionForTests)
28- inputs.property(" ${TestJvmConstraintsExtension .NAME } .maxJavaVersionForTests" , extension.maxJavaVersionForTests)
24+ val taskExtension = project.objects.newInstance<TestJvmConstraintsExtension >().also {
25+ configureConventions(it, projectExtension)
26+ }
27+
28+ inputs.property(" ${TestJvmConstraintsExtension .NAME } .allowReflectiveAccessToJdk" , taskExtension.allowReflectiveAccessToJdk).optional(true )
29+ inputs.property(" ${TestJvmConstraintsExtension .NAME } .excludeJdk" , taskExtension.excludeJdk)
30+ inputs.property(" ${TestJvmConstraintsExtension .NAME } .forceJdk" , taskExtension.forceJdk)
31+ inputs.property(" ${TestJvmConstraintsExtension .NAME } .minJavaVersionForTests" , taskExtension.minJavaVersionForTests).optional(true )
32+ inputs.property(" ${TestJvmConstraintsExtension .NAME } .maxJavaVersionForTests" , taskExtension.maxJavaVersionForTests).optional(true )
2933
30- extensions.add(TestJvmConstraintsExtension .NAME , extension )
34+ extensions.add(TestJvmConstraintsExtension .NAME , taskExtension )
3135
32- configureTestJvm(extension )
36+ configureTestJvm(taskExtension )
3337}
3438
3539// TODO make this part of the testJvm test task extension
40+ /* *
41+ * Provide arguments if condition is met.
42+ */
3643fun Test.configureJvmArgs (
3744 applyFromVersion : JavaVersion ,
3845 jvmArgsToApply : List <String >,
39- additionalCondition : Provider <Boolean >? = null
46+ additionalCondition : Provider <Boolean > = project.providers.provider { true }
4047) {
4148 jvmArgumentProviders.add(
4249 ProvideJvmArgsOnJvmLauncherVersion (
4350 this ,
4451 applyFromVersion,
4552 jvmArgsToApply,
46- additionalCondition ? : project.providers.provider { true }
53+ additionalCondition
4754 )
4855 )
4956}
5057
58+ /* *
59+ * Configure the jvm launcher of the test task and ensure the test task
60+ * can be run with the test task launcher.
61+ */
5162fun Test.configureTestJvm (extension : TestJvmConstraintsExtension ) {
5263 if (testJvmJavaLauncher.javaTestLauncher.isPresent) {
5364 javaLauncher = testJvmJavaLauncher.javaTestLauncher
@@ -56,16 +67,6 @@ fun Test.configureTestJvm(extension: TestJvmConstraintsExtension) {
5667 (extension.isJavaLauncherAllowed(testJvmJavaLauncher.javaTestLauncher.get()) ||
5768 extension.isJdkForced(testJvmJavaLauncher.normalizedTestJvm.get()))
5869 }
59-
60- // TODO refactor out ?
61- // Disable jacoco for additional 'testJvm' tests to speed things up a bit
62- extensions.configure<JacocoTaskExtension > {
63- val hasCoverage: Boolean by project.extra
64- // TODO read enabled ?
65- if (hasCoverage) {
66- isEnabled = false
67- }
68- }
6970 } else {
7071 onlyIf(" Is current Daemon JVM allowed" ) {
7172 extension.isJavaVersionAllowed(JavaVersion .current())
@@ -83,3 +84,48 @@ fun Test.configureTestJvm(extension: TestJvmConstraintsExtension) {
8384 )
8485}
8586
87+ // Jacoco plugin is not applied on every project
88+ pluginManager.withPlugin(" org.gradle.jacoco" ) {
89+ tasks.withType<Test >().configureEach {
90+ // Disable jacoco for additional 'testJvm' tests to speed things up a bit
91+ if (testJvmJavaLauncher.javaTestLauncher.isPresent) {
92+ extensions.configure<JacocoTaskExtension > {
93+ isEnabled = false
94+ }
95+ }
96+ }
97+ }
98+
99+ /* *
100+ * Configures the convention, this tells Gradle where to look for values.
101+ *
102+ * Currently, the extension is still configured to look at project's _extra_ properties.
103+ */
104+ private fun Test.configureConventions (
105+ taskExtension : TestJvmConstraintsExtension ,
106+ projectExtension : TestJvmConstraintsExtension
107+ ) {
108+ taskExtension.minJavaVersionForTests.convention(projectExtension.minJavaVersionForTests
109+ .orElse(providers.provider { project.findProperty(" ${name} MinJavaVersionForTests" ) as ? JavaVersion })
110+ .orElse(providers.provider { project.findProperty(" minJavaVersionForTests" ) as ? JavaVersion })
111+ )
112+ taskExtension.maxJavaVersionForTests.convention(projectExtension.maxJavaVersionForTests
113+ .orElse(providers.provider { project.findProperty(" ${name} MaxJavaVersionForTests" ) as ? JavaVersion })
114+ .orElse(providers.provider { project.findProperty(" maxJavaVersionForTests" ) as ? JavaVersion })
115+ )
116+ taskExtension.forceJdk.convention(projectExtension.forceJdk
117+ .orElse(providers.provider {
118+ @Suppress(" UNCHECKED_CAST" )
119+ project.findProperty(" forceJdk" ) as ? List <String > ? : emptyList()
120+ })
121+ )
122+ taskExtension.excludeJdk.convention(projectExtension.excludeJdk
123+ .orElse(providers.provider {
124+ @Suppress(" UNCHECKED_CAST" )
125+ project.findProperty(" excludeJdk" ) as ? List <String > ? : emptyList()
126+ })
127+ )
128+ taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk
129+ .orElse(providers.provider { project.findProperty(" allowReflectiveAccessToJdk" ) as ? Boolean })
130+ )
131+ }
0 commit comments