diff --git a/tests/test_transparent.rs b/tests/test_transparent.rs index ee30f5b..c458e6b 100644 --- a/tests/test_transparent.rs +++ b/tests/test_transparent.rs @@ -63,6 +63,37 @@ fn test_transparent_enum_with_default_message() { assert_eq!("inner", error.source().unwrap().to_string()); } +#[test] +fn test_transparent_enum_generic() { + #[derive(Error, Debug)] + enum Error { + #[error("this failed")] + This, + #[error(transparent)] + Other(E), + } + + #[derive(Error, Debug)] + #[error("inner error")] + struct Inner; + + let error = Error::::This; + assert_eq!("this failed", error.to_string()); + + let error = Error::Other(Inner); + assert_eq!("inner error", error.to_string()); + assert!(error.source().is_none()); + + #[derive(Error, Debug)] + #[error("wrapped")] + struct WithSource(#[source] io::Error); + + let io = io::Error::new(io::ErrorKind::Other, "oh no!"); + let error = Error::Other(WithSource(io)); + assert_eq!("wrapped", error.to_string()); + assert_eq!("oh no!", error.source().unwrap().to_string()); +} + #[test] fn test_anyhow() { #[derive(Error, Debug)]