#[macro_export]
macro_rules! assert_program_args_stderr_eq_x_as_result {
($a_program:expr, $a_args:expr, $b_expr:expr $(,)?) => {{
match ($a_program, $a_args, &$b_expr) {
(a_program, a_args, b_expr) => {
match assert_program_args_impl_prep!(a_program, a_args) {
Ok(a_output) => {
let a = a_output.stderr;
if a.eq(&$b_expr) {
Ok(a)
} else {
Err(
format!(
concat!(
"assertion failed: `assert_program_args_stderr_eq_x!(a_program, a_args, b_expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_program_args_stderr_eq_x.html\n",
" a_program label: `{}`,\n",
" a_program debug: `{:?}`,\n",
" a_args label: `{}`,\n",
" a_args debug: `{:?}`,\n",
" b_expr label: `{}`,\n",
" b_expr debug: `{:?}`,\n",
" a: `{:?}`,\n",
" b: `{:?}`"
),
stringify!($a_program),
a_program,
stringify!($a_args),
a_args,
stringify!($b_expr),
$b_expr,
a,
b_expr
)
)
}
},
Err(err) => {
Err(
format!(
concat!(
"assertion failed: `assert_program_args_stderr_eq_x!(a_program, a_args, b_expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_program_args_stderr_eq_x.html\n",
" a_program label: `{}`,\n",
" a_program debug: `{:?}`,\n",
" a_args label: `{}`,\n",
" a_args debug: `{:?}`,\n",
" b_expr label: `{}`,\n",
" b_expr debug: `{:?}`,\n",
" err: `{:?}`"
),
stringify!($a_program),
a_program,
stringify!($a_args),
a_args,
stringify!($b_expr),
$b_expr,
err
)
)
}
}
}
}
}};
}
#[cfg(test)]
mod tests {
#[test]
fn eq() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "alfa"];
let b = vec![b'a', b'l', b'f', b'a'];
let result = assert_program_args_stderr_eq_x_as_result!(&a_program, &a_args, b);
assert_eq!(result.unwrap(), vec![b'a', b'l', b'f', b'a']);
}
#[test]
fn lt() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "alfa"];
let b = vec![b'z', b'z'];
let result = assert_program_args_stderr_eq_x_as_result!(&a_program, &a_args, b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_program_args_stderr_eq_x!(a_program, a_args, b_expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_program_args_stderr_eq_x.html\n",
" a_program label: `&a_program`,\n",
" a_program debug: `\"bin/printf-stderr\"`,\n",
" a_args label: `&a_args`,\n",
" a_args debug: `[\"%s\", \"alfa\"]`,\n",
" b_expr label: `b`,\n",
" b_expr debug: `[122, 122]`,\n",
" a: `[97, 108, 102, 97]`,\n",
" b: `[122, 122]`");
assert_eq!(actual, expect);
}
#[test]
fn gt() {
let a_program = "bin/printf-stderr";
let a_args = ["%s", "alfa"];
let b = vec![b'a', b'a'];
let result = assert_program_args_stderr_eq_x_as_result!(&a_program, &a_args, b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_program_args_stderr_eq_x!(a_program, a_args, b_expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_program_args_stderr_eq_x.html\n",
" a_program label: `&a_program`,\n",
" a_program debug: `\"bin/printf-stderr\"`,\n",
" a_args label: `&a_args`,\n",
" a_args debug: `[\"%s\", \"alfa\"]`,\n",
" b_expr label: `b`,\n",
" b_expr debug: `[97, 97]`,\n",
" a: `[97, 108, 102, 97]`,\n",
" b: `[97, 97]`");
assert_eq!(actual, expect);
}
}
#[macro_export]
macro_rules! assert_program_args_stderr_eq_x {
($a_program:expr, $a_args:expr, $b_expr:expr $(,)?) => {{
match $crate::assert_program_args_stderr_eq_x_as_result!($a_program, $a_args, $b_expr) {
Ok(x) => x,
Err(err) => panic!("{}", err),
}
}};
($a_program:expr, $a_args:expr, $b_expr:expr, $($message:tt)+) => {{
match $crate::assert_program_args_stderr_eq_x_as_result!($a_program, $a_args, $b_expr) {
Ok(x) => x,
Err(_err) => panic!("{}", $($message)+),
}
}};
}
#[macro_export]
macro_rules! debug_assert_program_args_stderr_eq_x {
($($arg:tt)*) => {
if $crate::cfg!(debug_assertions) {
$crate::assert_program_args_stderr_eq_x!($($arg)*);
}
};
}