Files
c2/v0/test_parser.c
T
2026-04-29 11:24:42 +02:00

96 lines
3.0 KiB
C

#include "test.h"
#include "parser.h"
#include <string.h>
#include <stdlib.h>
static void test_parser_module_name(void) {
TokenStream* ts = tokenstream_open("test.c", "module my_module;");
Module* m = parser_parse(ts);
assert_not_null(m, "expected module to be parsed");
assert_str("my_module", m->name, "expected name 'my_module'");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_bad_module_name(void) {
TokenStream* ts = tokenstream_get_test();
Module* m = parser_parse(ts);
assert_log_file("expected error to be logged for bad module name");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_missing_semicolon_module(void) {
TokenStream* ts = tokenstream_get_test();
Module* m = parser_parse(ts);
assert_log_file("expected error for missing semicolon");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_missing_semicolon_import(void) {
TokenStream* ts = tokenstream_get_test();
Module* m = parser_parse(ts);
assert_log_file("expected error for missing semicolon");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_bad_import_name(void) {
TokenStream* ts = tokenstream_get_test();
Module* m = parser_parse(ts);
assert_log_file("expected error for bad import name");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_imports(void) {
TokenStream* ts = tokenstream_open("test.c", "module my_module; import other_module;");
Module* m = parser_parse(ts);
assert_not_null(m, "expected module to be parsed");
assert_str("my_module", m->name, "expected name 'my_module'");
assert_not_null(m->imports, "expected imports to be parsed");
assert_int(1, (int)m->import_count, "expected one import");
assert_str("other_module", m->imports[0].module_name, "expected import name 'other_module'");
assert_false(m->imports[0].is_public, "expected import to not be public");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_public_imports(void) {
TokenStream* ts = tokenstream_open("test.c", "module my_module; import public other_module;");
Module* m = parser_parse(ts);
assert_not_null(m, "expected module to be parsed");
assert_str("my_module", m->name, "expected name 'my_module'");
assert_not_null(m->imports, "expected imports to be parsed");
assert_int(1, (int)m->import_count, "expected one import");
assert_str("other_module", m->imports[0].module_name, "expected import name 'other_module'");
assert_true(m->imports[0].is_public, "expected import to be public");
parser_free(m);
tokenstream_close(ts);
}
static void test_parser_alias_simple(void) {
Module* m = test_get_ast();
assert_int(1, (int)m->alias_count, "expected correct number of aliases");
AliasDeclaration alias = m->aliases[0];
assert_str("myalias", alias.name, "expected correct alias name");
assert_int(TYPE_EXPRESSION_BUILTIN, alias.value.tag, "expected correct alias tag");
assert_int(32, alias.value.builtin.bitSize, "expected bitSize 32");
assert_true(alias.value.builtin.isSigned, "expected signed");
}