36 lines
1.1 KiB
Plaintext
36 lines
1.1 KiB
Plaintext
import "@std/mem"
|
|
import "@std/testing"
|
|
|
|
import "@source/strpool"
|
|
import "@source/lexer"
|
|
|
|
ast_renderer :: import "@source/ast/renderer"
|
|
|
|
handles_statement_declaration test {
|
|
strpool.strings = strpool.init(mem.c_allocator)
|
|
defer strpool.deinit(&strpool.strings)
|
|
|
|
source ::
|
|
`value int :: 42
|
|
|
|
scan_state := lexer.init(mem.c_allocator)
|
|
defer lexer.deinit(&scan_state)
|
|
try lexer.scan(&scan_state, source)
|
|
|
|
parse_state := init(mem.c_allocator)
|
|
defer deinit(&parse_state)
|
|
root :: try parse(&parse_state, scan_state.tokens.items)
|
|
|
|
renderer := ast_renderer.init(mem.c_allocator)
|
|
defer ast_renderer.deinit(&renderer)
|
|
try ast_renderer.render(&renderer, root, &parse_state, scan_state.tokens.items)
|
|
|
|
try testing.expect_equal(scan_state.tokens.items.len, renderer.tokens.items.len)
|
|
for scan_state.tokens.items |expected, i| {
|
|
actual :: renderer.tokens.items[i]
|
|
try testing.expect_equal(expected.kind, actual.kind)
|
|
try testing.expect_equal(expected.start, actual.start)
|
|
try testing.expect_equal(expected.str_id, actual.str_id)
|
|
}
|
|
}
|