| #include "unit-test.h" |
| #include "hex.h" |
| #include "parse-options.h" |
| #include "strbuf.h" |
| #include "string-list.h" |
| #include "strvec.h" |
| |
| static const char * const unit_test_usage[] = { |
| N_("unit-test [<options>]"), |
| NULL, |
| }; |
| |
| int cmd_main(int argc, const char **argv) |
| { |
| struct string_list run_args = STRING_LIST_INIT_NODUP; |
| struct string_list exclude_args = STRING_LIST_INIT_NODUP; |
| int immediate = 0; |
| struct option options[] = { |
| OPT_BOOL('i', "immediate", &immediate, |
| N_("immediately exit upon the first failed test")), |
| OPT_STRING_LIST('r', "run", &run_args, N_("suite[::test]"), |
| N_("run only test suite or individual test <suite[::test]>")), |
| OPT_STRING_LIST(0, "exclude", &exclude_args, N_("suite"), |
| N_("exclude test suite <suite>")), |
| /* |
| * Compatibility wrappers so that we don't have to filter |
| * options understood by integration tests. |
| */ |
| OPT_NOOP_NOARG('d', "debug"), |
| OPT_NOOP_NOARG(0, "github-workflow-markup"), |
| OPT_NOOP_NOARG(0, "no-bin-wrappers"), |
| OPT_NOOP_ARG(0, "root"), |
| OPT_NOOP_ARG(0, "stress"), |
| OPT_NOOP_NOARG(0, "tee"), |
| OPT_NOOP_NOARG(0, "with-dashes"), |
| OPT_NOOP_ARG(0, "valgrind"), |
| OPT_NOOP_ARG(0, "valgrind-only"), |
| OPT_NOOP_NOARG('v', "verbose"), |
| OPT_NOOP_NOARG('V', "verbose-log"), |
| OPT_NOOP_ARG(0, "verbose-only"), |
| OPT_NOOP_NOARG('x', NULL), |
| OPT_END(), |
| }; |
| struct strvec args = STRVEC_INIT; |
| int ret; |
| |
| argc = parse_options(argc, argv, NULL, options, |
| unit_test_usage, PARSE_OPT_KEEP_ARGV0); |
| if (argc > 1) |
| usagef(_("extra command line parameter '%s'"), argv[0]); |
| |
| strvec_push(&args, argv[0]); |
| strvec_push(&args, "-t"); |
| if (immediate) |
| strvec_push(&args, "-Q"); |
| for (size_t i = 0; i < run_args.nr; i++) |
| strvec_pushf(&args, "-s%s", run_args.items[i].string); |
| for (size_t i = 0; i < exclude_args.nr; i++) |
| strvec_pushf(&args, "-x%s", exclude_args.items[i].string); |
| |
| ret = clar_test(args.nr, (char **) args.v); |
| |
| string_list_clear(&run_args, 0); |
| strvec_clear(&args); |
| return ret; |
| } |