Skip to content

Commit 01bcb7c

Browse files
author
DavidDeSimone
committed
Updating README.md with code examples for new generic support.
1 parent 151f46c commit 01bcb7c

File tree

3 files changed

+73
-18
lines changed

3 files changed

+73
-18
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*~
2-
**/target
2+
**/target
3+
*.diff

README.md

+52-16
Original file line numberDiff line numberDiff line change
@@ -105,25 +105,18 @@ fn parameter_type_test() {
105105
.first_call()
106106
.set_result(Some(11))
107107
.nth_call(2) // equiv to 'second_call'
108-
.set_result(None);
108+
.set_result(None)
109+
.nth_call(3)
110+
.set_result(None)
111+
.nth_call(4)
112+
.set_result(Some(1));
109113

110114
mock.set_bar(method);
111-
112-
let result = mock.bar();
113-
assert!(result == Some(11));
115+
116+
assert!(mock.bar() == Some(11));
114117
assert!(mock.bar() == None);
115-
}
116-
117-
#[test]
118-
fn parameter_gen_test() {
119-
let mut mock = MockHelloWorld::new();
120-
let method = mock.method_baz()
121-
.first_call()
122-
.set_result(Foo::new());
123-
124-
mock.set_baz(method);
125-
let result = mock.baz(32);
126-
assert!(result.x == 0 && result.y == 0);
118+
assert!(mock.bar() == None);
119+
assert!(mock.bar() == Some(1));
127120
}
128121

129122
// You can also pass in a lambda to return a value. This can be used to return a value
@@ -180,6 +173,49 @@ fn called_once_failure_too_little() {
180173
// Foo is never called, this will panic on completion.
181174
}
182175

176+
```
177+
178+
## GENERICS
179+
180+
As of mock_derive 0.5.0, we have (basic) support for generics. Check out tests/src/generics.rs for more examples.
181+
``` rust
182+
#[mock]
183+
trait GenericTrait<T, U>
184+
where T: Clone {
185+
fn merge(&self, t: T, u: U) -> U;
186+
}
187+
188+
#[test]
189+
fn generic_test_one() {
190+
let mut mock = MockGenericTrait::<f32, i32>::new();
191+
let method = mock.method_merge()
192+
.called_once()
193+
.set_result(30);
194+
195+
mock.set_merge(method);
196+
assert!(mock.merge(15.0, 15) == 30);
197+
}
198+
199+
#[mock]
200+
trait LifetimeTrait<'a, T>
201+
where T: 'a {
202+
fn return_value(&self, t: T) -> &'a T;
203+
}
204+
205+
static TEST_FLOAT: f32 = 1.0;
206+
207+
#[test]
208+
fn generics_and_lifetime() {
209+
let mut mock = MockLifetimeTrait::<'static, f32>::new();
210+
let method = mock.method_return_value()
211+
.called_once()
212+
.set_result(&TEST_FLOAT);
213+
214+
mock.set_return_value(method);
215+
assert!(mock.return_value(TEST_FLOAT.clone()) == &TEST_FLOAT);
216+
}
217+
218+
183219
```
184220

185221
## TESTING

tests/src/generics.rs

+19-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ trait GenericTrait<T, U, Z>
3333
}
3434
}
3535

36+
#[mock]
37+
trait GenericTraitForMerging<T, U>
38+
where T: Clone {
39+
fn merge(&self, t: T, u: U) -> U;
40+
}
41+
3642
#[mock]
3743
trait LifetimeTrait<'a, T>
3844
where T: 'a {
@@ -51,6 +57,18 @@ fn generic_test_one() {
5157
mock.mix_and_match(arg1, &arg2, &mut arg3);
5258
}
5359

60+
61+
#[test]
62+
fn generic_test_two() {
63+
let mut mock = MockGenericTraitForMerging::<f32, i32>::new();
64+
let method = mock.method_merge()
65+
.called_once()
66+
.set_result(30);
67+
68+
mock.set_merge(method);
69+
assert!(mock.merge(15.0, 15) == 30);
70+
}
71+
5472
#[allow(dead_code)]
5573
static TEST_FLOAT: f32 = 1.0;
5674

@@ -62,5 +80,5 @@ fn generics_and_lifetime() {
6280
.set_result(&TEST_FLOAT);
6381

6482
mock.set_return_value(method);
65-
mock.return_value(TEST_FLOAT.clone());
83+
assert!(mock.return_value(TEST_FLOAT.clone()) == &TEST_FLOAT);
6684
}

0 commit comments

Comments
 (0)