#![cfg_attr(coverage_nightly, coverage(off))]
#[macro_export]
macro_rules! assert_error_message {
($error:expr, $expected:expr) => {{
let error_string = $error.to_string();
let expected: &str = $expected;
let test = move || {
if error_string == expected {
return ();
}
if let Some(remainder) = error_string.strip_prefix(expected) {
if remainder.starts_with("\n\nBacktrace:\n") || remainder.starts_with("\ncaused by: ") || remainder.starts_with("\n> ") {
return ();
}
}
panic!("left : {expected}\nright: {error_string}");
};
test();
}};
}
#[cfg(test)]
mod tests {
use crate::OhnoCore;
use crate::backtrace::Backtrace;
#[derive(crate::Error)]
struct MyTestError {
inner: OhnoCore,
}
#[test]
fn test_assert_error_message_exact_match() {
let error = MyTestError::caused_by("test message");
assert_error_message!(error, "test message");
}
#[test]
fn test_assert_error_message_with_backtrace() {
let mut error = MyTestError::caused_by("test message");
error.inner.data.backtrace = Backtrace::disabled();
assert_error_message!(error, "test message");
}
#[test]
#[should_panic(expected = "left : expected message\nright: actual message")]
fn test_assert_error_message_mismatch() {
let error = MyTestError::caused_by("actual message");
assert_error_message!(error, "expected message");
}
}