Login

Alcotest

Alcotest provides pleasant test output vs. the dune default, not being silent in success and being much more verbose and useful in failure.

(* test/test_russian.ml: no-framework testing *)
open Flash

let () =
  let open Russian.Emphasis in
  let emph = "компью́тер" in
  assert ("компьютер" = strip_emphasis emph);
  assert (emph = quote_to_emphasis "компью'тер")

In failure:

$ dune test
File "test/dune", line 2, characters 19-31:
2 |  (names test_flash test_russian)
                       ^^^^^^^^^^^^
Fatal error: exception File "test/test_russian.ml", line 6, characters 2-8: Assertion failed

vs. alcotest:

let utf8_string = Alcotest.testable (Fmt.quote Fmt.string) String.equal
(** required to avoid output like
  Expected: `"\208\186\208\190\208\188\208\191\209\140\209\142'\209\130\208\181\209\128"'
*)

let emph = "компью́тер"

let test_strip_emphasis () =
  Alcotest.(check utf8_string)
    "same string" "компьютер"
    (Flash.Russian.Emphasis.strip_emphasis emph)

let test_quote_to_emphasis () =
  Alcotest.(check utf8_string)
    "same string" emph
    (Flash.Russian.Emphasis.quote_to_emphasis "компью'тер")

let () =
  let open Alcotest in
  run "Flash"
    [
      ( "Russian",
        [
          test_case "strip_emphasis" `Quick test_strip_emphasis;
          test_case "quote_to_emphasis" `Quick test_quote_to_emphasis;
        ] );
    ]

and failure:

$ dune test
File "test/dune", line 2, characters 8-18:
2 |  (names test_flash test_russian)
            ^^^^^^^^^^
Testing `Flash'.
This run has ID `YSOX49CY'.

  [OK]          Russian          0   strip_emphasis.
> [FAIL]        Russian          1   quote_to_emphasis.

┌───────────────────────────────────────────────────────────────────────────────────────────┐
│ [FAIL]        Russian          1   quote_to_emphasis.                                     │
└───────────────────────────────────────────────────────────────────────────────────────────┘
ASSERT same string
FAIL same string

   Expected: `"компью'тер"'
   Received: `"компью́тер"'

Raised at Alcotest_engine__Test.check in file "src/alcotest-engine/test.ml", lines 216-226, characters 4-19
Called from Alcotest_engine__Core.Make.protect_test.(fun) in file "src/alcotest-engine/core.ml", line 186, characters 17-23
Called from Alcotest_engine__Monad.Identity.catch in file "src/alcotest-engine/monad.ml", line 24, characters 31-35

Logs saved to `~/ocaml/flash/_build/default/test/_build/_tests/Flash/Russian.001.output'.
 ───────────────────────────────────────────────────────────────────────────────────────────

Full test results in `~/ocaml/flash/_build/default/test/_build/_tests/Flash'.
1 failure! in 0.000s. 4 tests run.