use std::fs;
use std::path::Path;
fn declared_tests(dir: &Path) -> usize {
let mut total = 0;
let entries = fs::read_dir(dir).expect("tests/ is readable");
for entry in entries {
let path = entry.expect("a directory entry").path();
if path.extension().is_some_and(|e| e == "rs") {
let text = fs::read_to_string(&path).expect("a readable test");
total += text.lines().filter(|l| l.trim() == "#[test]").count();
}
}
total
}
#[test]
fn the_published_test_count_is_current() {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests");
let count = declared_tests(&dir);
let stated = format!("{count} tests");
for name in ["README.md", "doc/TESTING.md"] {
let path = Path::new(env!("CARGO_MANIFEST_DIR")).join(name);
let text = fs::read_to_string(&path).expect("a readable document");
assert!(
text.contains(&stated),
"{name} does not say `{stated}`; \
tests/ declares {count} tests"
);
}
}