52 lines
1.3 KiB
OCaml
52 lines
1.3 KiB
OCaml
type result = Pass | Fail | Skip;;
|
|
|
|
let testing = ref false;;
|
|
let test_only = ref [];;
|
|
let test_results = ref [];;
|
|
|
|
let rec should_skip test =
|
|
match List.assoc_opt test !test_results with
|
|
Some Fail
|
|
| Some Skip -> true
|
|
| _ -> false;;
|
|
|
|
let test name ?(depends = []) run =
|
|
let test_only = !test_only in
|
|
if (test_only = [] && !testing) || List.exists (String.equal name) test_only then begin
|
|
Printf.printf "Test '%s': " name;
|
|
let res = if List.exists should_skip depends then begin
|
|
Printf.printf "Skip\n%!";
|
|
Skip
|
|
end else begin
|
|
try
|
|
run ();
|
|
Printf.printf "Pass\n%!";
|
|
Pass
|
|
with e ->
|
|
Printf.printf "FAIL\n%!";
|
|
if test_only <> [] then begin
|
|
let msg = Printexc.to_string e
|
|
and stack = Printexc.get_backtrace () in
|
|
Printf.printf "exception thrown: %s%s\n\n%!" msg stack
|
|
end;
|
|
Fail
|
|
end; in
|
|
test_results := (name, res) :: !test_results
|
|
end;;
|
|
|
|
let () =
|
|
let rec proc args =
|
|
begin match args with
|
|
[] -> ()
|
|
| "--run-tests" :: tl ->
|
|
testing := true;
|
|
proc tl
|
|
| "--run-test" :: test :: tl ->
|
|
testing := false;
|
|
test_only := test :: !test_only;
|
|
proc tl
|
|
| hd :: tl ->
|
|
proc tl
|
|
end
|
|
in proc @@ Array.to_list Sys.argv;;
|