Step 21: union mismatch bytecode throw
This commit is contained in:
1 parent
b49f291bff
commit
9d508e219f
3 files changed
+24
-14
No files matched your search
@@ -17,6 +17,7 @@
|
||||
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import net.sergeych.lyng.Compiler
|
||||
import net.sergeych.lyng.ExecutionError
|
||||
import net.sergeych.lyng.Script
|
||||
import net.sergeych.lyng.ScriptError
|
||||
import net.sergeych.lyng.Source
|
||||
@@ -24,6 +25,7 @@ import net.sergeych.lyng.eval
|
||||
import net.sergeych.lyng.obj.toInt
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class BytecodeRecentOpsTest {
|
||||
@@ -221,6 +223,21 @@ class BytecodeRecentOpsTest {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun unionMemberDispatchMismatch() = runTest {
|
||||
val err = assertFailsWith<ExecutionError> {
|
||||
eval(
|
||||
"""
|
||||
class A { fun who() = "A" }
|
||||
class B { fun who() = "B" }
|
||||
val x: A | B = 1
|
||||
x.who()
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
assertTrue(err.message?.contains("value is not A | B") == true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun objectReceiverMemberError() = runTest {
|
||||
val failed = try {
|
||||
|
||||
Reference in new issue
Block a user