package mock

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file mock.ml

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
type 'a configured_side_effect =
  | Return of 'a
  | Raise of exn

type 'a side_effect = 'a configured_side_effect option

let return x = Some (Return x)

let raise e = Some (Raise e)

let not_configured = None

let eval_side_effect = function
  | Return x -> x
  | Raise e -> Stdlib.raise e

type ('args, 'ret) t =
  { name: string
  ; params: 'args list ref
  ; side_effect: 'ret side_effect ref
  }

let make ~name =
  { name
  ; params = ref []
  ; side_effect = ref not_configured
  }

let name mock =
  mock.name

let configure t side_effect =
  t.side_effect := side_effect;
  t.params := []

exception Mock_not_configured of string

let call mock args =
  match !(mock.side_effect) with
  | None
    ->
    Stdlib.raise (Mock_not_configured mock.name)
  | Some effect
    ->
    begin
      mock.params := args :: !(mock.params);
      eval_side_effect effect
    end

let recorded_calls mock =
  List.rev !(mock.params)