]>
git.proxmox.com Git - rustc.git/blob - vendor/derive_more/tests/error/nightly/derives_for_generic_structs_with_backtrace.rs
4 fn named_implicit_no_backtrace() {
5 derive_display
!(TestErr
, T
);
6 #[derive(Default, Debug, Error)]
11 assert
!(TestErr
::<i32>::default().backtrace().is_none());
15 fn named_implicit_backtrace_by_field_name() {
16 derive_display
!(TestErr
, T
);
17 #[derive(Debug, Error)]
19 backtrace
: MyBacktrace
,
23 type MyBacktrace
= Backtrace
;
26 backtrace
: Backtrace
::force_capture(),
29 assert
!(err
.backtrace().is_some());
34 fn named_implicit_backtrace_by_field_type() {
35 derive_display
!(TestErr
, T
);
36 #[derive(Debug, Error)]
38 implicit_backtrace
: Backtrace
,
43 implicit_backtrace
: Backtrace
::force_capture(),
46 assert
!(err
.backtrace().is_some());
47 assert_bt
!(==, err
, implicit_backtrace
);
51 fn named_explicit_no_backtrace_by_field_name() {
52 derive_display
!(TestErr
, T
);
53 #[derive(Debug, Error)]
55 #[error(not(backtrace))]
56 backtrace
: MyBacktrace
,
60 type MyBacktrace
= Backtrace
;
63 backtrace
: Backtrace
::force_capture(),
71 fn named_explicit_no_backtrace_by_field_type() {
72 derive_display
!(TestErr
, T
);
73 #[derive(Debug, Error)]
75 #[error(not(backtrace))]
76 implicit_backtrace
: Backtrace
,
81 implicit_backtrace
: Backtrace
::force_capture(),
89 fn named_explicit_backtrace() {
90 derive_display
!(TestErr
, T
);
91 #[derive(Debug, Error)]
94 explicit_backtrace
: MyBacktrace
,
98 type MyBacktrace
= Backtrace
;
101 explicit_backtrace
: Backtrace
::force_capture(),
104 assert
!(err
.backtrace().is_some());
105 assert_bt
!(==, err
, explicit_backtrace
);
109 fn named_explicit_no_backtrace_redundant() {
110 derive_display
!(TestErr
, T
);
111 #[derive(Debug, Error)]
113 #[error(not(backtrace))]
114 not_backtrace
: MyBacktrace
,
115 #[error(not(backtrace))]
119 type MyBacktrace
= Backtrace
;
122 not_backtrace
: Backtrace
::force_capture(),
130 fn named_explicit_backtrace_by_field_name_redundant() {
131 derive_display
!(TestErr
, T
);
132 #[derive(Debug, Error)]
135 backtrace
: MyBacktrace
,
139 type MyBacktrace
= Backtrace
;
142 backtrace
: Backtrace
::force_capture(),
145 assert
!(err
.backtrace().is_some());
150 fn named_explicit_backtrace_by_field_type_redundant() {
151 derive_display
!(TestErr
, T
);
152 #[derive(Debug, Error)]
155 implicit_backtrace
: Backtrace
,
160 implicit_backtrace
: Backtrace
::force_capture(),
163 assert
!(err
.backtrace().is_some());
164 assert_bt
!(==, err
, implicit_backtrace
);
168 fn named_explicit_supresses_implicit() {
169 derive_display
!(TestErr
, T
);
170 #[derive(Debug, Error)]
173 not_backtrace
: MyBacktrace
,
174 backtrace
: Backtrace
,
178 type MyBacktrace
= Backtrace
;
181 not_backtrace
: Backtrace
::force_capture(),
182 backtrace
: (|| Backtrace
::force_capture())(), // ensure backtraces are different
186 assert
!(err
.backtrace().is_some());
187 assert_bt
!(==, err
, not_backtrace
);
192 fn unnamed_implicit_no_backtrace() {
193 derive_display
!(TestErr
, T
);
194 #[derive(Default, Debug, Error)]
195 struct TestErr
<T
>(T
, T
);
197 assert
!(TestErr
::<i32>::default().backtrace().is_none());
201 fn unnamed_implicit_backtrace() {
202 derive_display
!(TestErr
, T
);
203 #[derive(Debug, Error)]
204 struct TestErr
<T
>(Backtrace
, T
, T
);
206 let err
= TestErr(Backtrace
::force_capture(), 0, 0);
207 assert
!(err
.backtrace().is_some());
208 assert_bt
!(==, err
, 0);
212 fn unnamed_explicit_no_backtrace() {
213 derive_display
!(TestErr
, T
);
214 #[derive(Debug, Error)]
215 struct TestErr
<T
>(#[error(not(backtrace))] Backtrace, T);
217 assert
!(TestErr(Backtrace
::force_capture(), 0).backtrace().is_none());
221 fn unnamed_explicit_backtrace() {
222 derive_display
!(TestErr
, T
);
223 #[derive(Debug, Error)]
224 struct TestErr
<T
>(#[error(backtrace)] MyBacktrace, T, T);
226 type MyBacktrace
= Backtrace
;
228 let err
= TestErr(Backtrace
::force_capture(), 0, 0);
229 assert
!(err
.backtrace().is_some());
230 assert_bt
!(==, err
, 0);
234 fn unnamed_explicit_no_backtrace_redundant() {
235 derive_display
!(TestErr
, T
);
236 #[derive(Debug, Error)]
238 #[error(not(backtrace))] MyBacktrace,
239 #[error(not(backtrace))] T,
242 type MyBacktrace
= Backtrace
;
244 assert
!(TestErr(Backtrace
::force_capture(), 0).backtrace().is_none());
248 fn unnamed_explicit_backtrace_redundant() {
249 derive_display
!(TestErr
, T
);
250 #[derive(Debug, Error)]
251 struct TestErr
<T
>(#[error(backtrace)] Backtrace, T, T);
253 let err
= TestErr(Backtrace
::force_capture(), 0, 0);
254 assert
!(err
.backtrace().is_some());
255 assert_bt
!(==, err
, 0);
259 fn unnamed_explicit_supresses_implicit() {
260 derive_display
!(TestErr
, T
);
261 #[derive(Debug, Error)]
262 struct TestErr
<T
>(#[error(backtrace)] MyBacktrace, Backtrace, T);
264 type MyBacktrace
= Backtrace
;
267 Backtrace
::force_capture(),
268 (|| Backtrace
::force_capture())(), // ensure backtraces are different
272 assert
!(err
.backtrace().is_some());
273 assert_bt
!(==, err
, 0);
274 assert_bt
!(!=, err
, 1);