B0_testing.Test
Testing structure and assertions.
See an example.
The type for test source locations. This is the type of Stdlib.__POS_OF__
.
It is an optional argument of most combinators to keep track of precise locations of failures. The idea is that the argument is simply used with Stdlib.__POS__
. For example:
Test.string s0 s1 ~__POS__
type 'a log =
?__POS__:loc ->
('a, Stdlib.Format.formatter, unit, unit) Stdlib.format4 ->
'a
The type for log functions. If __POS__
is specified starts by logging the position on a line before logging the format.
val log : 'a log
log fmt …
logs a message formatted by fmt
.
val log_pass : 'a log
val log_fail : 'a log
log_finish
ends a line started with log_start
.
log_raw fmt …
outputs to the test log.
val main' :
?man:Cmdliner.Manpage.block list ->
?doc:string ->
?name:string ->
'a Cmdliner.Term.t ->
('a -> unit) ->
int
main'
is like main
but allows to define your own additional command line.
set_main_exit f
will disable the final report performed by main
and invoke f
instead. TODO. A bit ad-hoc.
module Arg : sig ... end
Test arguments.
val test' : 'a Arg.t -> ?long:bool -> string -> ('a -> unit) -> 'a -> unit
test' arg
is like test
but takes an argument.
val autorun : ?args:Arg.value list -> unit -> unit
A test
is usually made of many assertions. If an assertion fails the test fails.
val fail : 'a log
val failstop :
?__POS__:loc ->
('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 ->
'a
Blocks and loops can be used as larger sub units of test
which you can stop
and failstop
without stopping the test itself.
val block :
?fail:(?__POS__:loc -> int -> assertions:int -> unit) ->
?__POS__:loc ->
(unit -> unit) ->
unit
block ~fail f
runs f ()
, if that results in n > 0
failed assertions, fail n ~assertions
is called afterwards with assertoins
the total number of assertions that were performed. If f
peforms a failstop
the block is stopped but not the test. It is possible to fail stop the test by stoppping in fail
.
TODO. Should we simply make blocks nested test
s ?
val range :
?kind:string ->
first:int ->
last:int ->
?__POS__:loc ->
(int -> unit) ->
unit
range ~first ~last f
calls f n
with n
ranging over the range [first
;last
]. If a failure occurs for n
, logs "%s in range [%d;%d] failed on %d" kind first last n
. If f
performs a failstop
the loop is stopped but not the test. kind
defaults to "Test"
.
module type T = sig ... end
The type for testable values.
module T : sig ... end
Testers.
module Diff : sig ... end
Reporting value differences.
module Patch : sig ... end
Patching text and files.
The type for functions aasserting equality. diff
indicates how to report differences on mismatches.
eq t fnd exp
assert fnd
and exp
are equal using tester t
.
Convention. When testing values we assume that the second value is the expected argument and the first one the value against which it is checked.
val holds : ?msg:string -> ?__POS__:loc -> bool -> unit
holds b
asserts that b
is true
. msg
is logged if the assertion fails.
val noraise : ?__POS__:loc -> (unit -> 'a) -> 'a
noraise f
tests that f ()
does not raise an exception and fail stops if it does except if this is a B0_std.Os.exn_don't_catch
exception.
catch f k
calls f ()
and gives the exception it raises to k
or fails otherwise. ret
is used to print an offending returned value. B0_std.Os.exn_don't_catch
exceptions are not catched.
val exn : exn eq
ex
is eq
Exceptions.
val raises :
?ret:'a T.t ->
?exn:exn T.t ->
?diff:exn Diff.t ->
?__POS__:loc ->
exn ->
(unit -> 'a) ->
unit
raises exn f
tests that f ()
raises exception exn
. B0_std.Os.exn_don't_catch
exceptions are not catched.
invalid_arg f
tests that f ()
raises Invalid_argument _
. Note. It is usually better to use Snap.raise
as it allows to keep track of the error message.
failure f
tests that f ()
raises Failure _
. Note. It is usually better to use Snap.raise
as it allows to keep track of the error message.
val nativeint : nativeint eq
nativeint
is eq
T.nativeint
.
val nativeuint : nativeint eq
nativeuint
is eq
T.nativeuint
.
val binary_string : string eq
binary_string
is eq
T.binary_string
. Assumes arbitrary binary strings.
val styled_string : string eq
styled_string
is eq
T.styled_string
. Assumes strings with ANSI escape sequences.
either ~left ~right
is eq (
T.either
~left ~right)
.
result' ~ok ~error
is eq (
T.result'
~ok ~error)
.
t5
is eq
for quintuplets.
val t6 :
'a T.t ->
'b T.t ->
'c T.t ->
'd T.t ->
'e T.t ->
'f T.t ->
('a * 'b * 'c * 'd * 'e * 'f) eq
t6
is eq
for sextuplets.
module Rand : sig ... end
Randomized testing.
module Snapshot : sig ... end
Snapshot tests.
type 'a snap = ?diff:'a Diff.t -> 'a -> 'a Snapshot.t -> unit
The type for snapshot functions.
val snap : ?subst:'a Snapshot.subst -> 'a T.t -> 'a snap
snap t fnd @@ __POS_OF__ exp
compares snapshot fnd
to exp
. subst
is used to correct snapshots, it defaults to Snapshot.generic_subst
which depends on t
's pretty printer formatting valid OCaml code.
See B0_testing.Snap
for preapplied combinators.
These modules are not needed for basic B0_testing
usage.
module Cli : sig ... end
Command line.
module Fmt : sig ... end
Formatters for test runners and tested values.