ppx_expect

Cram like framework for OCaml
Library expect_test_matcher
type 'a not_blank = {
trailing_blanks : Base.string;(*

regexp: " \t*"

*)
orig : Base.string;(*

regexp: "^\n*^ \t\n"

*)
data : 'a;
}
val sexp_of_not_blank : ( 'a -> Ppx_sexp_conv_lib.Sexp.t ) -> 'a not_blank -> Ppx_sexp_conv_lib.Sexp.t
val compare_not_blank : ( 'a -> 'a -> Base.int ) -> 'a not_blank -> 'a not_blank -> Base.int
type 'a t =
| Blank of Base.string(*

regexp: " \t*"

*)
| Not_blank of 'a not_blank
val sexp_of_t : ( 'a -> Ppx_sexp_conv_lib.Sexp.t ) -> 'a t -> Ppx_sexp_conv_lib.Sexp.t
val compare : ( 'a -> 'a -> Base.int ) -> 'a t -> 'a t -> Base.int
val invariant : ( 'a -> Base.unit ) -> 'a t -> Base.unit
val map : 'a t -> f:( Base.string -> 'a -> 'b ) -> 'b t

The callback receive the orig and data fields

val strip : 'a t -> 'a t

Delete trailing blanks (everything for blank lines)

val data : 'a t -> blank:'a -> 'a