]>
Commit | Line | Data |
---|---|---|
e1599b0c XL |
1 | // run-pass |
2 | // ignore-android FIXME #17520 | |
3 | // ignore-cloudabi spawning processes is not supported | |
4 | // ignore-emscripten spawning processes is not supported | |
5 | // ignore-openbsd no support for libbacktrace without filename | |
6 | // ignore-sgx no processes | |
7 | // ignore-msvc see #62897 and `backtrace-debuginfo.rs` test | |
8 | // compile-flags:-g | |
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" { | |
72b1a166 | 19 | println!("stack backtrace:\n{}", std::backtrace::Backtrace::force_capture()); |
e1599b0c | 20 | } else if args.len() >= 2 { |
72b1a166 | 21 | println!("stack backtrace:\n{}", std::backtrace::Backtrace::capture()); |
e1599b0c XL |
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 | } |