#[macro_export]
macro_rules! assert_command_stderr_lt_x_as_result {
($a_command:expr, $b_expr:expr $(,)?) => {{
match ( &$b_expr) {
b => {
match $a_command.output() {
Ok(a) => {
let a = a.stderr;
if a.lt(&$b_expr) {
Ok(a)
} else {
Err(
format!(
concat!(
"assertion failed: `assert_command_stderr_lt_x!(command, expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_command_stderr_lt_x.html\n",
" command label: `{}`,\n",
" command debug: `{:?}`,\n",
" expr label: `{}`,\n",
" expr debug: `{:?}`,\n",
" command value: `{:?}`,\n",
" expr value: `{:?}`"
),
stringify!($a_command),
$a_command,
stringify!($b_expr),
$b_expr,
a,
b
)
)
}
},
Err(err) => {
Err(
format!(
concat!(
"assertion failed: `assert_command_stderr_lt_x!(command, expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_command_stderr_lt_x.html\n",
" command label: `{}`,\n",
" command debug: `{:?}`,\n",
" expr label: `{}`,\n",
" expr debug: `{:?}`,\n",
" output is err: `{:?}`"
),
stringify!($a_command),
$a_command,
stringify!($b_expr),
b,
err
)
)
}
}
}
}
}};
}
#[cfg(test)]
mod tests {
use std::process::Command;
#[test]
fn lt() {
let mut a = Command::new("bin/printf-stderr");
a.args(["%s", "alfa"]);
let b = vec![b'z', b'z'];
let result = assert_command_stderr_lt_x_as_result!(a, b);
assert_eq!(result.unwrap(), vec![b'a', b'l', b'f', b'a']);
}
#[test]
fn eq() {
let mut a = Command::new("bin/printf-stderr");
a.args(["%s", "alfa"]);
let b = vec![b'a', b'l', b'f', b'a'];
let result = assert_command_stderr_lt_x_as_result!(a, b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_command_stderr_lt_x!(command, expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_command_stderr_lt_x.html\n",
" command label: `a`,\n",
" command debug: `\"bin/printf-stderr\" \"%s\" \"alfa\"`,\n",
" expr label: `b`,\n",
" expr debug: `[97, 108, 102, 97]`,\n",
" command value: `[97, 108, 102, 97]`,\n",
" expr value: `[97, 108, 102, 97]`"
);
assert_eq!(actual, expect);
}
#[test]
fn gt() {
let mut a = Command::new("bin/printf-stderr");
a.args(["%s", "alfa"]);
let b = vec![b'a', b'a'];
let result = assert_command_stderr_lt_x_as_result!(a, b);
let actual = result.unwrap_err();
let expect = concat!(
"assertion failed: `assert_command_stderr_lt_x!(command, expr)`\n",
"https://docs.rs/assertables/9.1.0/assertables/macro.assert_command_stderr_lt_x.html\n",
" command label: `a`,\n",
" command debug: `\"bin/printf-stderr\" \"%s\" \"alfa\"`,\n",
" expr label: `b`,\n",
" expr debug: `[97, 97]`,\n",
" command value: `[97, 108, 102, 97]`,\n",
" expr value: `[97, 97]`"
);
assert_eq!(actual, expect);
}
}
#[macro_export]
macro_rules! assert_command_stderr_lt_x {
($a_command:expr, $b_expr:expr $(,)?) => {{
match $crate::assert_command_stderr_lt_x_as_result!($a_command, $b_expr) {
Ok(x) => x,
Err(err) => panic!("{}", err),
}
}};
($a_command:expr, $b_expr:expr, $($message:tt)+) => {{
match $crate::assert_command_stderr_lt_x_as_result!($a_command, $b_expr) {
Ok(x) => x,
Err(_err) => panic!("{}", $($message)+),
}
}};
}
#[macro_export]
macro_rules! debug_assert_command_stderr_lt_x {
($($arg:tt)*) => {
if $crate::cfg!(debug_assertions) {
$crate::assert_command_stderr_lt_x!($($arg)*);
}
};
}