Skip to content

Commit 8b81208

Browse files
author
Unknown
committed
Adding a test for checking if test files are missing.
1 parent 59b250e commit 8b81208

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

tests/missing-test-files.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use std::fs::{self, DirEntry};
2+
use std::io;
3+
use std::path::Path;
4+
5+
#[test]
6+
fn test_missing_tests() {
7+
explore_directory(Path::new("./tests")).unwrap();
8+
}
9+
10+
/*
11+
Test for missing files.
12+
13+
Since rs files are alphabetically before stderr/stdout, we can sort by the full name
14+
and iter in that order. If we've seen the file stem for the first time and it's not
15+
a rust file, it means the rust file has to be missing.
16+
*/
17+
fn explore_directory(dir: &Path) -> io::Result<()> {
18+
let mut current_file = String::new();
19+
let mut files: Vec<DirEntry> = fs::read_dir(dir)?.filter_map(Result::ok).collect();
20+
files.sort_by_key(|e| e.path());
21+
for entry in files.iter() {
22+
let path = entry.path();
23+
if path.is_dir() {
24+
explore_directory(&path)?;
25+
} else {
26+
let file_stem = path.file_stem().unwrap().to_str().unwrap().to_string();
27+
match path.extension() {
28+
Some(ext) => {
29+
match ext.to_str().unwrap() {
30+
"rs" => current_file = file_stem.clone(),
31+
"stderr" | "stdout" => {
32+
assert_eq!(
33+
file_stem,
34+
current_file,
35+
"{}",
36+
format!("Didn't see a test file for {:}", path.to_str().unwrap())
37+
);
38+
},
39+
_ => continue,
40+
};
41+
},
42+
None => {},
43+
}
44+
}
45+
}
46+
Ok(())
47+
}

0 commit comments

Comments
 (0)