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