diff options
-rw-r--r-- | test/Makefile | 7 | ||||
-rw-r--r-- | test/parser_test.c | 68 |
2 files changed, 73 insertions, 2 deletions
diff --git a/test/Makefile b/test/Makefile index 51ece02..3845b92 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,8 +14,11 @@ all: munit.o $(TESTS) clean: $(RM) *.o *_test -string_view_test: munit.o string_view_test.o ../build/string_view.o +string_view_test: munit.o ../build/string_view.o string_view_test.o $(CC) $? $(CFLAGS) -o $@ -lexer_test: munit.o lexer_test.o ../build/lexer.o ../build/string_view.o +lexer_test: munit.o ../build/string_view.o ../build/lexer.o lexer_test.o + $(CC) $? $(CFLAGS) -o $@ + +parser_test: munit.o ../build/string_view.o ../build/lexer.o ../build/ast.o ../build/parser.o parser_test.o $(CC) $? $(CFLAGS) -o $@ diff --git a/test/parser_test.c b/test/parser_test.c new file mode 100644 index 0000000..b75f69f --- /dev/null +++ b/test/parser_test.c @@ -0,0 +1,68 @@ +/* +* Copyright (C) 2023 Carlos Maniero +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ +#define MUNIT_ENABLE_ASSERT_ALIASES +#include "munit.h" +#include "lexer.h" +#include "parser.h" +#include "ast.h" + +void +make_lexer_from_static_src(lexer_t *lexer, char *src) +{ + lexer->srclen = 0; + lexer->cur = 0; + lexer->row = 0; + lexer->bol = 0; + lexer->src = src; + lexer->srclen = strlen(src); +} + +static MunitResult +test_parse_function(const MunitParameter params[], + void *user_data_or_fixture) +{ + parser_t parser; + lexer_t lexer; + + make_lexer_from_static_src(&lexer, "main(): i32 { return 42; }"); + parser_init(&parser, &lexer); + ast_function_t ast_function = parser_parse_function(&parser); + + char actual[5]; + + string_view_to_str(&ast_function.name, actual); + assert_string_equal("main", actual); + assert_int(42, ==, ast_function.body.number); + + return MUNIT_OK; +} + +static MunitTest tests[] = { + { "/test_parse_function", test_parse_function, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }, + { NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL } +}; + +static const MunitSuite suite = { + "/lexer_test", tests, NULL, 1, MUNIT_SUITE_OPTION_NONE +}; + +int +main(int argc, char *argv[]) +{ + return munit_suite_main(&suite, NULL, argc, argv); + return EXIT_SUCCESS; +} |