diff options
author | Carlos Maniero <carlosmaniero@gmail.com> | 2023-04-18 14:01:36 -0300 |
---|---|---|
committer | Johnny Richard <johnny@johnnyrichard.com> | 2023-04-18 19:08:20 +0200 |
commit | d3f95217176019fe210e931fe96e9dbbd98661b6 (patch) | |
tree | f310db45994d759b66d0bc5c715ebee5ca590e5f /test | |
parent | ea7ad4f94a99fbe480e2324e69b1095a11a256f7 (diff) |
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 <carlosmaniero@gmail.com>
Reviewed-by: Johnny Richard <johnny@johnnyrichard.com>
Link: https://lists.sr.ht/~johnnyrichard/pipalang-devel/%3C20230418170136.3949-1-carlosmaniero%40gmail.com%3E
Diffstat (limited to 'test')
-rw-r--r-- | test/lexer_test.c | 50 |
1 files changed, 30 insertions, 20 deletions
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; } |