1
1
use super :: * ;
2
2
3
+ fn generate_fake_frames ( ) -> Vec < BacktraceFrame > {
4
+ vec ! [
5
+ BacktraceFrame {
6
+ frame: RawFrame :: Fake ,
7
+ symbols: vec![ BacktraceSymbol {
8
+ name: Some ( b"std::backtrace::Backtrace::create" . to_vec( ) ) ,
9
+ filename: Some ( BytesOrWide :: Bytes ( b"rust/backtrace.rs" . to_vec( ) ) ) ,
10
+ lineno: Some ( 100 ) ,
11
+ colno: None ,
12
+ } ] ,
13
+ } ,
14
+ BacktraceFrame {
15
+ frame: RawFrame :: Fake ,
16
+ symbols: vec![ BacktraceSymbol {
17
+ name: Some ( b"__rust_maybe_catch_panic" . to_vec( ) ) ,
18
+ filename: None ,
19
+ lineno: None ,
20
+ colno: None ,
21
+ } ] ,
22
+ } ,
23
+ BacktraceFrame {
24
+ frame: RawFrame :: Fake ,
25
+ symbols: vec![
26
+ BacktraceSymbol {
27
+ name: Some ( b"std::rt::lang_start_internal" . to_vec( ) ) ,
28
+ filename: Some ( BytesOrWide :: Bytes ( b"rust/rt.rs" . to_vec( ) ) ) ,
29
+ lineno: Some ( 300 ) ,
30
+ colno: Some ( 5 ) ,
31
+ } ,
32
+ BacktraceSymbol {
33
+ name: Some ( b"std::rt::lang_start" . to_vec( ) ) ,
34
+ filename: Some ( BytesOrWide :: Bytes ( b"rust/rt.rs" . to_vec( ) ) ) ,
35
+ lineno: Some ( 400 ) ,
36
+ colno: None ,
37
+ } ,
38
+ ] ,
39
+ } ,
40
+ ]
41
+ }
42
+
3
43
#[ test]
4
44
fn test_debug ( ) {
5
45
let backtrace = Backtrace {
6
46
inner : Inner :: Captured ( LazilyResolvedCapture :: new ( Capture {
7
47
actual_start : 1 ,
8
48
resolved : true ,
9
- frames : vec ! [
10
- BacktraceFrame {
11
- frame: RawFrame :: Fake ,
12
- symbols: vec![ BacktraceSymbol {
13
- name: Some ( b"std::backtrace::Backtrace::create" . to_vec( ) ) ,
14
- filename: Some ( BytesOrWide :: Bytes ( b"rust/backtrace.rs" . to_vec( ) ) ) ,
15
- lineno: Some ( 100 ) ,
16
- colno: None ,
17
- } ] ,
18
- } ,
19
- BacktraceFrame {
20
- frame: RawFrame :: Fake ,
21
- symbols: vec![ BacktraceSymbol {
22
- name: Some ( b"__rust_maybe_catch_panic" . to_vec( ) ) ,
23
- filename: None ,
24
- lineno: None ,
25
- colno: None ,
26
- } ] ,
27
- } ,
28
- BacktraceFrame {
29
- frame: RawFrame :: Fake ,
30
- symbols: vec![
31
- BacktraceSymbol {
32
- name: Some ( b"std::rt::lang_start_internal" . to_vec( ) ) ,
33
- filename: Some ( BytesOrWide :: Bytes ( b"rust/rt.rs" . to_vec( ) ) ) ,
34
- lineno: Some ( 300 ) ,
35
- colno: Some ( 5 ) ,
36
- } ,
37
- BacktraceSymbol {
38
- name: Some ( b"std::rt::lang_start" . to_vec( ) ) ,
39
- filename: Some ( BytesOrWide :: Bytes ( b"rust/rt.rs" . to_vec( ) ) ) ,
40
- lineno: Some ( 400 ) ,
41
- colno: None ,
42
- } ,
43
- ] ,
44
- } ,
45
- ] ,
49
+ frames : generate_fake_frames ( ) ,
46
50
} ) ) ,
47
51
} ;
48
52
@@ -58,3 +62,34 @@ fn test_debug() {
58
62
// Format the backtrace a second time, just to make sure lazily resolved state is stable
59
63
assert_eq ! ( format!( "{:#?}" , backtrace) , expected) ;
60
64
}
65
+
66
+ #[ test]
67
+ fn test_frames ( ) {
68
+ let backtrace = Backtrace {
69
+ inner : Inner :: Captured ( LazilyResolvedCapture :: new ( Capture {
70
+ actual_start : 1 ,
71
+ resolved : true ,
72
+ frames : generate_fake_frames ( ) ,
73
+ } ) ) ,
74
+ } ;
75
+
76
+ let frames = backtrace. frames ( ) ;
77
+
78
+ #[ rustfmt:: skip]
79
+ let expected = vec ! [
80
+ "[
81
+ { fn: \" std::backtrace::Backtrace::create\" , file: \" rust/backtrace.rs\" , line: 100 },
82
+ ]" ,
83
+ "[
84
+ { fn: \" __rust_maybe_catch_panic\" },
85
+ ]" ,
86
+ "[
87
+ { fn: \" std::rt::lang_start_internal\" , file: \" rust/rt.rs\" , line: 300 },
88
+ { fn: \" std::rt::lang_start\" , file: \" rust/rt.rs\" , line: 400 },
89
+ ]"
90
+ ] ;
91
+
92
+ let mut iter = frames. iter ( ) . zip ( expected. iter ( ) ) ;
93
+
94
+ assert ! ( iter. all( |( f, e) | format!( "{:#?}" , f) == * e) ) ;
95
+ }
0 commit comments