main.rs

1.5 kB · rust · 48 lines

1use claims::registry::{Cost, Verdict};2use claims::report::Run;3use claims::{ledger, registry, report};4use std::path::Path;56#[test]7fn the_ledger_claims_hold() {8    let all = std::env::var("MRLY_CLAIMS")9        .map(|name| name == "all")10        .unwrap_or(false);11    let lane = if all { Cost::Dear } else { Cost::Cheap };12    let folder = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../../claims");13    let mut files: Vec<_> = std::fs::read_dir(&folder)14        .expect("the claims folder is readable")15        .map(|entry| entry.expect("an entry reads").path())16        .filter(|path| path.extension().is_some_and(|ext| ext == "md"))17        .collect();18    files.sort();19    let text: String = files20        .iter()21        .map(|path| std::fs::read_to_string(path).expect("a claims file is readable"))22        .collect::<Vec<_>>()23        .join("\n");24    let book = match ledger::parse(&text) {25        Ok(book) => book,26        Err(why) => panic!("{why}"),27    };28    let mut runs = Vec::new();29    for &(key, cost, check) in registry::entries() {30        let outcome = match (cost, lane) {31            (Cost::Dear, Cost::Cheap) => None,32            _ => Some(check()),33        };34        runs.push(Run { key, outcome });35    }36    let sheet = report::tally(&book, &runs);37    report::print(&sheet);38    assert_eq!(39        sheet.count(Verdict::Failed),40        0,41        "the ledger holds failed claims"42    );43    assert_eq!(44        sheet.count(Verdict::Orphan),45        0,46        "the registry holds orphan checks"47    );48}