Skip to content

Commit f1e4c32

Browse files
committed
mdx_test: Lazily initialize OCaml toplevel
This changes the OCaml toplevel to be a lazy value, which is only forced when needed to run tests in an OCaml block. The motivation behind this change is to avoid stderr output from the init process (e.g., errors while registering pretty-printers) spilling into the test executable's output, which can trip up some build tools.
1 parent 1f83f73 commit f1e4c32

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

lib/test/mdx_test.ml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,9 @@ let run_exn ~non_deterministic ~silent_eval ~record_backtrace ~syntax ~silent
332332
match syntax with Some syntax -> Some syntax | None -> Syntax.infer ~file
333333
in
334334
let c =
335-
Mdx_top.init ~verbose:(not silent_eval) ~silent ~verbose_findlib ~directives
336-
~packages ~predicates ()
335+
lazy
336+
(Mdx_top.init ~verbose:(not silent_eval) ~silent ~verbose_findlib ~directives
337+
~packages ~predicates ())
337338
in
338339
let preludes = preludes ~prelude ~prelude_str in
339340

@@ -353,7 +354,7 @@ let run_exn ~non_deterministic ~silent_eval ~record_backtrace ~syntax ~silent
353354
let det () =
354355
assert (syntax <> Some Cram);
355356
Mdx_top.in_env env (fun () ->
356-
eval_ocaml ~block:t ?syntax ?root c ppf errors)
357+
eval_ocaml ~block:t ?syntax ?root (Lazy.force c) ppf errors)
357358
in
358359
with_non_det non_deterministic non_det ~on_skip_execution:print_block
359360
~on_keep_old_output:det ~on_evaluation:det
@@ -378,7 +379,7 @@ let run_exn ~non_deterministic ~silent_eval ~record_backtrace ~syntax ~silent
378379
(fun (phrase : Toplevel.t) ->
379380
match
380381
Mdx_top.in_env env (fun () ->
381-
eval_test ~block:t ?root c phrase.command)
382+
eval_test ~block:t ?root (Lazy.force c) phrase.command)
382383
with
383384
| Ok _ -> ()
384385
| Error e ->
@@ -389,7 +390,7 @@ let run_exn ~non_deterministic ~silent_eval ~record_backtrace ~syntax ~silent
389390
~on_evaluation:(fun () ->
390391
assert (syntax <> Some Cram);
391392
Mdx_top.in_env env (fun () ->
392-
run_toplevel_tests ?syntax ?root c ppf phrases t))
393+
run_toplevel_tests ?syntax ?root (Lazy.force c) ppf phrases t))
393394
else print_block ()
394395
in
395396
let gen_corrected file_contents items =
@@ -398,7 +399,7 @@ let run_exn ~non_deterministic ~silent_eval ~record_backtrace ~syntax ~silent
398399
let buf = Buffer.create (String.length file_contents + 1024) in
399400
let ppf = Format.formatter_of_buffer buf in
400401
let envs = Document.envs items in
401-
let eval lines () = eval_raw ?root c lines in
402+
let eval lines () = eval_raw ?root (Lazy.force c) lines in
402403
let eval_in_env lines env = Mdx_top.in_env env (eval lines) in
403404
List.iter
404405
(function

0 commit comments

Comments
 (0)