| #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, "no-chain-lint"), | |
| 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; | |
| } |