explicit-error 0.2.3

Explicit concrete Error type for binary crates
Documentation
use super::*;

#[test]
fn from_for_error() {
    assert!(explicit_error_exit::Error::from(explicit_error_exit::Fault::new()).is_fault());
}

#[test]
fn source() {
    assert!(
        Fault::new()
            .with_source(sqlx::Error::RowNotFound)
            .source()
            .unwrap()
            .downcast_ref::<sqlx::Error>()
            .is_some()
    );

    assert!(Fault::new().source().is_none());
}

#[test]
fn new() {
    let fault = Fault::new();
    assert!(fault.context().is_none());
    assert!(fault.source.is_none());
    assert_eq!(fault.backtrace.status(), BacktraceStatus::Disabled);
}

#[test]
fn with_source() {
    assert!(
        Fault::new()
            .with_source(sqlx::Error::RowNotFound)
            .source
            .unwrap()
            .downcast::<sqlx::Error>()
            .is_ok()
    );
}

#[test]
fn with_context() {
    let fault = Fault::new().with_context("context");
    assert_eq!(fault.context.as_ref().unwrap(), "context");
    assert_eq!(
        fault.with_context("context 2").context.unwrap(),
        "context 2"
    );
}

#[test]
fn new_force() {
    let fault = Fault::new_force();
    assert!(fault.context().is_none());
    assert!(fault.source.is_none());
    assert_eq!(fault.backtrace.status(), BacktraceStatus::Captured);
}

#[test]
fn backtrace_status() {
    assert_eq!(Fault::new().backtrace_status(), BacktraceStatus::Disabled);
    assert_eq!(
        Fault::new_force().backtrace.status(),
        BacktraceStatus::Captured
    );
}

#[test]
fn context() {
    assert_eq!(
        Fault::new().with_context("context").context().unwrap(),
        "context"
    );
}