ocamltest: do not overwrite user-defined variables

master
Nicolás Ojeda Bär 2020-06-04 06:43:12 +02:00
parent a8a2a7b757
commit 6ff2c11b25
5 changed files with 29 additions and 12 deletions

View File

@ -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
[

View File

@ -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 *)

View File

@ -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 *)

View File

@ -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

View File

@ -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;