blob: d0789d645f01371cd661c41af5ead7a36de7313c [file] [log] [blame]
// vim: tw=80
//! A method whose argument is a common `Deref` implementor
#![deny(warnings)]
use mockall::*;
use std::{
ffi::{CStr, CString, OsStr, OsString},
path::{Path, PathBuf},
};
mock! {
Foo {
fn foo<T: 'static>(&self, x: Vec<T>);
fn bar(&self, x: String);
fn baz(&self, x: CString);
fn bean(&self, x: OsString);
fn boom(&self, x: PathBuf);
}
}
mod with {
use super::*;
#[test]
fn cstr() {
let mut mock = MockFoo::new();
mock.expect_baz()
.with(predicate::eq(CString::new("xxx").unwrap()))
.return_const(());
mock.baz(CString::new("xxx").unwrap());
}
#[test]
fn osstr() {
let mut mock = MockFoo::new();
mock.expect_bean()
.with(predicate::eq(OsStr::new("xxx").to_owned()))
.return_const(());
mock.bean(OsString::from("xxx"));
}
#[test]
fn path() {
let mut mock = MockFoo::new();
mock.expect_boom()
.with(predicate::eq(Path::new("dir/file").to_owned()))
.return_const(());
mock.boom(PathBuf::from("dir/file"));
}
#[test]
fn string() {
let mut mock = MockFoo::new();
mock.expect_bar()
.with(predicate::eq("xxx".to_owned()))
.return_const(());
mock.bar(String::from("xxx"));
}
#[test]
fn vec() {
let mut mock = MockFoo::new();
mock.expect_foo::<i32>()
.with(predicate::eq(vec![1, 2, 3]))
.return_const(());
mock.foo(vec![1, 2, 3]);
}
}
mod withf {
use super::*;
#[test]
fn cstr() {
let mut mock = MockFoo::new();
const WANT: [u8; 4] = [120u8, 120, 120, 0];
let want = CStr::from_bytes_with_nul(&WANT[..]).unwrap();
mock.expect_baz()
.withf(move |s| s.as_c_str() == want)
.return_const(());
mock.baz(CString::new("xxx").unwrap());
}
#[test]
fn osstr() {
let mut mock = MockFoo::new();
mock.expect_bean()
.withf(move |s| s.as_os_str() == OsStr::new("xxx"))
.return_const(());
mock.bean(OsString::from("xxx"));
}
#[test]
fn path() {
let mut mock = MockFoo::new();
mock.expect_boom()
.withf(move |s| s.as_path() == Path::new("dir/file"))
.return_const(());
mock.boom(PathBuf::from("dir/file"));
}
#[test]
fn string() {
let mut mock = MockFoo::new();
mock.expect_bar()
.withf(|sl: &String| sl == "xxx")
.return_const(());
mock.bar(String::from("xxx"));
}
#[test]
fn vec() {
let mut mock = MockFoo::new();
mock.expect_foo::<i32>()
.withf(|sl: &Vec<i32>| sl == &[1, 2, 3])
.return_const(());
mock.foo(vec![1, 2, 3]);
}
}