A simple mocking library.
Status: Totally not implemented yet.
struct Cat {
name: String,
}#[mry2::trait(Cat)]
impl Cat {
fn meow(&self) -> String {
format!("{}: meow", self.name)
}
}struct CatObj(CatObjInner);
impl CatObj {
pub fn new(cat: impl CatInterface) -> Self {
CatObj(CatObjInner::Dyn(Box::new(cat)))
}
}
struct CatObjInner {
Real(Cat),
Dyn(Box<dyn Cat>),
}
trait CatInterface {
fn meow(&self) -> String;
}
impl Cat {
fn meow(&self) -> String {
format!("{}: meow", self.name)
}
}
impl CatInterface for CatObj {
fn meow(&self) -> String {
match self.0 {
CatObjInner::Real(cat) => cat.meow(),
CatObjInner::Dyn(cat) => cat.meow(),
}
}
}
impl IntoObject for Cat {
type Object = CatObj;
fn obj(self) -> Self::Object {
CatObj(CatObjInner::Real(self))
}
}
#[derive(Clone, Default)]
struct MockCat { /* hidden */ };
impl CatInterface for MockCat {
fn meow(&self) -> String {
/* hidden */
}
}
impl IntoObject for MockCat {
type Object = CatObj;
fn obj(self) -> Self::Object {
CatObj(CatObjInner::Dyn(Box::new(self)))
}
}fn a_function_to_test(cat: CatObj) {
cat.meow();
}let mut mock_cat = MockCat::default();
/* set expectations on mock_cat */
a_function_to_test(mock_cat.obj());