From 6ff2c11b25a8fe9ab34973bbc5c1dfed6b5a1532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ojeda=20B=C3=A4r?= Date: Thu, 4 Jun 2020 06:43:12 +0200 Subject: [PATCH] ocamltest: do not overwrite user-defined variables --- ocamltest/builtin_actions.ml | 2 +- ocamltest/environments.ml | 21 +++++++++++++++++---- ocamltest/environments.mli | 6 ++++-- ocamltest/main.ml | 8 +++++--- ocamltest/ocaml_actions.ml | 4 ++-- 5 files changed, 29 insertions(+), 12 deletions(-) diff --git a/ocamltest/builtin_actions.ml b/ocamltest/builtin_actions.ml index 99059c1c9..331346d82 100644 --- a/ocamltest/builtin_actions.ml +++ b/ocamltest/builtin_actions.ml @@ -224,7 +224,7 @@ let initialize_test_exit_status_variables _log env = ] env let _ = - Environments.register_initializer + Environments.register_initializer Environments.Post "test_exit_status_variables" initialize_test_exit_status_variables; List.iter register [ diff --git a/ocamltest/environments.ml b/ocamltest/environments.ml index 43dd1173c..09f668c21 100644 --- a/ocamltest/environments.ml +++ b/ocamltest/environments.ml @@ -95,18 +95,31 @@ let dump log environment = (* Initializers *) +type kind = Pre | Post + type env_initializer = out_channel -> t -> t -let (initializers : (string, env_initializer) Hashtbl.t) = Hashtbl.create 10 +type initializers = + { + pre: (string, env_initializer) Hashtbl.t; + post: (string, env_initializer) Hashtbl.t; + } -let register_initializer name code = Hashtbl.add initializers name code +let initializers = {pre = Hashtbl.create 10; post = Hashtbl.create 10} + +let get_initializers = function + | Pre -> initializers.pre + | Post -> initializers.post + +let register_initializer kind name code = + Hashtbl.add (get_initializers kind) name code let apply_initializer _log _name code env = code _log env -let initialize log env = +let initialize kind log env = let f = apply_initializer log in - Hashtbl.fold f initializers env + Hashtbl.fold f (get_initializers kind) env (* Modifiers *) diff --git a/ocamltest/environments.mli b/ocamltest/environments.mli index f288a6f10..62152e83d 100644 --- a/ocamltest/environments.mli +++ b/ocamltest/environments.mli @@ -43,11 +43,13 @@ val dump : out_channel -> t -> unit (* Initializers *) +type kind = Pre | Post + type env_initializer = out_channel -> t -> t -val register_initializer : string -> env_initializer -> unit +val register_initializer : kind -> string -> env_initializer -> unit -val initialize : env_initializer +val initialize : kind -> env_initializer (* Modifiers *) diff --git a/ocamltest/main.ml b/ocamltest/main.ml index a9afb7712..00eddf51b 100644 --- a/ocamltest/main.ml +++ b/ocamltest/main.ml @@ -187,10 +187,12 @@ let test_file test_filename = test_build_directory_prefix; Builtin_variables.promote, promote; ] in - let root_environment = + let rootenv = + Environments.initialize Environments.Pre log initial_environment in + let rootenv = interprete_environment_statements - initial_environment rootenv_statements in - let rootenv = Environments.initialize log root_environment in + rootenv rootenv_statements in + let rootenv = Environments.initialize Environments.Post log rootenv in let common_prefix = " ... testing '" ^ test_basename ^ "' with" in let initial_status = if skip_test then Skip_all_tests else Run rootenv diff --git a/ocamltest/ocaml_actions.ml b/ocamltest/ocaml_actions.ml index a2de63bd5..34efb9127 100644 --- a/ocamltest/ocaml_actions.ml +++ b/ocamltest/ocaml_actions.ml @@ -1365,8 +1365,8 @@ let run_ocamldoc = end let _ = - Environments.register_initializer "find_source_modules" find_source_modules; - Environments.register_initializer "config_variables" config_variables; + Environments.register_initializer Environments.Post "find_source_modules" find_source_modules; + Environments.register_initializer Environments.Pre "config_variables" config_variables; List.iter register [ setup_ocamlc_byte_build_env;