let run_test_tt_main ?(exit=Pervasives.exit) suite =
let only_test = ref [] in
let list_test = ref false in
let extra_specs =
[
"-only-test",
Arg.String (fun str -> only_test := str :: !only_test),
"path Run only the selected tests.";
"-list-test",
Arg.Set list_test,
" List tests";
]
in
let preset =
match suite with
| OUnitTest.TestLabel (suite_name, _) -> ["suite_name", suite_name]
| OUnitTest.TestCase _ | OUnitTest.TestList _ -> []
in
let conf = !run_test_tt_main_conf ~preset extra_specs in
if !list_test then
begin
List.iter
(fun pth -> print_endline (OUnitTest.string_of_path pth))
(OUnitTest.test_case_paths suite)
end
else
begin
let nsuite =
if !only_test = [] then
suite
else
begin
match OUnitTest.test_filter ~skip:true !only_test suite with
| Some test ->
test
| None ->
failwithf
"Filtering test %s lead to no tests."
(String.concat ", " !only_test)
end
in
let logger =
OUnitLogger.combine
[
OUnitLoggerStd.create conf shard_default;
OUnitLoggerHTML.create conf;
OUnitLoggerJUnit.create conf;
]
in
let runner_name, runner = OUnitRunner.choice conf in
let chooser_name, chooser = OUnitChooser.choice conf in
let test_results =
OUnitLogger.infof logger "Runner: %s" runner_name;
OUnitLogger.infof logger "Chooser: %s" chooser_name;
run_test_tt conf logger runner chooser nsuite
in
if not (OUnitResultSummary.was_successful test_results) then
exit 1
end