1extern crate simulacrum;
14
15use simulacrum::*;
16
17trait CoolTrait {
18 fn foo(&self);
20
21 fn bar(&mut self);
23
24 fn goop(&mut self, flag: bool) -> u32;
26
27 fn zing(&self, first: i32, second: bool);
29
30 fn boop(&self, name: &'static str);
32
33 fn store(&self, val: &i64);
35
36 fn toggle(&self, bit: &mut bool);
38}
39
40create_mock_struct! {
41 struct CoolTraitMock: {
42 expect_foo("foo");
43 expect_bar("bar");
44 expect_goop("goop") bool => u32;
45 expect_zing("zing") (i32, bool);
46 expect_boop("boop") &'static str;
47 expect_store("store") *const i64;
48 expect_toggle("toggle") *mut bool;
49 }
50}
51
52impl CoolTrait for CoolTraitMock {
53 fn foo(&self) {
54 was_called!(self, "foo")
55 }
56
57 fn bar(&mut self) {
58 was_called!(self, "bar")
59 }
60
61 fn goop(&mut self, flag: bool) -> u32 {
62 was_called!(self, "goop", (flag: bool) -> u32)
63 }
64
65 fn zing(&self, first: i32, second: bool) {
66 was_called!(self, "zing", (first: i32, second: bool))
67 }
68
69 fn boop(&self, name: &'static str) {
70 was_called!(self, "boop", (name: &'static str))
71 }
72
73 fn store(&self, val: &i64) {
74 was_called!(self, "store", (val: *const i64))
75 }
76
77 fn toggle(&self, bit: &mut bool) {
78 was_called!(self, "toggle", (bit: *mut bool))
79 }
80}
81
82fn main() {
83 let mut m = CoolTraitMock::new();
85
86 m.expect_bar().called_never();
88 m.expect_foo().called_once();
89 m.then().expect_goop().called_once().with(true).returning(|_| 5);
90 m.then().expect_zing().called_once().with(params!(13, false));
91 m.expect_boop().called_times(2);
92 m.expect_store().called_once().with(deref(777));
93 m.expect_toggle().called_once().with(deref(true))
94 .modifying(|&mut arg| { unsafe { *arg = false } });
95
96 m.foo();
98 assert_eq!(m.goop(true), 5);
99 m.zing(13, false);
100 m.boop("hey");
101 m.boop("yo");
102 m.store(&777);
103 let mut b = true;
104 m.toggle(&mut b);
105 assert_eq!(b, false);
106
107 }