From d3f95217176019fe210e931fe96e9dbbd98661b6 Mon Sep 17 00:00:00 2001 From: Carlos Maniero Date: Tue, 18 Apr 2023 14:01:36 -0300 Subject: lexer: Include a test function assert_token_at With this function now it is possible to assert a token given an index. Signed-off-by: Carlos Maniero Reviewed-by: Johnny Richard Link: https://lists.sr.ht/~johnnyrichard/pipalang-devel/%3C20230418170136.3949-1-carlosmaniero%40gmail.com%3E --- test/lexer_test.c | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) (limited to 'test/lexer_test.c') diff --git a/test/lexer_test.c b/test/lexer_test.c index 4a31bbf..ae713b3 100644 --- a/test/lexer_test.c +++ b/test/lexer_test.c @@ -30,41 +30,51 @@ make_lexer_from_static_src(lexer_t *lexer, char *src, int srclen) } void -assert_token(token_kind_t expected_kind, char *source, char *expected) +assert_token_at(char *source, int token_index, token_kind_t expected_kind, char *expected) { - lexer_t lexer; - token_t token; + lexer_t lexer; + token_t token; + make_lexer_from_static_src(&lexer, source, strlen(source)); - make_lexer_from_static_src(&lexer, source, strlen(source)); - lexer_next_token(&lexer, &token); + while (token_index > 0) { + lexer_next_token(&lexer, &token); + token_index--; + } - char actual[token.value.size + 1]; - string_view_to_str(&token.value, actual); + lexer_next_token(&lexer, &token); - assert_string_equal(token_kind_to_str(expected_kind), token_kind_to_str(token.kind)); - assert_int(expected_kind, ==, token.kind); - assert_string_equal(expected, actual); + char actual[token.value.size + 1]; + string_view_to_str(&token.value, actual); + + assert_string_equal(token_kind_to_str(expected_kind), token_kind_to_str(token.kind)); + assert_int(expected_kind, ==, token.kind); + assert_string_equal(expected, actual); } + static MunitResult test_tokenize_number(const MunitParameter params[], void *user_data_or_fixture) { - assert_token(TOKEN_NUMBER, "1", "1"); - assert_token(TOKEN_NUMBER, " 13 ", "13"); - assert_token(TOKEN_NUMBER, " \n 13 ", "13"); + assert_token_at("1", 0, TOKEN_NUMBER, "1"); + assert_token_at(" 13 ", 0, TOKEN_NUMBER, "13"); + assert_token_at(" \n 13 ", 0, TOKEN_NUMBER, "13"); return MUNIT_OK; } static MunitResult test_tokenize_op(const MunitParameter params[], - void *user_data_or_fixture) + void *user_data_or_fixture) { - assert_token(TOKEN_OP, " + 2", "+"); - assert_token(TOKEN_OP, " - \n", "-"); - assert_token(TOKEN_OP, " * ;", "*"); - assert_token(TOKEN_OP, " / ", "/"); + assert_token_at(" + 2", 0, TOKEN_OP, "+"); + assert_token_at(" - \n", 0, TOKEN_OP, "-"); + assert_token_at(" * ;", 0, TOKEN_OP, "*"); + assert_token_at(" / ", 0, TOKEN_OP, "/"); + + assert_token_at("1 * 2", 0, TOKEN_NUMBER, "1"); + assert_token_at("1 * 2", 1, TOKEN_OP, "*"); + assert_token_at("1 * 2", 2, TOKEN_NUMBER, "2"); return MUNIT_OK; } @@ -73,8 +83,8 @@ static MunitResult test_tokenize_unknown(const MunitParameter params[], void *user_data_or_fixture) { - assert_token(TOKEN_UNKNOWN, " @ ", "@"); - assert_token(TOKEN_UNKNOWN, " $ ", "$"); + assert_token_at(" @ ", 0, TOKEN_UNKNOWN, "@"); + assert_token_at(" $ ", 0, TOKEN_UNKNOWN, "$"); return MUNIT_OK; } -- cgit v1.2.3