From 3433ac8bd34f302cec30f7d2faeb00a9c77e5ef8 Mon Sep 17 00:00:00 2001 From: Carlos Maniero Date: Tue, 18 Apr 2023 09:41:29 -0300 Subject: tests: Include lexer's number tokenizer tests Signed-off-by: Carlos Maniero Reviewed-by: Johnny Richard --- test/Makefile | 7 ++++- test/lexer_test.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 test/lexer_test.c diff --git a/test/Makefile b/test/Makefile index 7a37dfe..51ece02 100644 --- a/test/Makefile +++ b/test/Makefile @@ -6,7 +6,9 @@ EXEC_TESTS := $(patsubst %_test, ./%_test, $(TESTS)) .PHONY: all all: munit.o $(TESTS) - $(EXEC_TESTS) + @for file in $(EXEC_TESTS); do \ + ./"$$file"; \ + done .PHONY: clean clean: @@ -14,3 +16,6 @@ clean: string_view_test: munit.o string_view_test.o ../build/string_view.o $(CC) $? $(CFLAGS) -o $@ + +lexer_test: munit.o lexer_test.o ../build/lexer.o ../build/string_view.o + $(CC) $? $(CFLAGS) -o $@ diff --git a/test/lexer_test.c b/test/lexer_test.c new file mode 100644 index 0000000..1fc93cc --- /dev/null +++ b/test/lexer_test.c @@ -0,0 +1,76 @@ +/* +* 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 . +*/ +#define MUNIT_ENABLE_ASSERT_ALIASES +#include "munit.h" +#include "lexer.h" + +void +make_lexer_from_static_src(lexer_t *lexer, char *src, int srclen) +{ + lexer->srclen = 0; + lexer->cur = 0; + lexer->row = 0; + lexer->bol = 0; + lexer->src = src; + lexer->srclen = srclen; +} + +void +assert_tokenize_number(char *str, char *expected) +{ + lexer_t lexer; + token_t token; + + make_lexer_from_static_src(&lexer, str, strlen(str)); + lexer_next_token(&lexer, &token); + + char actual[token.value.size + 1]; + string_view_to_str(&token.value, actual); + + assert_string_equal("TOKEN_NUMBER", token_kind_to_str(token.kind)); + assert_string_equal(expected, actual); +} + +static MunitResult +test_tokenize_number(const MunitParameter params[], + void *user_data_or_fixture) +{ + lexer_t lexer; + token_t token; + + assert_tokenize_number("1", "1"); + assert_tokenize_number(" 13 ", "13"); + assert_tokenize_number(" \n 13 ", "13"); + + return MUNIT_OK; +} + +static MunitTest tests[] = { + { "/test_tokenize_digit", test_tokenize_number, 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; +} -- cgit v1.2.3