mockiato 0.9.5

A strict, yet friendly mocking library for Rust 2018
Documentation
use mockiato::mockable;
#[cfg(rustc_is_nightly)]
use mockiato::Argument;

#[derive(Debug, PartialEq)]
struct Person {
    name: String,
    age: u8,
}

#[mockable]
trait Greeter {
    fn greet(&self, person: Person) -> String;

    fn greet_ref(&self, person: &Person) -> String;
}

#[cfg(rustc_is_nightly)]
#[test]
fn partial_eq_matcher_has_display_output() {
    let factory = Argument::internal_new();
    let matcher = factory.partial_eq(Person {
        name: "Name".into(),
        age: 30,
    });

    assert_eq!(
        r#"Person { name: "Name", age: 30 }"#,
        format!("{}", matcher)
    );
}

#[cfg(rustc_is_nightly)]
#[test]
#[should_panic(
    expected = "The expected calls for GreeterMock::greet were not satisified.
greet(Person { name: \"Name\", age: 30 }) -> \"Hello Name\" exactly 2 times, was called 0 times"
)]
fn partial_eq_matcher_has_display_output_when_printed_as_expected_call() {
    let mut greeter = GreeterMock::new();
    greeter
        .expect_greet(|f| {
            f.partial_eq(Person {
                name: "Name".into(),
                age: 30,
            })
        })
        .times(2)
        .returns(String::from("Hello Name"));
}

#[cfg(rustc_is_nightly)]
#[test]
#[should_panic(
    expected = "The expected calls for GreeterMock::greet_ref were not satisified.
greet_ref(Person { name: \"Name\", age: 30 }) -> \"Hello Name\" exactly 2 times, was called 0 times"
)]
fn partial_eq_matcher_has_display_output_for_reference_when_printed_as_expected_call_with() {
    let person = Person {
        name: "Name".into(),
        age: 30,
    };
    let mut greeter = GreeterMock::new();
    greeter
        .expect_greet_ref(|arg| arg.partial_eq(&person))
        .times(2)
        .returns(String::from("Hello Name"));
}