Add assert-related testing functions, findFirst/findFirstOrNull methods, and expand documentation.

This commit is contained in:
sergeych committed 2025-12-21 19:11:37 +01:00
1 parent 99f883cfc7
commit 3ac7fd7ceb
8 files changed
+193 -16

No files matched your search

@@ -204,7 +204,19 @@ class Script(
)
}
addFn("assertThrows") {
val code = requireOnlyArg<Statement>()
val code: Statement
val expectedClass: ObjClass?
when(args.size) {
1 -> {
code = requiredArg<Statement>(0)
expectedClass = null
}
2 -> {
code = requiredArg<Statement>(1)
expectedClass = requiredArg<ObjClass>(0)
}
else -> raiseIllegalArgument("Expected 1 or 2 arguments, got ${args.size}")
}
val result = try {
code.execute(this)
null
@@ -213,7 +225,15 @@ class Script(
} catch (_: ScriptError) {
ObjNull
}
result ?: raiseError(ObjAssertionFailedException(this, "Expected exception but nothing was thrown"))
if( result == null ) raiseError(ObjAssertionFailedException(this, "Expected exception but nothing was thrown"))
expectedClass?.let {
if( result !is ObjException)
raiseError("Expected $expectedClass, got $result")
if (result.exceptionClass != expectedClass) {
raiseError("Expected $expectedClass, got ${result.exceptionClass}")
}
}
result
}
addFn("dynamic") {
@@ -4270,4 +4270,18 @@ class ScriptTest {
assertEquals(51, r.toInt())
}
@Test
fun testFirstInEnum() = runTest {
eval("""
enum E {
one, two, three
}
println(E.entries)
assertEquals( E.two, E.entries.findFirst {
println(it.name)
it.name in ["aaa", "two"]
} )
""".trimIndent())
}
}