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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//! Argument [matchers](Matcher) used with [`Mock::on`](crate::Mock::on) and
//! [`Arguments::assert_matches`](crate::Arguments::assert_matches).
//!
//! Prefer the helpers [`anything`], [`anything_of_type`], [`eq`], and [`matched_by`].
use ;
/// Predicate used to compare one boxed argument against an expectation.
///
/// Matches any value.
;
/// Wildcard matcher: always matches.
///
/// # Examples
///
/// ```
/// use suitecase::mock::{anything, Mock};
///
/// let m = Mock::new();
/// m.on("x", vec![anything()])
/// .returning(|| vec![Box::new(0u8)])
/// .finish();
/// m.method_called("x", suitecase::mock_args!("anything goes"));
/// ```
/// Matches when the dynamic type equals `T` ([`TypeId`](std::any::TypeId)).
/// Matches any value whose concrete type is `T`.
///
/// # Examples
///
/// ```
/// use suitecase::mock::{anything_of_type, Mock};
///
/// let m = Mock::new();
/// m.on("x", vec![anything_of_type::<i32>()])
/// .returning(|| vec![Box::new(())])
/// .finish();
/// m.method_called("x", suitecase::mock_args!(42i32));
/// ```
/// Equality matcher for a concrete `T` ([`PartialEq`]).
;
/// Matches when the argument downcasts to `T` and compares equal to `v`.
///
/// # Examples
///
/// ```
/// use suitecase::mock::{eq, Mock};
///
/// let m = Mock::new();
/// m.on("id", vec![eq(99u32)])
/// .returning(|| vec![Box::new("ok".to_string())])
/// .finish();
/// let out = m.method_called("id", suitecase::mock_args!(99u32));
/// assert_eq!(out.string(0), "ok");
/// ```
/// Matcher wrapping a custom predicate over [`Any`].
+ Send,
/// Custom match: `f` receives the erased argument and returns whether it matches.
///
/// # Examples
///
/// ```
/// use suitecase::mock::{matched_by, Mock};
///
/// let m = Mock::new();
/// m.on("x", vec![matched_by(|a| a.downcast_ref::<i32>().map(|v| *v > 0).unwrap_or(false))])
/// .returning(|| vec![Box::new(1i32)])
/// .finish();
/// let out = m.method_called("x", suitecase::mock_args!(7i32));
/// assert_eq!(out.int(0), 1i64);
/// ```