summaryrefslogtreecommitdiff
path: root/test/lexer_test.c
diff options
context:
space:
mode:
authorCarlos Maniero <carlosmaniero@gmail.com>2023-04-18 14:01:36 -0300
committerJohnny Richard <johnny@johnnyrichard.com>2023-04-18 19:08:20 +0200
commitd3f95217176019fe210e931fe96e9dbbd98661b6 (patch)
treef310db45994d759b66d0bc5c715ebee5ca590e5f /test/lexer_test.c
parentea7ad4f94a99fbe480e2324e69b1095a11a256f7 (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/lexer_test.c')
-rw-r--r--test/lexer_test.c50
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;
}