73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
|
|
#include <criterion/criterion.h>
|
||
|
|
#include <criterion/new/assert.h>
|
||
|
|
|
||
|
|
#include "../../../src/expansion/expansion.h"
|
||
|
|
|
||
|
|
TestSuite(parse_subshell_str);
|
||
|
|
|
||
|
|
Test(parse_subshell_str, basic_subshell)
|
||
|
|
{
|
||
|
|
char *input = "(ls -l)";
|
||
|
|
char *extracted_var = NULL;
|
||
|
|
size_t r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 7);
|
||
|
|
cr_expect_str_eq(extracted_var, "ls -l");
|
||
|
|
free(extracted_var);
|
||
|
|
}
|
||
|
|
|
||
|
|
Test(parse_subshell_str, multi_basic_subshell)
|
||
|
|
{
|
||
|
|
char *input = "(echo hello) and (echo world)";
|
||
|
|
char *extracted_var = NULL;
|
||
|
|
size_t r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 12);
|
||
|
|
cr_expect_str_eq(extracted_var, "echo hello");
|
||
|
|
free(extracted_var);
|
||
|
|
|
||
|
|
input += r + 5; // skip " and "
|
||
|
|
r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 12);
|
||
|
|
cr_expect_str_eq(extracted_var, "echo world");
|
||
|
|
free(extracted_var);
|
||
|
|
}
|
||
|
|
|
||
|
|
Test(parse_subshell_str, incomplete_braces)
|
||
|
|
{
|
||
|
|
char *input = "(echo hello";
|
||
|
|
char *extracted_var = NULL;
|
||
|
|
size_t r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 0);
|
||
|
|
cr_expect(extracted_var == NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
Test(parse_subshell_str, empty_braces)
|
||
|
|
{
|
||
|
|
char *input = "()";
|
||
|
|
char *extracted_var = NULL;
|
||
|
|
size_t r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 0);
|
||
|
|
cr_expect(extracted_var == NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
Test(parse_subshell_str, nested_subshell)
|
||
|
|
{
|
||
|
|
char *input = "(echo (nested))";
|
||
|
|
char *extracted_var = NULL;
|
||
|
|
size_t r = parse_subshell_str(input, &extracted_var);
|
||
|
|
|
||
|
|
cr_expect(r == 15);
|
||
|
|
cr_expect_str_eq(extracted_var, "echo (nested)");
|
||
|
|
free(extracted_var);
|
||
|
|
|
||
|
|
char *nested = input + 6; // point to the nested subshell
|
||
|
|
r = parse_subshell_str(nested, &extracted_var);
|
||
|
|
cr_expect(r == 8);
|
||
|
|
cr_expect_str_eq(extracted_var, "nested");
|
||
|
|
free(extracted_var);
|
||
|
|
}
|