summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Maniero <carlosmaniero@gmail.com>2023-04-18 09:41:29 -0300
committerJohnny Richard <johnny@johnnyrichard.com>2023-04-18 17:20:26 +0200
commit3433ac8bd34f302cec30f7d2faeb00a9c77e5ef8 (patch)
treeaa67fa84b578b72ea6b08eed7615089029fbc20e
parent841bc101123be63f0fc9810e7cca7127da7d3e3a (diff)
tests: Include lexer's number tokenizer tests
Signed-off-by: Carlos Maniero <carlosmaniero@gmail.com> Reviewed-by: Johnny Richard <johnny@johnnyrichard.com>
-rw-r--r--test/Makefile7
-rw-r--r--test/lexer_test.c76
2 files changed, 82 insertions, 1 deletions
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 <https://www.gnu.org/licenses/>.
+*/
+#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;
+}