#[macro_export]
macro_rules! assert_contains_as_result {
($container:expr, $containee:expr $(,)?) => {{
match (&$container, &$containee) {
(container, containee) => {
if container.contains($containee) {
Ok(())
} else {
Err(
format!(
concat!(
"assertion failed: `assert_contains!(container, containee)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_contains.html\n",
" container label: `{}`,\n",
" container debug: `{:?}`,\n",
" containee label: `{}`,\n",
" containee debug: `{:?}`",
),
stringify!($container),
container,
stringify!($containee),
containee,
)
)
}
}
}
}};
}
#[cfg(test)]
mod tests {
mod str {
#[test]
fn success() {
let a = "alfa";
let b = "lf";
let result = assert_contains_as_result!(a, b);
assert_eq!(result.unwrap(), ());
}
#[test]
fn failure() {
let a: &str = "alfa";
let b = "zz";
let result = assert_contains_as_result!(a, b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_contains!(container, containee)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_contains.html\n",
" container label: `a`,\n",
" container debug: `\"alfa\"`,\n",
" containee label: `b`,\n",
" containee debug: `\"zz\"`"
);
assert_eq!(actual, expect);
}
}
mod range {
#[test]
fn success() {
let a = 1..3;
let b = 2;
let result = assert_contains_as_result!(a, &b);
assert_eq!(result.unwrap(), ());
}
#[test]
fn failure() {
let a = 1..3;
let b = 4;
let result = assert_contains_as_result!(a, &b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_contains!(container, containee)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_contains.html\n",
" container label: `a`,\n",
" container debug: `1..3`,\n",
" containee label: `&b`,\n",
" containee debug: `4`"
);
assert_eq!(actual, expect);
}
}
mod vec {
#[test]
fn success() {
let a = 1..3;
let b = 2;
let result = assert_contains_as_result!(a, &b);
assert_eq!(result.unwrap(), ());
}
#[test]
fn failure() {
let a = vec![1, 2, 3];
let b = 4;
let result = assert_contains_as_result!(a, &b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_contains!(container, containee)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_contains.html\n",
" container label: `a`,\n",
" container debug: `[1, 2, 3]`,\n",
" containee label: `&b`,\n",
" containee debug: `4`"
);
assert_eq!(actual, expect);
}
}
}
#[macro_export]
macro_rules! assert_contains {
($container:expr, $containee:expr $(,)?) => {{
match $crate::assert_contains_as_result!($container, $containee) {
Ok(()) => (),
Err(err) => panic!("{}", err),
}
}};
($container:expr, $containee:expr, $($message:tt)+) => {{
match $crate::assert_contains_as_result!($container, $containee) {
Ok(()) => (),
Err(_err) => panic!("{}", $($message)+),
}
}};
}
#[macro_export]
macro_rules! debug_assert_contains {
($($arg:tt)*) => {
if $crate::cfg!(debug_assertions) {
$crate::assert_contains!($($arg)*);
}
};
}