42sh/tests/unit/utils/args.c

135 lines
3.6 KiB
C
Raw Normal View History

#include "../../../src/utils/args/args.h"
#include <criterion/criterion.h>
#include <criterion/new/assert.h>
#include <criterion/redirect.h>
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");
}