summaryrefslogtreecommitdiffstats
path: root/third_party/rust/failure_derive/tests/wraps.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/failure_derive/tests/wraps.rs')
-rw-r--r--third_party/rust/failure_derive/tests/wraps.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/third_party/rust/failure_derive/tests/wraps.rs b/third_party/rust/failure_derive/tests/wraps.rs
new file mode 100644
index 0000000000..9144325cad
--- /dev/null
+++ b/third_party/rust/failure_derive/tests/wraps.rs
@@ -0,0 +1,98 @@
+extern crate failure;
+#[macro_use]
+extern crate failure_derive;
+
+use std::fmt;
+use std::io;
+
+use failure::{Backtrace, Fail};
+
+#[derive(Fail, Debug)]
+#[fail(display = "An error has occurred: {}", inner)]
+struct WrapError {
+ #[fail(cause)]
+ inner: io::Error,
+}
+
+#[test]
+fn wrap_error() {
+ let inner = io::Error::from_raw_os_error(98);
+ let err = WrapError { inner };
+ assert!(err
+ .cause()
+ .and_then(|err| err.downcast_ref::<io::Error>())
+ .is_some());
+}
+
+#[derive(Fail, Debug)]
+#[fail(display = "An error has occurred: {}", _0)]
+struct WrapTupleError(#[fail(cause)] io::Error);
+
+#[test]
+fn wrap_tuple_error() {
+ let io_error = io::Error::from_raw_os_error(98);
+ let err: WrapTupleError = WrapTupleError(io_error);
+ assert!(err
+ .cause()
+ .and_then(|err| err.downcast_ref::<io::Error>())
+ .is_some());
+}
+
+#[derive(Fail, Debug)]
+#[fail(display = "An error has occurred: {}", inner)]
+struct WrapBacktraceError {
+ #[fail(cause)]
+ inner: io::Error,
+ backtrace: Backtrace,
+}
+
+#[test]
+fn wrap_backtrace_error() {
+ let inner = io::Error::from_raw_os_error(98);
+ let err: WrapBacktraceError = WrapBacktraceError {
+ inner,
+ backtrace: Backtrace::new(),
+ };
+ assert!(err
+ .cause()
+ .and_then(|err| err.downcast_ref::<io::Error>())
+ .is_some());
+ assert!(err.backtrace().is_some());
+ assert!(err.backtrace().unwrap().is_empty());
+ assert!(err.backtrace().unwrap().to_string().trim().is_empty());
+}
+
+#[derive(Fail, Debug)]
+enum WrapEnumError {
+ #[fail(display = "An error has occurred: {}", _0)]
+ Io(#[fail(cause)] io::Error),
+ #[fail(display = "An error has occurred: {}", inner)]
+ Fmt {
+ #[fail(cause)]
+ inner: fmt::Error,
+ backtrace: Backtrace,
+ },
+}
+
+#[test]
+fn wrap_enum_error() {
+ let io_error = io::Error::from_raw_os_error(98);
+ let err: WrapEnumError = WrapEnumError::Io(io_error);
+ assert!(err
+ .cause()
+ .and_then(|err| err.downcast_ref::<io::Error>())
+ .is_some());
+ assert!(err.backtrace().is_none());
+ let fmt_error = fmt::Error::default();
+ let err: WrapEnumError = WrapEnumError::Fmt {
+ inner: fmt_error,
+ backtrace: Backtrace::new(),
+ };
+ assert!(err
+ .cause()
+ .and_then(|err| err.downcast_ref::<fmt::Error>())
+ .is_some());
+ assert!(err.backtrace().is_some());
+ assert!(err.backtrace().unwrap().is_empty());
+ assert!(err.backtrace().unwrap().to_string().trim().is_empty());
+}