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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
open! Base
open Types
module Type : sig
(** How the output expected at a node interacts with whitespace. *)
type t =
| Exact (** Matches the captured output exactly, including whitespace. *)
| Pretty
(** Matches a version of the captured output that has been formatted according to
standard rules about indentation and other whitespace. *)
end
(** Captured output that has been formatted according to the rules of the [Type.t] of
its corresponding node. *)
module Formatted : T
(** Captured test output, possibly from multiple tests, after it has been formatted and
compared to the original contents of the node; the contents that will be written to
the node in the corrected file. *)
module Reconciled : T
module Formatter : sig
(** A [Formatter.t] describes how to convert captured [string] output into a
[Formatted.t]. *)
type t
(** Given a function that applies the desired format to a [string] representing captured
output, create a [Formatter.t]. *)
val create : (string -> string) -> t
(** Apply a [Formatter.t] to a [string] representing captured output to produce a
[Formatted.t]. *)
val apply : t -> string -> Formatted.t
end
module Test_result : sig
(** The outcome produced by a single expect node when it is reached. [Pass] if the real
output matches the expected output, otherwise [Fail s], where [s] is the real
output. *)
type t = private
| Pass
| Fail of Reconciled.t
val compare : t -> t -> int
end
module Payload : sig
(** Payloads given as arguments to expectation AST nodes. *)
type t =
{ contents : string
(** The contents of the payload; the output expected at some node, as a raw [string]
exactly as they were parsed from the source file. *)
; tag : String_node_format.Delimiter.t (** The delimiters used in the payload. *)
}
(** Add the default tags to a payload. *)
val default : string -> t
(** The source-code representation of a payload. *)
val to_source_code_string : t -> string
end
(** Returns [Pass] if [test_output] is considered to match [expected_output]; otherwise
returns [Fail test_output]. *)
val reconcile : expected_output:string -> test_output:Formatted.t -> Test_result.t
(** Given some [Formatted.t] output that always indicates test failure (e.g., an
inconsistent outputs message), produces a failing test result with the corresponding
"reconciled" output. *)
val fail : Formatted.t -> Test_result.t
(** The new payload represented by a reconciled expectation.
If [tag] is not compatible with the new payload contents (for example, the tag
represents a [{x| delimited string |x}] and the new contents contain ["|x}"]), the tag
is adjusted so the resulting payload can be parsed.
*)
val to_formatted_payload : tag:String_node_format.Delimiter.t -> Reconciled.t -> Payload.t
(** The source-code representation of a reconciled expect node.
If [tag] is not compatible with the new payload contents (for example, the tag
represents a [{x| delimited string |x}] and the new contents contain ["|x}"]), the tag
is adjusted so the resulting payload can be parsed.
*)
val to_source_code_string
: expect_node_formatting:Expect_node_formatting.t
-> node_shape:String_node_format.Shape.t
-> tag:String_node_format.Delimiter.t
-> Reconciled.t
-> string
|