Source file alcotest_mirage.ml
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
module Make (C : Mirage_clock.MCLOCK) = struct
module Platform (M : Alcotest_engine.Monad.S) = struct
let time () = Duration.to_f @@ C.elapsed_ns ()
let getcwd () = ""
let stdout_isatty () = true
let stdout_columns () = None
let setup_std_outputs ?style_renderer:_ ?utf_8:_ _stdout _stderr = ()
type file_descriptor = { empty : 'a. 'a }
let log_trap_supported = false
let prepare_log_trap ~root:_ = assert false
let file_exists _ = assert false
let open_write_only _ = assert false
let close = function (fd : file_descriptor) -> fd.empty
let with_redirect = function (fd : file_descriptor) -> fd.empty
let home_directory () =
Error (`Msg "Home directory not available for the MirageOS platform")
end
module Tester = Alcotest_engine.V1.Cli.Make (Platform) (Lwt)
include Tester
let test_case_sync n s f = test_case n s (fun x -> Lwt.return (f x))
let run_test fn args =
let async_ex, async_waker = Lwt.wait () in
let handle_exn ex =
Logs.debug (fun f -> f "Uncaught async exception: %a" Fmt.exn ex);
if Lwt.state async_ex = Lwt.Sleep then Lwt.wakeup_exn async_waker ex
in
Lwt.async_exception_hook := handle_exn;
Lwt_switch.with_switch (fun sw -> Lwt.pick [ fn sw args; async_ex ])
let test_case n s f = test_case n s (run_test f)
end