Skip to content

Commit 38a5601

Browse files
Merge pull request #932 from gradle/tylerbertrand/add-kotest-to-pts-compatibility-scripts
Add kotest to supported engines in gradle-test-pts-support scripts
2 parents 5e3dbdd + 39cc16c commit 38a5601

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

build-data-capturing-gradle-samples/capture-test-pts-support/gradle-test-pts-support.gradle

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import com.gradle.scan.plugin.BuildScanExtension
2+
import org.gradle.util.internal.VersionNumber
23
import java.nio.charset.StandardCharsets
34
import java.util.Collections
45
import java.util.Optional
@@ -15,11 +16,11 @@ def buildScanApi = project.extensions.findByName('buildScan')
1516
if (!buildScanApi) {
1617
return
1718
}
18-
def capture = new Capture(gradle.rootProject.logger)
19+
def capture = new Capture(buildScanApi, gradle.rootProject.logger)
1920
allprojects {
2021
tasks.withType(Test).configureEach { t ->
2122
doFirst {
22-
capture.capturePts(t, buildScanApi)
23+
capture.capturePts(t)
2324
}
2425
}
2526
}
@@ -32,15 +33,18 @@ class Capture {
3233
'org.spockframework.runtime.SpockEngine' : 'spock',
3334
'net.jqwik.engine.JqwikTestEngine' : 'jqwik',
3435
'com.tngtech.archunit.junit.ArchUnitTestEngine' : 'archunit',
35-
'co.helmethair.scalatest.ScalatestEngine' : 'scalatest'
36+
'co.helmethair.scalatest.ScalatestEngine' : 'scalatest',
37+
'io.kotest.runner.junit.platform.KotestJunitPlatformTestEngine' : 'kotest-runner'
3638
]
3739
private Logger logger
40+
private BuildScanExtension buildScanApi
3841

39-
Capture(Logger logger) {
42+
Capture(BuildScanExtension buildScanApi, Logger logger) {
43+
this.buildScanApi = buildScanApi
4044
this.logger = logger
4145
}
4246

43-
void capturePts(Test t, BuildScanExtension buildScanApi) {
47+
void capturePts(Test t) {
4448
if (t.getTestFramework().getClass().getName() == 'org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestFramework') {
4549
def engines = testEngines(t)
4650
buildScanApi.value("${t.identityPath}#engines", "${engines}")
@@ -59,6 +63,7 @@ class Capture {
5963
Stream<String> engines = t.classpath.files.stream()
6064
.filter { f -> f.name.endsWith('.jar') }
6165
.filter { f -> supportedEngines.values().stream().anyMatch { e -> f.name.contains(e) } }
66+
.filter { f -> isCompatibleVersion(f, t) }
6267
.map { f -> findTestEngine(f) }
6368
.flatMap { o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty() }
6469

@@ -84,4 +89,19 @@ class Capture {
8489
.map { e -> jarFile.getInputStream(e).withCloseable { it.getText(StandardCharsets.UTF_8.name()).trim() } }
8590
}
8691
}
92+
93+
boolean isCompatibleVersion(File f, Test t) {
94+
if (f.name.contains("kotest-runner")) {
95+
def kotestVersionString = f.name.split("-")[f.name.split("-").length - 1].replace(".jar", "")
96+
def kotestVersion = VersionNumber.parse(kotestVersionString)
97+
if (VersionNumber.UNKNOWN == kotestVersion) {
98+
logger.error("Unable to parse kotest version from file name ${f.name}")
99+
buildScanApi.value("${t.identityPath}#unknownKotestVersion", "${f.name}")
100+
return false
101+
}
102+
return VersionNumber.parse("5.6.0") <= kotestVersion
103+
} else {
104+
return true
105+
}
106+
}
87107
}

build-data-capturing-gradle-samples/capture-test-pts-support/gradle-test-pts-support.gradle.kts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import com.gradle.enterprise.gradleplugin.GradleEnterpriseExtension
22
import com.gradle.scan.plugin.BuildScanExtension
3+
import org.gradle.util.internal.VersionNumber
34
import java.nio.charset.StandardCharsets
45
import java.util.Collections
56
import java.util.Optional
@@ -16,29 +17,30 @@ import groovy.transform.Field
1617
project.extensions.configure<GradleEnterpriseExtension>() {
1718
buildScan {
1819
val api = buildScan
19-
val capture = Capture(gradle.rootProject.logger)
20+
val capture = Capture(api, gradle.rootProject.logger)
2021
allprojects {
2122
tasks.withType<Test>().configureEach {
2223
doFirst {
23-
capture.capturePts(this as Test, api)
24+
capture.capturePts(this as Test)
2425
}
2526
}
2627
}
2728
}
2829
}
2930

30-
class Capture(val logger: Logger) {
31+
class Capture(val api: BuildScanExtension, val logger: Logger) {
3132
val supportedEngines: Map<String, String> = mapOf(
3233
"org.junit.support.testng.engine.TestNGTestEngine" to "testng",
3334
"org.junit.jupiter.engine.JupiterTestEngine" to "junit-jupiter",
3435
"org.junit.vintage.engine.VintageTestEngine" to "junit-vintage",
3536
"org.spockframework.runtime.SpockEngine" to "spock",
3637
"net.jqwik.engine.JqwikTestEngine" to "jqwik",
3738
"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"
3941
)
4042

41-
fun capturePts(t: Test, api: BuildScanExtension) {
43+
fun capturePts(t: Test) {
4244
if (t.getTestFramework()::class.java.name == "org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestFramework") {
4345
val engines = testEngines(t)
4446
api.value("${t.identityPath}#engines", "${engines}")
@@ -56,6 +58,7 @@ class Capture(val logger: Logger) {
5658
try {
5759
var engines = t.classpath.files.stream().filter { f -> f.name.endsWith(".jar") }
5860
.filter { f -> supportedEngines.values.stream().anyMatch { e -> f.name.contains(e) } }
61+
.filter { f -> isCompatibleVersion(f, t) }
5962
.map { f -> findTestEngine(f) }
6063
.flatMap { o -> if (o.isPresent()) Stream.of(o.get()) else Stream.empty() }
6164

@@ -85,4 +88,19 @@ class Capture(val logger: Logger) {
8588
}
8689
}
8790
}
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+
}
88106
}

0 commit comments

Comments
 (0)