#include #include #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); }