mry 0.14.0

A simple but powerful mocking library that supports struct, trait, and function.
Documentation
#[mry::mry]
struct Struct {}

#[mry::mry]
impl Struct {
    fn takes_slice(&self, value: &[String]) -> usize {
        value.iter().map(|i| i.len()).sum()
    }

    fn takes_slice_str(&self, value: &[&str]) -> usize {
        value.iter().map(|i| i.len()).sum()
    }
}

#[test]
fn takes_slice_any() {
    let mut target = mry::new!(Struct {});
    let mock = target.mock_takes_slice(mry::Any).returns(1);

    assert_eq!(target.takes_slice(&["first arg".to_string()]), 1);
    mock.assert_called(1);
}

#[test]
fn takes_slice_original_type_ok() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice(&["first arg".to_string(), "second arg".to_string()][..])
        .returns(1);

    assert_eq!(
        target.takes_slice(&["first arg".to_string(), "second arg".to_string()]),
        1
    );
    mock.assert_called(1);
}

#[test]
fn takes_slice_but_ref_of_array() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice(&["first arg".to_string(), "second arg".to_string()])
        .returns(1);

    assert_eq!(
        target.takes_slice(&["first arg".to_string(), "second arg".to_string()]),
        1
    );
    mock.assert_called(1);
}

#[should_panic(expected = "mock not found for Struct::takes_slice")]
#[test]
fn takes_slice_original_type_ko() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice(&["first arg".to_string(), "second arg".to_string()][..])
        .returns(1);

    assert_eq!(
        target.takes_slice(&["first arg".to_string(), "wrong value".to_string()]),
        1
    );
    mock.assert_called(1);
}

#[test]
fn takes_slice_str_any() {
    let mut target = mry::new!(Struct {});
    let mock = target.mock_takes_slice_str(mry::Any).returns(1);

    assert_eq!(target.takes_slice_str(&["first arg"]), 1);
    mock.assert_called(1);
}

#[test]
fn takes_slice_str_original_type_ok() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice_str(&["first arg", "second arg"][..])
        .returns(1);

    assert_eq!(target.takes_slice_str(&["first arg", "second arg"]), 1);
    mock.assert_called(1);
}

#[test]
fn takes_slice_str_original_type_ok_array() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice_str(["first arg", "second arg"])
        .returns(1);

    assert_eq!(target.takes_slice_str(&["first arg", "second arg"]), 1);
    mock.assert_called(1);
}

#[should_panic]
#[test]
fn takes_slice_str_original_type_ko() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice_str(&["first arg", "second arg"][..])
        .returns(1);

    assert_eq!(target.takes_slice_str(&["first arg", "wrong value"]), 1);
    mock.assert_called(1);
}

#[should_panic]
#[test]
fn takes_slice_str_original_type_wrong_length() {
    let mut target = mry::new!(Struct {});
    let mock = target
        .mock_takes_slice_str(&["first arg", "second arg"][..])
        .returns(1);

    assert_eq!(target.takes_slice_str(&["first arg"]), 1);
    mock.assert_called(1);
}