feat(expansion): parse_subshell_str and tests
This commit is contained in:
parent
2e7bcd7fa1
commit
bb7d4b772e
4 changed files with 151 additions and 21 deletions
72
tests/unit/expansion/parse_subshell.c
Normal file
72
tests/unit/expansion/parse_subshell.c
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
#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);
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
#include <criterion/criterion.h>
|
||||
#include <criterion/new/assert.h>
|
||||
#include <criterion/redirect.h>
|
||||
|
||||
#include "../../../src/expansion/expansion.h"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue