File: output.mli

package info (click to toggle)
ppx-expect 0.17.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 948 kB
  • sloc: ml: 3,399; ansic: 104; javascript: 19; makefile: 15; sh: 2
file content (91 lines) | stat: -rw-r--r-- 3,385 bytes parent folder | download | duplicates (2)
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