3 fn generate_fake_frames() -> Vec<BacktraceFrame> {
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())),
15 frame: RawFrame::Fake,
16 symbols: vec![BacktraceSymbol {
17 name: Some(b"__rust_maybe_catch_panic".to_vec()),
24 frame: RawFrame::Fake,
27 name: Some(b"std::rt::lang_start_internal".to_vec()),
28 filename: Some(BytesOrWide::Bytes(b"rust/rt.rs".to_vec())),
33 name: Some(b"std::rt::lang_start".to_vec()),
34 filename: Some(BytesOrWide::Bytes(b"rust/rt.rs".to_vec())),
45 let backtrace = Backtrace {
46 inner: Inner::Captured(LazilyResolvedCapture::new(Capture {
49 frames: generate_fake_frames(),
54 let expected = "Backtrace [\
55 \n { fn: \"__rust_maybe_catch_panic\" },\
56 \n { fn: \"std::rt::lang_start_internal\", file: \"rust/rt.rs\", line: 300 },\
57 \n { fn: \"std::rt::lang_start\", file: \"rust/rt.rs\", line: 400 },\
60 assert_eq!(format!("{backtrace:#?}"), expected);
62 // Format the backtrace a second time, just to make sure lazily resolved state is stable
63 assert_eq!(format!("{backtrace:#?}"), expected);
68 let backtrace = Backtrace {
69 inner: Inner::Captured(LazilyResolvedCapture::new(Capture {
72 frames: generate_fake_frames(),
76 let frames = backtrace.frames();
81 { fn: \"std::backtrace::Backtrace::create\", file: \"rust/backtrace.rs\", line: 100 },
84 { fn: \"__rust_maybe_catch_panic\" },
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 },
92 let mut iter = frames.iter().zip(expected.iter());
94 assert!(iter.all(|(f, e)| format!("{f:#?}") == *e));