Module Alcotest
A lightweight and colourful test framework.
Alcotest provides a simple interface to perform unit tests. It exposes a simple TESTABLE module type, a check function to assert test predicates and a run function to perform a list of unit -> unit test callbacks.
From these descriptions, Alcotest builds a quiet and colorful output where only faulty runs are fully displayed at the end of the run (with the full logs ready to inspect), with a simple (yet expressive) query language to select the tests to run.
Release 0.8.5
type speed_level=[|`Quick|`Slow]Speed level of a test. Tests marked as
`Quickare always run. Tests marked as`Sloware skipped when the `-q` flag is passed.
type 'a test_case= string * speed_level * ('a -> unit)A test case is an UTF-8 encoded documentation string, a speed level and a function to execute. Typically, the testing function calls the helper functions provided below (such as
checkandfail).
val test_case : string -> speed_level -> ('a -> unit) -> 'a test_casetest_case n s fis the test casenrunning at speedsusing the functionf.
type 'a test= string * 'a test_case listA test is an US-ASCII encoded name and a list of test cases. * The name can be used for filtering which tests to run on the CLI
exceptionTest_errorThe exception return by
runin case of errors.
val run : ?and_exit:bool -> ?argv:string array -> string -> unit test list -> unitrun n truns the test suitet.nis the name of the tested library.The optional argument
and_exitcontrols what happens when the function ends. By default,and_exitis set, which makes the function exit with0if everything is fine or1if there is an issue. Ifand_exitisfalse, then the function raisesTest_erroron error.The optional argument
argvspecifies the argument sent to alcotest like"--json","--verbose", etc. (at least one argument is required).
val run_with_args : ?and_exit:bool -> ?argv:string array -> string -> 'a Cmdliner.Term.t -> 'a test list -> unitrun_with_args n a tSimilar torun a tbut take an extra argumenta. Every test function will receive as arguement the evaluation of theCdmlinerterma: this is useful to configure the test behaviors using the CLI.
Assert functions
module type TESTABLE = sig ... endTESTABLEprovides an abstract description for testable values.
val testable : 'a Fmt.t -> ('a -> 'a -> bool) -> 'a testabletestable pp eqis a newtestablewith the pretty-printerppand equalityeq.
val equal : 'a testable -> 'a -> 'a -> boolequal tist's equality.
val bool : bool testablebooltests booleans.
val int : int testableinttests integers.
val int32 : int32 testableint32tests 32-bit integers.
val int64 : int64 testableint64tests 64-bit integers.
val float : float -> float testablefloattests floats with specified absolute error.
val char : char testablechartests characters.
val string : string testablestringtests OCaml strings.
val unit : unit testableunittests unit values (useful for functions with side-effects).
val slist : 'a testable -> ('a -> 'a -> int) -> 'a list testableslist t comptests sorted lists ofts. The list are sorted usingcomp.
val result : 'a testable -> 'e testable -> ('a, 'e) Result.result testableresult t eteststs on success andes on failure.
val of_pp : 'a Fmt.t -> 'a testableof_pp pptests values which can be printed usingppand compared usingPervasives.compare
val pass : 'a testablepasstests values of any type and always succeeds.
val reject : 'a testablerejecttests values of any type and always fails.
val check : 'a testable -> string -> 'a -> 'a -> unitCheck that two values are equal.
val failf : ('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'aSimply fail with a formatted message.
Deprecated
val line : Stdlib.out_channel -> ?color:[ `Blue | `Yellow ] -> char -> unit- deprecated
You should write your own line function. For instance:
let line ppf ?color c = let line = String.v ~len:terminal_columns (fun _ -> c) in match color with | Some c -> Fmt.pf ppf "%a\n%!" Fmt.(styled c string) line | None -> Fmt.pf ppf "%s\n%!"line