feat(expansion): parse_var_name and tests
This commit is contained in:
parent
ccb9438d69
commit
dadbebfceb
3 changed files with 223 additions and 28 deletions
138
tests/unit/expansion/parse_var.c
Normal file
138
tests/unit/expansion/parse_var.c
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
#include <criterion/criterion.h>
|
||||
#include <criterion/new/assert.h>
|
||||
#include <criterion/redirect.h>
|
||||
|
||||
#include "../../../src/expansion/expansion.h"
|
||||
|
||||
TestSuite(parse_var_name);
|
||||
|
||||
// char *input = "$MY$VAR";
|
||||
// char *input = "$MY$VAR$";
|
||||
// char *input = "$MY$VAR${}";
|
||||
// char *input = "$MY$VAR${1}";
|
||||
|
||||
Test(parse_var_name, basic_variable)
|
||||
{
|
||||
char *input = "$MY_VAR";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 7);
|
||||
cr_expect_str_eq(extracted_var, "MY_VAR");
|
||||
free(extracted_var);
|
||||
}
|
||||
|
||||
Test(parse_var_name, multi_basic_variable)
|
||||
{
|
||||
char *input = "$MY$VAR";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 3);
|
||||
cr_expect_str_eq(extracted_var, "MY");
|
||||
free(extracted_var);
|
||||
|
||||
input += r;
|
||||
r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 4);
|
||||
cr_expect_str_eq(extracted_var, "VAR");
|
||||
free(extracted_var);
|
||||
}
|
||||
|
||||
Test(parse_var_name, variable_with_braces)
|
||||
{
|
||||
char *input = "${MY_VAR}";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 9);
|
||||
cr_expect_str_eq(extracted_var, "MY_VAR");
|
||||
free(extracted_var);
|
||||
}
|
||||
|
||||
Test(parse_var_name, special_variable)
|
||||
{
|
||||
char *input = "$1";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 2);
|
||||
cr_expect_str_eq(extracted_var, "1");
|
||||
free(extracted_var);
|
||||
}
|
||||
|
||||
Test(parse_var_name, incomplete_braces)
|
||||
{
|
||||
char *input = "${MY_VAR";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 0);
|
||||
cr_expect(extracted_var == NULL);
|
||||
}
|
||||
|
||||
Test(parse_var_name, empty_braces)
|
||||
{
|
||||
char *input = "${}";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 0);
|
||||
cr_expect(extracted_var == NULL);
|
||||
}
|
||||
|
||||
Test(parse_var_name, dollar_sign_only)
|
||||
{
|
||||
char *input = "$";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 0);
|
||||
cr_expect(extracted_var == NULL);
|
||||
}
|
||||
|
||||
Test(parse_var_name, variable_followed_by_dollar)
|
||||
{
|
||||
char *input = "$MY$VAR$";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 3);
|
||||
cr_expect_str_eq(extracted_var, "MY");
|
||||
free(extracted_var);
|
||||
|
||||
input += r;
|
||||
r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 4);
|
||||
cr_expect_str_eq(extracted_var, "VAR");
|
||||
free(extracted_var);
|
||||
|
||||
input += r;
|
||||
r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 0);
|
||||
cr_expect(extracted_var == NULL);
|
||||
}
|
||||
|
||||
Test(parse_var_name, special_variable_followed_by_text)
|
||||
{
|
||||
char *input = "$1VAR";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 2);
|
||||
cr_expect_str_eq(extracted_var, "1");
|
||||
free(extracted_var);
|
||||
}
|
||||
|
||||
Test(parse_var_name, bad_variable_with_braces)
|
||||
{
|
||||
char *input = "${1VAR}";
|
||||
char *extracted_var = NULL;
|
||||
size_t r = parse_var_name(input, &extracted_var);
|
||||
|
||||
cr_expect(r == 0);
|
||||
cr_expect(extracted_var == NULL);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue