1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Sebastien Hinderer, projet Gallium, INRIA Paris *)
(* *)
(* Copyright 2016 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(* Definition of tests, built from actions *)
type t = {
test_name : string;
test_run_by_default : bool;
test_actions : Actions.t list;
test_description : string
}
let null = {
test_name = "*pass*";
test_run_by_default = false;
test_actions = [];
test_description = "dummy test inserted by parser; always pass"
}
let compare t1 t2 = String.compare t1.test_name t2.test_name
let (tests: (string, t) Hashtbl.t) = Hashtbl.create 20
let register test = Hashtbl.add tests test.test_name test
let get_registered_tests () =
let f _test_name test acc = test::acc in
let unsorted_tests = Hashtbl.fold f tests [] in
List.sort compare unsorted_tests
let default_tests () =
let f _test_name test acc =
if test.test_run_by_default then test::acc else acc in
Hashtbl.fold f tests []
let lookup name =
try Some (Hashtbl.find tests name)
with Not_found -> None
let test_of_action action =
{
test_name = Actions.name action;
test_run_by_default = false;
test_actions = [action];
test_description = Actions.description action;
}
let run_actions log testenv actions =
let total = List.length actions in
let rec run_actions_aux action_number env = function
| [] -> (Result.pass, env)
| action::remaining_actions ->
begin
Printf.fprintf log "\nRunning action %d/%d (%s)\n%!"
action_number total (Actions.name action);
let (result, env') = Actions.run log env action in
Printf.fprintf log "Action %d/%d (%s) %s\n%!"
action_number total (Actions.name action)
(Result.string_of_result result);
if Result.is_pass result
then run_actions_aux (action_number+1) env' remaining_actions
else (result, env')
end in
run_actions_aux 1 testenv actions
let run log env test =
Printf.fprintf log "Running test %s with %d actions\n%!"
test.test_name
(List.length test.test_actions);
run_actions log env test.test_actions
module TestSet = Set.Make
(struct
type nonrec t = t
let compare = compare
end)
|