[java] Upgrade testing dsl for kotest 5.5.1

This commit is contained in:
Andreas Dangel committed 2022-10-21 15:23:15 +02:00
1 parent 0240c51ff0
commit ea3b860d61
3 files changed
+40 -39

No files matched your search

@@ -57,7 +57,7 @@ class ASTCatchStatementTest : ParserTestSpec({
}
child<ASTVariableDeclaratorId> {
it.image shouldBe "e"
it.name shouldBe "e"
}
listOf(ioe, aerr)
@@ -28,7 +28,7 @@ enum class JavaVersion : Comparable<JavaVersion> {
J19, J19__PREVIEW;
/** Name suitable for use with e.g. [JavaParsingHelper.parse] */
val pmdName: String = name.removePrefix("J").replaceFirst("__", "-").replace('_', '.').toLowerCase()
val pmdName: String = name.removePrefix("J").replaceFirst("__", "-").replace('_', '.').lowercase()
val parser: JavaParsingHelper = JavaParsingHelper.WITH_PROCESSING.withDefaultVersion(pmdName)
@@ -4,15 +4,15 @@
package net.sourceforge.pmd.lang.java.ast
import io.kotest.core.config.configuration
import io.kotest.core.names.TestName
import io.kotest.core.source.sourceRef
import io.kotest.core.spec.DslDrivenSpec
import io.kotest.core.spec.style.scopes.Lifecycle
import io.kotest.core.spec.style.scopes.RootScope
import io.kotest.core.spec.style.scopes.RootTestRegistration
import io.kotest.core.test.TestCaseConfig
import io.kotest.core.test.TestContext
import io.kotest.core.spec.style.scopes.addContainer
import io.kotest.core.spec.style.scopes.addTest
import io.kotest.core.test.NestedTest
import io.kotest.core.test.TestScope
import io.kotest.core.test.TestType
import io.kotest.core.test.createTestName
import net.sourceforge.pmd.lang.ast.test.Assertions
import net.sourceforge.pmd.lang.ast.test.IntelliMarker
import io.kotest.matchers.should as kotlintestShould
@@ -31,22 +31,16 @@ abstract class ParserTestSpec(body: ParserTestSpec.() -> Unit) : DslDrivenSpec()
body()
}
override fun lifecycle(): Lifecycle = Lifecycle.from(this)
override fun defaultConfig(): TestCaseConfig = actualDefaultConfig()
override fun defaultTestCaseConfig(): TestCaseConfig? = defaultTestConfig
override fun registration(): RootTestRegistration = RootTestRegistration.from(this)
private fun actualDefaultConfig() =
defaultTestConfig ?: defaultTestCaseConfig() ?: configuration.defaultTestConfig
fun test(name: String, disabled: Boolean = false, test: suspend TestContext.() -> Unit) =
registration().addTest(
name = createTestName(name),
xdisabled = disabled,
test = test,
config = actualDefaultConfig()
fun test(name: String, disabled: Boolean = false, test: suspend TestScope.() -> Unit) =
addTest(
testName = TestName(name),
disabled = disabled,
config = null,
type = TestType.Test,
test = test
)
/**
* Defines a group of tests that should be named similarly,
* with separate tests for separate versions.
@@ -66,10 +60,11 @@ abstract class ParserTestSpec(body: ParserTestSpec.() -> Unit) : DslDrivenSpec()
fun parserTestGroup(name: String,
disabled: Boolean = false,
spec: suspend GroupTestCtx.() -> Unit) =
registration().addContainerTest(
name = createTestName(name),
addContainer(
testName = TestName(name),
test = { GroupTestCtx(this).spec() },
xdisabled = disabled
disabled = disabled,
config = null
)
/**
@@ -117,37 +112,43 @@ abstract class ParserTestSpec(body: ParserTestSpec.() -> Unit) : DslDrivenSpec()
}
private suspend fun containedParserTestImpl(
context: TestContext,
scope: TestScope,
name: String,
javaVersion: JavaVersion,
assertions: ParserTestCtx.() -> Unit) {
context.registerTestCase(
name = createTestName(name),
test = { ParserTestCtx(javaVersion).assertions() },
config = actualDefaultConfig(),
type = TestType.Test
val nested = NestedTest(
name = TestName(name),
test = { ParserTestCtx(javaVersion).assertions() },
config = null,
type = TestType.Test,
disabled = false,
source = sourceRef()
)
scope.registerTestCase(nested)
}
inner class GroupTestCtx(private val context: TestContext) {
inner class GroupTestCtx(private val scope: TestScope) {
suspend fun onVersions(javaVersions: List<JavaVersion>, spec: suspend VersionedTestCtx.() -> Unit) {
javaVersions.forEach { javaVersion ->
context.registerTestCase(
name = createTestName("Java ${javaVersion.pmdName}"),
test = { VersionedTestCtx(this, javaVersion).spec() },
config = actualDefaultConfig(),
type = TestType.Container
val nested = NestedTest(
name = TestName("Java ${javaVersion.pmdName}"),
test = { VersionedTestCtx(this, javaVersion).spec() },
config = null,
type = TestType.Container,
disabled = false,
source = sourceRef()
)
scope.registerTestCase(nested)
}
}
inner class VersionedTestCtx(private val context: TestContext, javaVersion: JavaVersion) : ParserTestCtx(javaVersion) {
inner class VersionedTestCtx(private val scope: TestScope, javaVersion: JavaVersion) : ParserTestCtx(javaVersion) {
suspend infix fun String.should(matcher: Assertions<String>) {
containedParserTestImpl(context, "'$this'", javaVersion = javaVersion) {
containedParserTestImpl(scope, "'$this'", javaVersion = javaVersion) {
this@should kotlintestShould matcher
}
}