File: backtrace-optional.rs

package info (click to toggle)
rust-snafu 0.7.5-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 724 kB
  • sloc: sh: 15; makefile: 4
file content (35 lines) | stat: -rw-r--r-- 1,163 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#![cfg(feature="std")]
use snafu::{prelude::*, Backtrace, ErrorCompat};

#[derive(Debug, Snafu)]
enum Error {
    BacktraceAlways { backtrace: Backtrace },
    BacktraceSometimes { backtrace: Option<Backtrace> },
}

#[test]
fn bare_backtrace_is_always_present() {
    let always = BacktraceAlwaysSnafu.build();
    assert!(ErrorCompat::backtrace(&always).is_some());
}

#[test]
fn optional_backtrace_is_not_present_without_environment_variable() {
    use std::env;

    // The check requires RUST_BACKTRACE to be unset. Back up the
    // current value of the environment variable and restore it
    // afterwards. If we add more tests to this file that rely on
    // environment variables, we should introduce a mutex as
    // environment variables are a global resource.
    const BACKTRACE_ENV_NAME: &str = "RUST_BACKTRACE";
    let previous_backtrace_env_value = env::var_os(BACKTRACE_ENV_NAME);
    env::remove_var(BACKTRACE_ENV_NAME);

    let sometimes = BacktraceSometimesSnafu.build();
    assert!(ErrorCompat::backtrace(&sometimes).is_none());

    if let Some(v) = previous_backtrace_env_value {
        env::set_var(BACKTRACE_ENV_NAME, v);
    }
}