CSE320/hw1/tests/basecode_tests.c

96 lines
3.3 KiB
C

#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "argo.h"
#include "global.h"
static char *progname = "bin/argo";
Test(basecode_suite, validargs_help_test) {
char *argv[] = {progname, "-h", NULL};
int argc = (sizeof(argv) / sizeof(char *)) - 1;
int ret = validargs(argc, argv);
int exp_ret = 0;
int opt = global_options;
int flag = HELP_OPTION;
cr_assert_eq(ret, exp_ret, "Invalid return for validargs. Got: %d | Expected: %d",
ret, exp_ret);
cr_assert_eq(opt & flag, flag, "Correct bit (0x%x) not set for -h. Got: %x",
flag, opt);
}
Test(basecode_suite, validargs_validate_test) {
char *argv[] = {progname, "-v", NULL};
int argc = (sizeof(argv) / sizeof(char *)) - 1;
int ret = validargs(argc, argv);
int exp_ret = 0;
int opt = global_options;
int exp_opt = VALIDATE_OPTION;
cr_assert_eq(ret, exp_ret, "Invalid return for validargs. Got: %d | Expected: %d",
ret, exp_ret);
cr_assert_eq(opt, exp_opt, "Invalid options settings. Got: 0x%x | Expected: 0x%x",
opt, exp_opt);
}
Test(basecode_suite, validargs_canonicalize_test) {
char *argv[] = {progname, "-c", NULL};
int argc = (sizeof(argv) / sizeof(char *)) - 1;
int ret = validargs(argc, argv);
int exp_ret = 0;
int opt = global_options;
int exp_opt = CANONICALIZE_OPTION;
cr_assert_eq(ret, exp_ret, "Invalid return for validargs. Got: %d | Expected: %d",
ret, exp_ret);
cr_assert_eq(opt, exp_opt, "Invalid options settings. Got: 0x%x | Expected: 0x%x",
opt, exp_opt);
}
Test(basecode_suite, validargs_pretty_print_test) {
char *argv[] = {progname, "-c", "-p", "13", NULL};
int argc = (sizeof(argv) / sizeof(char *)) - 1;
int ret = validargs(argc, argv);
int exp_ret = 0;
int opt = global_options;
int exp_opt = CANONICALIZE_OPTION | PRETTY_PRINT_OPTION | 13;
cr_assert_eq(ret, exp_ret, "Invalid return for validargs. Got: %d | Expected: %d",
ret, exp_ret);
cr_assert_eq(opt, exp_opt, "Invalid options settings. Got: 0x%x | Expected: 0x%x",
opt, exp_opt);
}
Test(basecode_suite, validargs_error_test) {
char *argv[] = {progname, "-v", "-p", NULL};
int argc = (sizeof(argv) / sizeof(char *)) - 1;
int exp_ret = -1;
int ret = validargs(argc, argv);
cr_assert_eq(ret, exp_ret, "Invalid return for validargs. Got: %d | Expected: %d",
ret, exp_ret);
}
Test(basecode_suite, help_system_test) {
char *cmd = "bin/argo -h > /dev/null 2>&1";
// system is a syscall defined in stdlib.h
// it takes a shell command as a string and runs it
// we use WEXITSTATUS to get the return code from the run
// use 'man 3 system' to find out more
int return_code = WEXITSTATUS(system(cmd));
cr_assert_eq(return_code, EXIT_SUCCESS,
"Program exited with 0x%x instead of EXIT_SUCCESS",
return_code);
}
Test(basecode_suite, argo_basic_test) {
char *cmd = "bin/argo -c < rsrc/strings.json > test_output/strings_-c.json";
char *cmp = "cmp test_output/strings_-c.json tests/rsrc/strings_-c.json";
int return_code = WEXITSTATUS(system(cmd));
cr_assert_eq(return_code, EXIT_SUCCESS,
"Program exited with 0x%x instead of EXIT_SUCCESS",
return_code);
return_code = WEXITSTATUS(system(cmp));
cr_assert_eq(return_code, EXIT_SUCCESS,
"Program output did not match reference output.");
}