diff --git a/src/mock_store.rs b/src/mock_store.rs index 3415af6..d05e6ec 100644 --- a/src/mock_store.rs +++ b/src/mock_store.rs @@ -26,7 +26,7 @@ use std::{ /// implements_default(faux::MaybeFaux::Real(3)); /// ``` -#[derive(Debug)] +#[derive(Clone, Debug)] pub enum MaybeFaux { Real(T), Faux(MockStore), @@ -38,31 +38,22 @@ impl Default for MaybeFaux { } } -impl Clone for MaybeFaux { - fn clone(&self) -> Self { - match self { - MaybeFaux::Real(r) => MaybeFaux::Real(r.clone()), - MaybeFaux::Faux(_) => panic!("cannot clone a mock"), - } - } -} - impl MaybeFaux { pub fn faux() -> Self { MaybeFaux::Faux(MockStore::new()) } } -#[derive(Debug, Default)] +#[derive(Clone, Debug, Default)] #[doc(hidden)] pub struct MockStore { - stubs: Mutex>>>>>, + stubs: Arc>>>>>>, } impl MockStore { fn new() -> Self { MockStore { - stubs: Mutex::new(HashMap::new()), + stubs: Arc::new(Mutex::new(HashMap::new())), } } diff --git a/tests/clone.rs b/tests/clone.rs index 10402e4..20f2785 100644 --- a/tests/clone.rs +++ b/tests/clone.rs @@ -25,8 +25,9 @@ fn can_clone_real() { } #[test] -#[should_panic] -fn cloning_mock_panics() { - let real = Foo::faux(); - let _ = real.clone(); +fn can_clone_mock() { + let mut mock = Foo::faux(); + let cloned = mock.clone(); + faux::when!(mock.get()).then_return(4); + assert_eq!(cloned.get(), 4); }