95 lines
2.0 KiB
Rust
95 lines
2.0 KiB
Rust
use anyhow::{bail, Context, Result};
|
|
use std::io;
|
|
|
|
fn f() -> Result<()> {
|
|
bail!(io::Error::new(io::ErrorKind::PermissionDenied, "oh no!"));
|
|
}
|
|
|
|
fn g() -> Result<()> {
|
|
f().context("f failed")
|
|
}
|
|
|
|
fn h() -> Result<()> {
|
|
g().context("g failed")
|
|
}
|
|
|
|
const EXPECTED_ALTDISPLAY_F: &str = "oh no!";
|
|
|
|
const EXPECTED_ALTDISPLAY_G: &str = "f failed: oh no!";
|
|
|
|
const EXPECTED_ALTDISPLAY_H: &str = "g failed: f failed: oh no!";
|
|
|
|
const EXPECTED_DEBUG_F: &str = "oh no!";
|
|
|
|
const EXPECTED_DEBUG_G: &str = "\
|
|
f failed
|
|
|
|
Caused by:
|
|
oh no!\
|
|
";
|
|
|
|
const EXPECTED_DEBUG_H: &str = "\
|
|
g failed
|
|
|
|
Caused by:
|
|
0: f failed
|
|
1: oh no!\
|
|
";
|
|
|
|
const EXPECTED_ALTDEBUG_F: &str = "\
|
|
Custom {
|
|
kind: PermissionDenied,
|
|
error: \"oh no!\",
|
|
}\
|
|
";
|
|
|
|
const EXPECTED_ALTDEBUG_G: &str = "\
|
|
Error {
|
|
context: \"f failed\",
|
|
source: Custom {
|
|
kind: PermissionDenied,
|
|
error: \"oh no!\",
|
|
},
|
|
}\
|
|
";
|
|
|
|
const EXPECTED_ALTDEBUG_H: &str = "\
|
|
Error {
|
|
context: \"g failed\",
|
|
source: Error {
|
|
context: \"f failed\",
|
|
source: Custom {
|
|
kind: PermissionDenied,
|
|
error: \"oh no!\",
|
|
},
|
|
},
|
|
}\
|
|
";
|
|
|
|
#[test]
|
|
fn test_display() {
|
|
assert!(h().unwrap_err().to_string().starts_with("g failed"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_altdisplay() {
|
|
assert!(format!("{:#}", f().unwrap_err()).starts_with(EXPECTED_ALTDISPLAY_F));
|
|
assert!(format!("{:#}", g().unwrap_err()).starts_with(EXPECTED_ALTDISPLAY_G));
|
|
assert!(format!("{:#}", h().unwrap_err()).starts_with(EXPECTED_ALTDISPLAY_H));
|
|
}
|
|
|
|
#[test]
|
|
#[cfg_attr(not(backtrace), ignore)]
|
|
fn test_debug() {
|
|
assert!(format!("{:?}", f().unwrap_err()).starts_with(EXPECTED_DEBUG_F));
|
|
assert!(format!("{:?}", g().unwrap_err()).starts_with(EXPECTED_DEBUG_G));
|
|
assert!(format!("{:?}", h().unwrap_err()).starts_with(EXPECTED_DEBUG_H));
|
|
}
|
|
|
|
#[test]
|
|
fn test_altdebug() {
|
|
assert!(format!("{:#?}", f().unwrap_err()).starts_with(EXPECTED_ALTDEBUG_F));
|
|
assert!(format!("{:#?}", g().unwrap_err()).starts_with(EXPECTED_ALTDEBUG_G));
|
|
assert!(format!("{:#?}", h().unwrap_err()).starts_with(EXPECTED_ALTDEBUG_H));
|
|
}
|