#include "../../../src/utils/args/args.h" #include #include #include TestSuite(utils_args); Test(utils_args, basic_command) { int argc = 3; struct args_options options; char *input[] = { "program", "-c", "echo Hello, World!" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == false); cr_expect(options.verbose == false); cr_expect(options.type == INPUT_CMD); cr_expect(eq(options.input_source, "echo Hello, World!")); } Test(utils_args, basic_command_with_flags) { int argc = 5; struct args_options options; char *input[] = { "program", "--pretty-print", "-c", "echo Hello, World!", "--verbose" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == true); cr_expect(options.verbose == true); cr_expect(options.type == INPUT_CMD); cr_expect(eq(options.input_source, "echo Hello, World!")); } Test(utils_args, basic_file_input) { int argc = 2; struct args_options options; char *input[] = { "program", "input.txt" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == false); cr_expect(options.verbose == false); cr_expect(options.type == INPUT_FILE); cr_expect(eq(options.input_source, "input.txt")); } Test(utils_args, basic_file_input_with_flags) { int argc = 4; struct args_options options; char *input[] = { "program", "--verbose", "input.txt", "--pretty-print" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == true); cr_expect(options.verbose == true); cr_expect(options.type == INPUT_FILE); cr_expect(eq(options.input_source, "input.txt")); } Test(utils_args, basic_stdin_input) { int argc = 1; struct args_options options; char *input[] = { "program" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == false); cr_expect(options.verbose == false); cr_expect(options.type == INPUT_STDIN); cr_expect(options.input_source == NULL); } Test(utils_args, pretty_print_and_verbose_flags) { int argc = 3; struct args_options options; char *input[] = { "program", "--pretty-print", "--verbose" }; int r = args_handler(argc, input, &options); cr_expect(r == 0); cr_expect(options.pretty_print == true); cr_expect(options.verbose == true); cr_expect(options.type == INPUT_STDIN); cr_expect(options.input_source == NULL); } Test(utils_args, missing_command_after_c, .init = cr_redirect_stderr) { int argc = 2; struct args_options options; char *input[] = { "program", "-c" }; int r = args_handler(argc, input, &options); cr_expect(r != 0); cr_assert_stderr_eq_str("No command provided after -c\n"); } Test(utils_args, unknown_option, .init = cr_redirect_stderr) { int argc = 2; struct args_options options; char *input[] = { "program", "--unknown" }; int r = args_handler(argc, input, &options); cr_expect(r != 0); cr_assert_stderr_eq_str("Unknown option: --unknown\n"); } Test(utils_args, conflicting_input_types, .init = cr_redirect_stderr) { int argc = 4; struct args_options options; char *input[] = { "program", "-c", "echo Hello", "input.txt" }; int r = args_handler(argc, input, &options); cr_expect(r != 0); cr_assert_stderr_eq_str("Multiple input sources specified: input.txt\n"); }