42sh/tests/unit/expansion/parse_var.c
2026-01-31 17:31:55 +00:00

143 lines
3.2 KiB
C

#include <criterion/criterion.h>
#include <criterion/new/assert.h>
#include "../../../src/expansion/expansion.h"
TestSuite(parse_var_name);
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, special_variable_with_braces)
{
char *input = "${1}";
char *extracted_var = NULL;
size_t r = parse_var_name(input, &extracted_var);
cr_expect(r == 4);
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);
}