1
1
import com.gradle.enterprise.gradleplugin.GradleEnterpriseExtension
2
2
import com.gradle.scan.plugin.BuildScanExtension
3
+ import org.gradle.util.internal.VersionNumber
3
4
import java.nio.charset.StandardCharsets
4
5
import java.util.Collections
5
6
import java.util.Optional
@@ -16,29 +17,30 @@ import groovy.transform.Field
16
17
project.extensions.configure<GradleEnterpriseExtension >() {
17
18
buildScan {
18
19
val api = buildScan
19
- val capture = Capture (gradle.rootProject.logger)
20
+ val capture = Capture (api, gradle.rootProject.logger)
20
21
allprojects {
21
22
tasks.withType<Test >().configureEach {
22
23
doFirst {
23
- capture.capturePts(this as Test , api )
24
+ capture.capturePts(this as Test )
24
25
}
25
26
}
26
27
}
27
28
}
28
29
}
29
30
30
- class Capture (val logger : Logger ) {
31
+ class Capture (val api : BuildScanExtension , val logger : Logger ) {
31
32
val supportedEngines: Map <String , String > = mapOf (
32
33
" org.junit.support.testng.engine.TestNGTestEngine" to " testng" ,
33
34
" org.junit.jupiter.engine.JupiterTestEngine" to " junit-jupiter" ,
34
35
" org.junit.vintage.engine.VintageTestEngine" to " junit-vintage" ,
35
36
" org.spockframework.runtime.SpockEngine" to " spock" ,
36
37
" net.jqwik.engine.JqwikTestEngine" to " jqwik" ,
37
38
" com.tngtech.archunit.junit.ArchUnitTestEngine" to " archunit" ,
38
- " co.helmethair.scalatest.ScalatestEngine" to " scalatest"
39
+ " co.helmethair.scalatest.ScalatestEngine" to " scalatest" ,
40
+ " io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine" to " kotest-runner"
39
41
)
40
42
41
- fun capturePts (t : Test , api : BuildScanExtension ) {
43
+ fun capturePts (t : Test ) {
42
44
if (t.getTestFramework()::class .java.name == " org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestFramework" ) {
43
45
val engines = testEngines(t)
44
46
api.value(" ${t.identityPath} #engines" , " ${engines} " )
@@ -56,6 +58,7 @@ class Capture(val logger: Logger) {
56
58
try {
57
59
var engines = t.classpath.files.stream().filter { f -> f.name.endsWith(" .jar" ) }
58
60
.filter { f -> supportedEngines.values.stream().anyMatch { e -> f.name.contains(e) } }
61
+ .filter { f -> isCompatibleVersion(f, t) }
59
62
.map { f -> findTestEngine(f) }
60
63
.flatMap { o -> if (o.isPresent()) Stream .of(o.get()) else Stream .empty() }
61
64
@@ -85,4 +88,19 @@ class Capture(val logger: Logger) {
85
88
}
86
89
}
87
90
}
91
+
92
+ private fun isCompatibleVersion (f : File , t : Test ): Boolean {
93
+ if (f.name.contains(" kotest-runner" )) {
94
+ val kotestVersionString = f.name.split(" -" )[f.name.split(" -" ).lastIndex].replace(" .jar" , " " )
95
+ val kotestVersion = VersionNumber .parse(kotestVersionString)
96
+ if (VersionNumber .UNKNOWN == kotestVersion) {
97
+ logger.error(" Unable to parse kotest version from file name ${f.name} " )
98
+ api.value(" ${t.identityPath} #unknownKotestVersion" , " ${f.name} " )
99
+ return false
100
+ }
101
+ return VersionNumber .parse(" 5.6.0" ) <= kotestVersion
102
+ } else {
103
+ return true
104
+ }
105
+ }
88
106
}
0 commit comments