|
Packit |
f0b94e |
#![allow(dead_code)]
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[macro_use]
|
|
Packit |
f0b94e |
extern crate error_chain;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_1() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors { }
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_2() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors { }
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_3() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors { }
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_4() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code")
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_5() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code")
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_6() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code")
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_7() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code")
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn smoke_test_8() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
FileNotFound
|
|
Packit |
f0b94e |
AccessDenied
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_1() {
|
|
Packit |
f0b94e |
error_chain! { types { } links { } foreign_links { } errors { } };
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_2() {
|
|
Packit |
f0b94e |
error_chain! { links { } types { } foreign_links { } errors { } };
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_3() {
|
|
Packit |
f0b94e |
error_chain! { foreign_links { } links { } errors { } types { } };
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_4() {
|
|
Packit |
f0b94e |
error_chain! { errors { } types { } foreign_links { } };
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_5() {
|
|
Packit |
f0b94e |
error_chain! { foreign_links { } types { } };
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_6() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code")
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_7() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn order_test_8() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn empty() {
|
|
Packit |
f0b94e |
error_chain!{};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
#[cfg(feature = "backtrace")]
|
|
Packit |
f0b94e |
fn has_backtrace_depending_on_env() {
|
|
Packit |
f0b94e |
use std::process::Command;
|
|
Packit |
f0b94e |
use std::path::Path;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let cmd_path = if cfg!(windows) {
|
|
Packit |
f0b94e |
Path::new("./target/debug/has_backtrace.exe")
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
Path::new("./target/debug/has_backtrace")
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
let mut cmd = Command::new(cmd_path);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// missing RUST_BACKTRACE and RUST_BACKTRACE=0
|
|
Packit |
f0b94e |
cmd.env_remove("RUST_BACKTRACE");
|
|
Packit |
f0b94e |
assert_eq!(cmd.status().unwrap().code().unwrap(), 0);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
cmd.env("RUST_BACKTRACE", "0");
|
|
Packit |
f0b94e |
assert_eq!(cmd.status().unwrap().code().unwrap(), 0);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// RUST_BACKTRACE set to anything but 0
|
|
Packit |
f0b94e |
cmd.env("RUST_BACKTRACE", "yes");
|
|
Packit |
f0b94e |
assert_eq!(cmd.status().unwrap().code().unwrap(), 1);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
cmd.env("RUST_BACKTRACE", "1");
|
|
Packit |
f0b94e |
assert_eq!(cmd.status().unwrap().code().unwrap(), 1);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn chain_err() {
|
|
Packit |
f0b94e |
use std::fmt;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
foreign_links {
|
|
Packit |
f0b94e |
Fmt(fmt::Error);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
Test
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let _: Result<()> = Err(fmt::Error).chain_err(|| "");
|
|
Packit |
f0b94e |
let _: Result<()> = Err(Error::from_kind(ErrorKind::Test)).chain_err(|| "");
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
/// Verify that an error chain is extended one by `Error::chain_err`, with
|
|
Packit |
f0b94e |
/// the new error added to the end.
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn error_chain_err() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
Test
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let base = Error::from(ErrorKind::Test);
|
|
Packit |
f0b94e |
let ext = base.chain_err(|| "Test passes");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
if let Error(ErrorKind::Msg(_), _) = ext {
|
|
Packit |
f0b94e |
// pass
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
panic!("The error should be wrapped. {:?}", ext);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn links() {
|
|
Packit |
f0b94e |
mod test {
|
|
Packit |
f0b94e |
error_chain!{}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links {
|
|
Packit |
f0b94e |
Test(test::Error, test::ErrorKind);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[cfg(test)]
|
|
Packit |
f0b94e |
mod foreign_link_test {
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
use std::fmt;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Note: foreign errors must be `pub` because they appear in the
|
|
Packit |
f0b94e |
// signature of the public foreign_link_error_path
|
|
Packit |
f0b94e |
#[derive(Debug)]
|
|
Packit |
f0b94e |
pub struct ForeignError {
|
|
Packit |
f0b94e |
cause: ForeignErrorCause,
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
impl ::std::error::Error for ForeignError {
|
|
Packit |
f0b94e |
fn description(&self) -> &'static str {
|
|
Packit |
f0b94e |
"Foreign error description"
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn cause(&self) -> Option<&::std::error::Error> {
|
|
Packit |
f0b94e |
Some(&self.cause)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
impl fmt::Display for ForeignError {
|
|
Packit |
f0b94e |
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
Packit |
f0b94e |
write!(formatter, "Foreign error display")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[derive(Debug)]
|
|
Packit |
f0b94e |
pub struct ForeignErrorCause {}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
impl ::std::error::Error for ForeignErrorCause {
|
|
Packit |
f0b94e |
fn description(&self) -> &'static str {
|
|
Packit |
f0b94e |
"Foreign error cause description"
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn cause(&self) -> Option<&::std::error::Error> {
|
|
Packit |
f0b94e |
None
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
impl fmt::Display for ForeignErrorCause {
|
|
Packit |
f0b94e |
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
|
Packit |
f0b94e |
write!(formatter, "Foreign error cause display")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types{
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
links {}
|
|
Packit |
f0b94e |
foreign_links {
|
|
Packit |
f0b94e |
Foreign(ForeignError);
|
|
Packit |
f0b94e |
Io(::std::io::Error);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
errors {}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn display_underlying_error() {
|
|
Packit |
f0b94e |
let chained_error = try_foreign_error().err().unwrap();
|
|
Packit |
f0b94e |
assert_eq!(format!("{}", ForeignError { cause: ForeignErrorCause {} }),
|
|
Packit |
f0b94e |
format!("{}", chained_error));
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn finds_cause() {
|
|
Packit |
f0b94e |
let chained_error = try_foreign_error().err().unwrap();
|
|
Packit |
f0b94e |
assert_eq!(format!("{}", ForeignErrorCause {}),
|
|
Packit |
f0b94e |
format!("{}", ::std::error::Error::cause(&chained_error).unwrap()));
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn iterates() {
|
|
Packit |
f0b94e |
let chained_error = try_foreign_error().err().unwrap();
|
|
Packit |
f0b94e |
let mut error_iter = chained_error.iter();
|
|
Packit |
f0b94e |
assert!(!format!("{:?}", error_iter).is_empty());
|
|
Packit |
f0b94e |
assert_eq!(format!("{}", ForeignError { cause: ForeignErrorCause {} }),
|
|
Packit |
f0b94e |
format!("{}", error_iter.next().unwrap()));
|
|
Packit |
f0b94e |
assert_eq!(format!("{}", ForeignErrorCause {}),
|
|
Packit |
f0b94e |
format!("{}", error_iter.next().unwrap()));
|
|
Packit |
f0b94e |
assert_eq!(format!("{:?}", None as Option<&::std::error::Error>),
|
|
Packit |
f0b94e |
format!("{:?}", error_iter.next()));
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn try_foreign_error() -> Result<()> {
|
|
Packit |
f0b94e |
Err(ForeignError { cause: ForeignErrorCause {} })?;
|
|
Packit |
f0b94e |
Ok(())
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[cfg(test)]
|
|
Packit |
f0b94e |
mod attributes_test {
|
|
Packit |
f0b94e |
#[allow(unused_imports)]
|
|
Packit |
f0b94e |
use std::io;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[cfg(not(test))]
|
|
Packit |
f0b94e |
mod inner {
|
|
Packit |
f0b94e |
error_chain!{}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links {
|
|
Packit |
f0b94e |
Inner(inner::Error, inner::ErrorKind) #[cfg(not(test))];
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links {
|
|
Packit |
f0b94e |
Io(io::Error) #[cfg(not(test))];
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
#[cfg(not(test))]
|
|
Packit |
f0b94e |
AnError {
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn with_result() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt, Result;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
let _: Result<()> = Ok(());
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn without_result() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
Error, ErrorKind, ResultExt;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
let _: Result<(), ()> = Ok(());
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn documentation() {
|
|
Packit |
f0b94e |
mod inner {
|
|
Packit |
f0b94e |
error_chain!{}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links {
|
|
Packit |
f0b94e |
Inner(inner::Error, inner::ErrorKind) #[doc = "Doc"];
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
foreign_links {
|
|
Packit |
f0b94e |
Io(::std::io::Error) #[doc = "Doc"];
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
/// Doc
|
|
Packit |
f0b94e |
Variant
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[cfg(test)]
|
|
Packit |
f0b94e |
mod multiple_error_same_mod {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
MyError, MyErrorKind, MyResultExt, MyResult;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
error_chain!{}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[doc(test)]
|
|
Packit |
f0b94e |
#[deny(dead_code)]
|
|
Packit |
f0b94e |
mod allow_dead_code {
|
|
Packit |
f0b94e |
error_chain!{}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Make sure links actually work!
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn rustup_regression() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links {
|
|
Packit |
f0b94e |
Download(error_chain::mock::Error, error_chain::mock::ErrorKind);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
LocatingWorkingDir {
|
|
Packit |
f0b94e |
description("could not locate working directory")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn error_patterns() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors { }
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Tuples look nice when matching errors
|
|
Packit |
f0b94e |
match Error::from("Test") {
|
|
Packit |
f0b94e |
Error(ErrorKind::Msg(_), _) => {},
|
|
Packit |
f0b94e |
_ => {},
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn error_first() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
LocatingWorkingDir {
|
|
Packit |
f0b94e |
description("could not locate working directory")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
links {
|
|
Packit |
f0b94e |
Download(error_chain::mock::Error, error_chain::mock::ErrorKind);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn bail() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
errors { Foo }
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn foo() -> Result<()> {
|
|
Packit |
f0b94e |
bail!(ErrorKind::Foo)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn bar() -> Result<()> {
|
|
Packit |
f0b94e |
bail!("bar")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn baz() -> Result<()> {
|
|
Packit |
f0b94e |
bail!("{}", "baz")
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn ensure() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
errors { Bar }
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
fn foo(x: u8) -> Result<()> {
|
|
Packit |
f0b94e |
ensure!(x == 42, ErrorKind::Bar);
|
|
Packit |
f0b94e |
Ok(())
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
assert!(foo(42).is_ok());
|
|
Packit |
f0b94e |
assert!(foo(0).is_err());
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
/// Since the `types` declaration is a list of symbols, check if we
|
|
Packit |
f0b94e |
/// don't change their meaning or order.
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn types_declarations() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
MyError, MyErrorKind, MyResultExt, MyResult;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
MyError::from_kind(MyErrorKind::Msg("".into()));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let err: Result<(), ::std::io::Error> = Ok(());
|
|
Packit |
f0b94e |
MyResultExt::chain_err(err, || "").unwrap();
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let _: MyResult<()> = Ok(());
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
/// Calling chain_err over a `Result` containing an error to get a chained error
|
|
Packit |
f0b94e |
/// and constructing a MyError directly, passing it an error should be equivalent.
|
|
Packit |
f0b94e |
fn rewrapping() {
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
use std::env::VarError::{self, NotPresent, NotUnicode};
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
foreign_links {
|
|
Packit |
f0b94e |
VarErr(VarError);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
types {
|
|
Packit |
f0b94e |
MyError, MyErrorKind, MyResultExt, MyResult;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let result_a_from_func: Result<String, _> = Err(VarError::NotPresent);
|
|
Packit |
f0b94e |
let result_b_from_func: Result<String, _> = Err(VarError::NotPresent);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let our_error_a = result_a_from_func.map_err(|e| match e {
|
|
Packit |
f0b94e |
NotPresent => MyError::with_chain(e, "env var wasn't provided"),
|
|
Packit |
f0b94e |
NotUnicode(_) => MyError::with_chain(e, "env var was borkæ–‡å—化ã"),
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let our_error_b = result_b_from_func.or_else(|e| match e {
|
|
Packit |
f0b94e |
NotPresent => Err(e).chain_err(|| "env var wasn't provided"),
|
|
Packit |
f0b94e |
NotUnicode(_) => Err(e).chain_err(|| "env var was borkæ–‡å—化ã"),
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
assert_eq!(format!("{}", our_error_a.unwrap_err()),
|
|
Packit |
f0b94e |
format!("{}", our_error_b.unwrap_err()));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn comma_in_errors_impl() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code"),
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e)
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
#[test]
|
|
Packit |
f0b94e |
fn trailing_comma_in_errors_impl() {
|
|
Packit |
f0b94e |
error_chain! {
|
|
Packit |
f0b94e |
links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
foreign_links { }
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
errors {
|
|
Packit |
f0b94e |
HttpStatus(e: u32) {
|
|
Packit |
f0b94e |
description("http request returned an unsuccessful status code"),
|
|
Packit |
f0b94e |
display("http request returned an unsuccessful status code: {}", e),
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
}
|