package CamelCase

  1. Overview
  2. Docs

Source file TestRunner.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
39
40
41
42
43
44
45
46
47
48
49
50
51
(** Returns a test case with a name *)
let test name f = (name, f)

(** Run all tests and terminate the program with exit code 0 if all tests were successful or 1 if they weren't *)
let run ?(title = "") tests =
  Printer.print_head ~title ();
  let rec inner = function
    | [] -> []
    | (name, func) :: rest ->
        let res = func () in
        (name, res) :: inner rest
  in
  let results = inner tests in
  Printer.print_test_results results;
  match
    List.find_opt
      (function
        | _, TestResult.Failure _ -> true
        | _, _ -> false)
      results
  with
  | Some _ -> exit 1
  | None -> exit 0

(** Expect input to be true *)
let expect_true input = if input then TestResult.Success else TestResult.Failure "expected true, but got false"

(** Expect input to be false *)
let expect_false input = if input then TestResult.Failure "expected false, but got true" else TestResult.Success

(** Expect option input to have some value *)
let expect_some input =
  if Option.is_some input then TestResult.Success else TestResult.Failure "expected Some(...), but got: None"

(** Expect option input to have no value *)
let expect_none input =
  if Option.is_none input then TestResult.Success else TestResult.Failure "expected None, but got: Some(...)"

(** Expect result input to be OK *)
let expect_ok input =
  if Result.is_ok input then TestResult.Success else TestResult.Failure "expected Ok(...), but got: Error(...)"

(** Expect result input to be an error *)
let expect_error input =
  if Result.is_error input then TestResult.Success else TestResult.Failure "expected Error(...), but got: Ok(...)"

(** Chain multiple test results *)
let ( >> ) a b =
  match a with
  | TestResult.Success -> b
  | TestResult.Failure _ -> a