aboutsummaryrefslogtreecommitdiff
path: root/tests/test_backtrace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_backtrace.rs')
-rw-r--r--tests/test_backtrace.rs39
1 files changed, 37 insertions, 2 deletions
diff --git a/tests/test_backtrace.rs b/tests/test_backtrace.rs
index 09bc13d..42e37ca 100644
--- a/tests/test_backtrace.rs
+++ b/tests/test_backtrace.rs
@@ -7,8 +7,15 @@ use thiserror::Error;
pub struct Inner;
#[cfg(thiserror_nightly_testing)]
+#[derive(Error, Debug)]
+#[error("...")]
+pub struct InnerBacktrace {
+ backtrace: std::backtrace::Backtrace,
+}
+
+#[cfg(thiserror_nightly_testing)]
pub mod structs {
- use super::Inner;
+ use super::{Inner, InnerBacktrace};
use std::backtrace::Backtrace;
use std::error::Error;
use std::sync::Arc;
@@ -52,6 +59,14 @@ pub mod structs {
#[derive(Error, Debug)]
#[error("...")]
+ pub struct CombinedBacktraceFrom {
+ #[from]
+ #[backtrace]
+ source: InnerBacktrace,
+ }
+
+ #[derive(Error, Debug)]
+ #[error("...")]
pub struct OptBacktraceFrom {
#[from]
source: Inner,
@@ -93,6 +108,11 @@ pub mod structs {
let error = BacktraceFrom::from(Inner);
assert!(error.backtrace().is_some());
+ let error = CombinedBacktraceFrom::from(InnerBacktrace {
+ backtrace: Backtrace::capture(),
+ });
+ assert!(error.backtrace().is_some());
+
let error = OptBacktraceFrom::from(Inner);
assert!(error.backtrace().is_some());
@@ -103,7 +123,7 @@ pub mod structs {
#[cfg(thiserror_nightly_testing)]
pub mod enums {
- use super::Inner;
+ use super::{Inner, InnerBacktrace};
use std::backtrace::Backtrace;
use std::error::Error;
use std::sync::Arc;
@@ -154,6 +174,16 @@ pub mod enums {
}
#[derive(Error, Debug)]
+ pub enum CombinedBacktraceFrom {
+ #[error("...")]
+ Test {
+ #[from]
+ #[backtrace]
+ source: InnerBacktrace,
+ },
+ }
+
+ #[derive(Error, Debug)]
pub enum OptBacktraceFrom {
#[error("...")]
Test {
@@ -200,6 +230,11 @@ pub mod enums {
let error = BacktraceFrom::from(Inner);
assert!(error.backtrace().is_some());
+ let error = CombinedBacktraceFrom::from(InnerBacktrace {
+ backtrace: Backtrace::capture(),
+ });
+ assert!(error.backtrace().is_some());
+
let error = OptBacktraceFrom::from(Inner);
assert!(error.backtrace().is_some());