test(core): add error reporting tests

This commit is contained in:
dualfroz committed 2026-08-28 09:00:00 +02:00
1 parent de6ee84b47
commit de2cffb264
1 file changed
+48
+48
View File
@@ -0,0 +1,48 @@
package lumen
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertTrue
class ErrorReportTest {
@Test
fun lexErrorCarriesLineAndColumn() {
val error = assertFailsWith<LexError> { Lumen.tokenize("let x = @") }
assertEquals(1, error.line)
assertEquals(9, error.column)
}
@Test
fun parseErrorCarriesLineAndColumn() {
val error = assertFailsWith<ParseError> { Lumen.parse("println(1 +)") }
assertEquals(1, error.line)
assertEquals(12, error.column)
}
@Test
fun runtimeErrorCarriesLineAndColumn() {
val error = assertFailsWith<RuntimeError> {
Lumen.run("let xs = [1]\nprintln(xs[5])", StringBuilder())
}
assertEquals(2, error.line)
assertTrue(error.column > 0, "runtime error should report a column")
}
@Test
fun errorOnSecondLineReportsSecondLine() {
val error = assertFailsWith<LexError> { Lumen.tokenize("let x = 1\nlet y = @") }
assertEquals(2, error.line)
assertEquals(9, error.column)
}
@Test
fun formatErrorRendersSourceFragmentWithCaret() {
val source = "let x = 1\nlet y = @"
val error = assertFailsWith<LexError> { Lumen.tokenize(source) }
val report = formatError(source, error)
assertTrue(report.contains("line 2, column 9"), "report should name the position")
assertTrue(report.contains("let y = @"), "report should quote the offending source line")
assertTrue(report.contains("^"), "report should point at the column with a caret")
}
}