bonsai-ninja-security 0.2.4

Security rulepack loader, matcher, and source/sink/sanitizer wrapper for bonsai-ninja.
use super::*;

#[test]
fn taint_options_default_to_semantic_precision() {
    assert_eq!(
        TaintAnalysisOptions::default().max_precision,
        Some(PUBLIC_SEMANTIC_MAX_PRECISION)
    );
}

#[test]
fn taint_options_clamp_broad_precision_to_semantic() {
    let exact = TaintAnalysisOptions {
        max_precision: Some(Precision::Exact),
        ..TaintAnalysisOptions::default()
    }
    .semantic_precision_only();
    assert_eq!(exact.max_precision, Some(Precision::Exact));

    let none = TaintAnalysisOptions {
        max_precision: None,
        ..TaintAnalysisOptions::default()
    }
    .semantic_precision_only();
    assert_eq!(none.max_precision, Some(PUBLIC_SEMANTIC_MAX_PRECISION));

    let broad = TaintAnalysisOptions {
        max_precision: Some(Precision::OverApproximate),
        ..TaintAnalysisOptions::default()
    }
    .semantic_precision_only();
    assert_eq!(broad.max_precision, Some(PUBLIC_SEMANTIC_MAX_PRECISION));

    let unknown = TaintAnalysisOptions {
        max_precision: Some(Precision::Unknown),
        ..TaintAnalysisOptions::default()
    }
    .semantic_precision_only();
    assert_eq!(unknown.max_precision, Some(PUBLIC_SEMANTIC_MAX_PRECISION));
}