mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-15 13:49:13 +00:00
65 lines
1.7 KiB
Rust
65 lines
1.7 KiB
Rust
extern crate failure;
|
|
#[macro_use]
|
|
extern crate failure_derive;
|
|
|
|
use failure::{Backtrace, Fail};
|
|
|
|
#[derive(Fail, Debug)]
|
|
#[fail(display = "Error code: {}", code)]
|
|
struct BacktraceError {
|
|
backtrace: Backtrace,
|
|
code: u32,
|
|
}
|
|
|
|
#[test]
|
|
fn backtrace_error() {
|
|
let err = BacktraceError {
|
|
backtrace: Backtrace::new(),
|
|
code: 7,
|
|
};
|
|
let s = format!("{}", err);
|
|
assert_eq!(&s[..], "Error code: 7");
|
|
assert!(err.backtrace().is_some());
|
|
}
|
|
|
|
#[derive(Fail, Debug)]
|
|
#[fail(display = "An error has occurred.")]
|
|
struct BacktraceTupleError(Backtrace);
|
|
|
|
#[test]
|
|
fn backtrace_tuple_error() {
|
|
let err = BacktraceTupleError(Backtrace::new());
|
|
let s = format!("{}", err);
|
|
assert_eq!(&s[..], "An error has occurred.");
|
|
assert!(err.backtrace().is_some());
|
|
}
|
|
|
|
#[derive(Fail, Debug)]
|
|
enum BacktraceEnumError {
|
|
#[fail(display = "Error code: {}", code)]
|
|
StructVariant { code: i32, backtrace: Backtrace },
|
|
#[fail(display = "Error: {}", _0)]
|
|
TupleVariant(&'static str, Backtrace),
|
|
#[fail(display = "An error has occurred.")]
|
|
UnitVariant,
|
|
}
|
|
|
|
#[test]
|
|
fn backtrace_enum_error() {
|
|
let err = BacktraceEnumError::StructVariant {
|
|
code: 2,
|
|
backtrace: Backtrace::new(),
|
|
};
|
|
let s = format!("{}", err);
|
|
assert_eq!(&s[..], "Error code: 2");
|
|
assert!(err.backtrace().is_some());
|
|
let err = BacktraceEnumError::TupleVariant("foobar", Backtrace::new());
|
|
let s = format!("{}", err);
|
|
assert_eq!(&s[..], "Error: foobar");
|
|
assert!(err.backtrace().is_some());
|
|
let err = BacktraceEnumError::UnitVariant;
|
|
let s = format!("{}", err);
|
|
assert_eq!(&s[..], "An error has occurred.");
|
|
assert!(err.backtrace().is_none());
|
|
}
|