summaryrefslogtreecommitdiffstats
path: root/tests/ui/std-backtrace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/std-backtrace.rs')
-rw-r--r--tests/ui/std-backtrace.rs74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/ui/std-backtrace.rs b/tests/ui/std-backtrace.rs
new file mode 100644
index 000000000..59574b471
--- /dev/null
+++ b/tests/ui/std-backtrace.rs
@@ -0,0 +1,74 @@
+// run-pass
+// ignore-android FIXME #17520
+// ignore-emscripten spawning processes is not supported
+// ignore-openbsd no support for libbacktrace without filename
+// ignore-sgx no processes
+// ignore-msvc see #62897 and `backtrace-debuginfo.rs` test
+// ignore-fuchsia Backtraces not symbolized
+// compile-flags:-g
+// compile-flags:-Cstrip=none
+
+use std::env;
+use std::process::Command;
+use std::str;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ if args.len() >= 2 && args[1] == "force" {
+ println!("stack backtrace:\n{}", std::backtrace::Backtrace::force_capture());
+ } else if args.len() >= 2 {
+ println!("stack backtrace:\n{}", std::backtrace::Backtrace::capture());
+ } else {
+ runtest(&args[0]);
+ println!("test ok");
+ }
+}
+
+fn runtest(me: &str) {
+ env::remove_var("RUST_BACKTRACE");
+ env::remove_var("RUST_LIB_BACKTRACE");
+
+ let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "1").output().unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
+ assert!(String::from_utf8_lossy(&p.stdout).contains("backtrace::main"));
+
+ let p = Command::new(me).arg("a").env("RUST_BACKTRACE", "0").output().unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
+
+ let p = Command::new(me).arg("a").output().unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
+
+ let p = Command::new(me)
+ .arg("a")
+ .env("RUST_LIB_BACKTRACE", "1")
+ .env("RUST_BACKTRACE", "1")
+ .output()
+ .unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
+
+ let p = Command::new(me)
+ .arg("a")
+ .env("RUST_LIB_BACKTRACE", "0")
+ .env("RUST_BACKTRACE", "1")
+ .output()
+ .unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("disabled backtrace\n"));
+
+ let p = Command::new(me)
+ .arg("force")
+ .env("RUST_LIB_BACKTRACE", "0")
+ .env("RUST_BACKTRACE", "0")
+ .output()
+ .unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
+
+ let p = Command::new(me).arg("force").output().unwrap();
+ assert!(p.status.success());
+ assert!(String::from_utf8_lossy(&p.stdout).contains("stack backtrace:\n"));
+}