]> git.lizzy.rs Git - rust.git/blob - src/test/ui/std-backtrace.rs
Auto merge of #93718 - thomcc:used-macho, r=pnkfelix
[rust.git] / src / test / ui / std-backtrace.rs
1 // run-pass
2 // ignore-android FIXME #17520
3 // ignore-emscripten spawning processes is not supported
4 // ignore-openbsd no support for libbacktrace without filename
5 // ignore-sgx no processes
6 // ignore-msvc see #62897 and `backtrace-debuginfo.rs` test
7 // compile-flags:-g
8 // compile-flags:-Cstrip=none
9
10 #![feature(backtrace)]
11
12 use std::env;
13 use std::process::Command;
14 use std::str;
15
16 fn main() {
17     let args: Vec<String> = env::args().collect();
18     if args.len() >= 2 && args[1] == "force" {
19         println!("stack backtrace:\n{}", std::backtrace::Backtrace::force_capture());
20     } else if args.len() >= 2 {
21         println!("stack backtrace:\n{}", std::backtrace::Backtrace::capture());
22     } else {
23         runtest(&args[0]);
24         println!("test ok");
25     }
26 }
27
28 fn runtest(me: &str) {
29     env::remove_var("RUST_BACKTRACE");
30     env::remove_var("RUST_LIB_BACKTRACE");
31
32     let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "1").output().unwrap();
33     assert!(p.status.success());
34     assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
35     assert!(String::from_utf8_lossy(&p.stdout).contains("backtrace::main"));
36
37     let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "0").output().unwrap();
38     assert!(p.status.success());
39     assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
40
41     let p = Command::new(me).arg("a").output().unwrap();
42     assert!(p.status.success());
43     assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
44
45     let p = Command::new(me)
46         .arg("a")
47         .env("RUST_LIB_BACKTRACE", "1")
48         .env("RUST_BACKTRACE", "1")
49         .output()
50         .unwrap();
51     assert!(p.status.success());
52     assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
53
54     let p = Command::new(me)
55         .arg("a")
56         .env("RUST_LIB_BACKTRACE", "0")
57         .env("RUST_BACKTRACE", "1")
58         .output()
59         .unwrap();
60     assert!(p.status.success());
61     assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
62
63     let p = Command::new(me)
64         .arg("force")
65         .env("RUST_LIB_BACKTRACE", "0")
66         .env("RUST_BACKTRACE", "0")
67         .output()
68         .unwrap();
69     assert!(p.status.success());
70     assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
71
72     let p = Command::new(me).arg("force").output().unwrap();
73     assert!(p.status.success());
74     assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
75 }