mirror of
https://github.com/haraldh/chainerror.git
synced 2025-05-28 20:58:07 +02:00
add ChainError Iterator
This commit is contained in:
parent
49515b86f9
commit
d14af67560
2 changed files with 91 additions and 27 deletions
66
tests/test_iter.rs
Normal file
66
tests/test_iter.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
use chainerror::*;
|
||||
use std::error::Error;
|
||||
use std::fmt::Write;
|
||||
use std::io;
|
||||
|
||||
#[test]
|
||||
fn test_iter() -> Result<(), Box<Error>> {
|
||||
let err = io::Error::from(io::ErrorKind::NotFound);
|
||||
let err = cherr!(err, "1");
|
||||
let err = cherr!(err, "2");
|
||||
let err = cherr!(err, "3");
|
||||
let err = cherr!(err, "4");
|
||||
let err = cherr!(err, "5");
|
||||
let err = cherr!(err, "6");
|
||||
|
||||
let mut res = String::new();
|
||||
|
||||
for e in err.iter() {
|
||||
write!(res, "{}", e.to_string())?;
|
||||
}
|
||||
assert_eq!(res, "654321entity not found");
|
||||
|
||||
let io_error: Option<&io::Error> = err
|
||||
.iter()
|
||||
.filter_map(Error::downcast_ref::<io::Error>)
|
||||
.next();
|
||||
|
||||
assert_eq!(io_error.unwrap().kind(), io::ErrorKind::NotFound);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_find_cause() -> Result<(), Box<Error>> {
|
||||
let err = io::Error::from(io::ErrorKind::NotFound);
|
||||
let err = cherr!(err, "1");
|
||||
let err = cherr!(err, "2");
|
||||
let err = cherr!(err, "3");
|
||||
let err = cherr!(err, "4");
|
||||
let err = cherr!(err, "5");
|
||||
let err = cherr!(err, "6");
|
||||
|
||||
let io_error: Option<&io::Error> = err.find_cause::<io::Error>();
|
||||
|
||||
assert_eq!(io_error.unwrap().kind(), io::ErrorKind::NotFound);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_root_cause() -> Result<(), Box<Error>> {
|
||||
let err = io::Error::from(io::ErrorKind::NotFound);
|
||||
let err = cherr!(err, "1");
|
||||
let err = cherr!(err, "2");
|
||||
let err = cherr!(err, "3");
|
||||
let err = cherr!(err, "4");
|
||||
let err = cherr!(err, "5");
|
||||
let err = cherr!(err, "6");
|
||||
|
||||
let err: Option<&(dyn std::error::Error + 'static)> = err.root_cause();
|
||||
let io_error: Option<&io::Error> = err.and_then(Error::downcast_ref::<io::Error>);
|
||||
|
||||
assert_eq!(io_error.unwrap().kind(), io::ErrorKind::NotFound);
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue