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}