]> git.proxmox.com Git - rustc.git/blob - tests/ui/std-backtrace.rs
New upstream version 1.68.2+dfsg1
[rustc.git] / tests / 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 // ignore-fuchsia Backtraces not symbolized
8 // compile-flags:-g
9 // compile-flags:-Cstrip=none
10
11 use std::env;
12 use std::process::Command;
13 use std::str;
14
15 fn main() {
16 let args: Vec<String> = env::args().collect();
17 if args.len() >= 2 && args[1] == "force" {
18 println!("stack backtrace:\n{}", std::backtrace::Backtrace::force_capture());
19 } else if args.len() >= 2 {
20 println!("stack backtrace:\n{}", std::backtrace::Backtrace::capture());
21 } else {
22 runtest(&args[0]);
23 println!("test ok");
24 }
25 }
26
27 fn runtest(me: &str) {
28 env::remove_var("RUST_BACKTRACE");
29 env::remove_var("RUST_LIB_BACKTRACE");
30
31 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "1").output().unwrap();
32 assert!(p.status.success());
33 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
34 assert!(String::from_utf8_lossy(&p.stdout).contains("backtrace::main"));
35
36 let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "0").output().unwrap();
37 assert!(p.status.success());
38 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
39
40 let p = Command::new(me).arg("a").output().unwrap();
41 assert!(p.status.success());
42 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
43
44 let p = Command::new(me)
45 .arg("a")
46 .env("RUST_LIB_BACKTRACE", "1")
47 .env("RUST_BACKTRACE", "1")
48 .output()
49 .unwrap();
50 assert!(p.status.success());
51 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
52
53 let p = Command::new(me)
54 .arg("a")
55 .env("RUST_LIB_BACKTRACE", "0")
56 .env("RUST_BACKTRACE", "1")
57 .output()
58 .unwrap();
59 assert!(p.status.success());
60 assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
61
62 let p = Command::new(me)
63 .arg("force")
64 .env("RUST_LIB_BACKTRACE", "0")
65 .env("RUST_BACKTRACE", "0")
66 .output()
67 .unwrap();
68 assert!(p.status.success());
69 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
70
71 let p = Command::new(me).arg("force").output().unwrap();
72 assert!(p.status.success());
73 assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
74 }