ripr 0.8.0

Find static mutation-exposure gaps before expensive mutation testing
Documentation
use super::{sample_finding, selector_matches_location};
use crate::analysis::AnalysisMode;
use crate::app::Mode;

#[test]
fn mode_labels_match_public_contract() {
    assert_eq!(Mode::Instant.as_str(), "instant");
    assert_eq!(Mode::Draft.as_str(), "draft");
    assert_eq!(Mode::Fast.as_str(), "fast");
    assert_eq!(Mode::Deep.as_str(), "deep");
    assert_eq!(Mode::Ready.as_str(), "ready");
}

#[test]
fn mode_maps_to_internal_profiles() {
    assert_eq!(Mode::Instant.analysis_mode(), AnalysisMode::Instant);
    assert_eq!(Mode::Draft.analysis_mode(), AnalysisMode::Draft);
    assert_eq!(Mode::Fast.analysis_mode(), AnalysisMode::Fast);
    assert_eq!(Mode::Deep.analysis_mode(), AnalysisMode::Deep);
    assert_eq!(Mode::Ready.analysis_mode(), AnalysisMode::Ready);
}

#[test]
fn selector_matches_exact_and_suffix_file_locations() {
    let finding = sample_finding("src/lib.rs", 42);

    assert!(selector_matches_location("src/lib.rs:42", &finding));
    assert!(selector_matches_location(
        "crates/ripr/src/lib.rs:42",
        &finding
    ));
    assert!(selector_matches_location(
        "crates\\ripr\\src/lib.rs:42",
        &finding
    ));
    assert!(!selector_matches_location("src/lib.rs:41", &finding));
    assert!(!selector_matches_location("src/main.rs:42", &finding));
}

#[test]
fn selector_rejects_location_lookalikes_that_only_contain_file_text() {
    let finding = sample_finding("src/lib.rs", 42);

    assert!(!selector_matches_location("src/lib.rs.bak:42", &finding));
    assert!(!selector_matches_location(
        "generated-src/lib.rs:42",
        &finding
    ));
    assert!(!selector_matches_location("src/lib.rs", &finding));
    assert!(!selector_matches_location("src/lib.rs:042", &finding));
}