48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
|
use std::fs::{self, DirEntry};
|
||
|
use std::io;
|
||
|
use std::path::Path;
|
||
|
|
||
|
#[test]
|
||
|
fn test_missing_tests() {
|
||
|
explore_directory(Path::new("./tests")).unwrap();
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Test for missing files.
|
||
|
|
||
|
Since rs files are alphabetically before stderr/stdout, we can sort by the full name
|
||
|
and iter in that order. If we've seen the file stem for the first time and it's not
|
||
|
a rust file, it means the rust file has to be missing.
|
||
|
*/
|
||
|
fn explore_directory(dir: &Path) -> io::Result<()> {
|
||
|
let mut current_file = String::new();
|
||
|
let mut files: Vec<DirEntry> = fs::read_dir(dir)?.filter_map(Result::ok).collect();
|
||
|
files.sort_by_key(|e| e.path());
|
||
|
for entry in files.iter() {
|
||
|
let path = entry.path();
|
||
|
if path.is_dir() {
|
||
|
explore_directory(&path)?;
|
||
|
} else {
|
||
|
let file_stem = path.file_stem().unwrap().to_str().unwrap().to_string();
|
||
|
match path.extension() {
|
||
|
Some(ext) => {
|
||
|
match ext.to_str().unwrap() {
|
||
|
"rs" => current_file = file_stem.clone(),
|
||
|
"stderr" | "stdout" => {
|
||
|
assert_eq!(
|
||
|
file_stem,
|
||
|
current_file,
|
||
|
"{}",
|
||
|
format!("Didn't see a test file for {:}", path.to_str().unwrap())
|
||
|
);
|
||
|
},
|
||
|
_ => continue,
|
||
|
};
|
||
|
},
|
||
|
None => {},
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
Ok(())
|
||
|
}
|