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_eq!("g failed" , h().unwrap_err().to_string());
}
#[ test]
fn test_altdisplay() {
assert_eq!(EXPECTED_ALTDISPLAY_F, format!("{:#}" , f().unwrap_err()));
assert_eq!(EXPECTED_ALTDISPLAY_G, format!("{:#}" , g().unwrap_err()));
assert_eq!(EXPECTED_ALTDISPLAY_H, format!("{:#}" , h().unwrap_err()));
}
#[ test]
#[ cfg_attr(not(backtrace), ignore)]
fn test_debug() {
assert_eq!(EXPECTED_DEBUG_F, format!("{:?}" , f().unwrap_err()));
assert_eq!(EXPECTED_DEBUG_G, format!("{:?}" , g().unwrap_err()));
assert_eq!(EXPECTED_DEBUG_H, format!("{:?}" , h().unwrap_err()));
}
#[ test]
fn test_altdebug() {
assert_eq!(EXPECTED_ALTDEBUG_F, format!("{:#?}" , f().unwrap_err()));
assert_eq!(EXPECTED_ALTDEBUG_G, format!("{:#?}" , g().unwrap_err()));
assert_eq!(EXPECTED_ALTDEBUG_H, format!("{:#?}" , h().unwrap_err()));
}
Messung V0.5 in Prozent C=88 H=87 G=87
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-19)
¤
*© Formatika GbR, Deutschland