diff options
Diffstat (limited to 'myfind/myfind/tests/unit/lexing.c')
| -rw-r--r-- | myfind/myfind/tests/unit/lexing.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/myfind/myfind/tests/unit/lexing.c b/myfind/myfind/tests/unit/lexing.c new file mode 100644 index 0000000..dfa876a --- /dev/null +++ b/myfind/myfind/tests/unit/lexing.c @@ -0,0 +1,45 @@ +#include <criterion/criterion.h> +#include <criterion/assert.h> + +#include "lexer.h" +#include "myfind.h" + +TestSuite(lexer); + +Test(lex, lex_basic) +{ + char *argv[] = {"-print", "-name", "*.c"}; + int len = 3; + struct ast **tokens = lex(argv, &len); + cr_assert(len == 2, "Expected size %d, got %d", 2, len); + enum type expected[] = {PRINT, NAME}; + for (int i = 0; i < len; i++) + { + cr_expect(tokens[i]->type == expected[i], "Expected %d, got %d", expected[i], tokens[i]->type); + free(tokens[i]); + } + free(tokens); +} + +Test(lex, lex_basic2) +{ + char *argv[] = {"-print", "-name", "*.c", "-o", "-type", "f"}; + int len = 6; + struct ast **tokens = lex(argv, &len); + cr_assert(len == 4, "Expected size %d, got %d", 4, len); + enum type expected[] = {PRINT, NAME, OR, TYPE}; + for (int i = 0; i < len; i++) + { + cr_expect(tokens[i]->type == expected[i], "Expected %d, got %d", expected[i], tokens[i]->type); + free(tokens[i]); + } + free(tokens); +} + +Test(lex, lex_error) +{ + char *argv[] = {"-print", "-name"}; + int len = 2; + struct ast **tokens = lex(argv, &len); + cr_expect(tokens == NULL, "Expected (null), got %p", tokens); +} |
