57 lines
1.8 KiB
Rust
57 lines
1.8 KiB
Rust
use std::fs;
|
|
use std::path::Path;
|
|
use std::path::PathBuf;
|
|
|
|
fn list_dir(p: &Path) -> Vec<PathBuf> {
|
|
let mut children = fs::read_dir(p)
|
|
.unwrap()
|
|
.map(|r| r.map(|e| e.path()))
|
|
.collect::<Result<Vec<_>, _>>()
|
|
.unwrap();
|
|
children.sort();
|
|
children
|
|
}
|
|
|
|
fn assert_equal_recursively(a: &Path, b: &Path) {
|
|
assert_eq!(a.is_dir(), b.is_dir(), "{} {}", a.display(), b.display());
|
|
assert_eq!(a.is_file(), b.is_file(), "{} {}", a.display(), b.display());
|
|
if a.is_dir() {
|
|
let mut a_contents = list_dir(a).into_iter();
|
|
let mut b_contents = list_dir(b).into_iter();
|
|
loop {
|
|
let a_child = a_contents.next();
|
|
let b_child = b_contents.next();
|
|
match (a_child, b_child) {
|
|
(Some(a_child), Some(b_child)) => {
|
|
assert_eq!(a_child.file_name(), b_child.file_name());
|
|
assert_equal_recursively(&a_child, &b_child);
|
|
}
|
|
(None, None) => break,
|
|
_ => panic!(
|
|
"mismatched directories: {} and {}",
|
|
a.display(),
|
|
b.display()
|
|
),
|
|
}
|
|
}
|
|
} else {
|
|
let a_contents = fs::read_to_string(a).unwrap();
|
|
let b_contents = fs::read_to_string(b).unwrap();
|
|
assert_eq!(a_contents, b_contents);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_bundled_google_proto_files_consistent() {
|
|
let source = "../proto/google";
|
|
let our_copy = "src/proto/google";
|
|
assert_equal_recursively(Path::new(source), Path::new(our_copy));
|
|
}
|
|
|
|
#[test]
|
|
fn test_bundled_rustproto_proto_consistent() {
|
|
let source = "../proto/rustproto.proto";
|
|
let our_copy = "src/proto/rustproto.proto";
|
|
assert_equal_recursively(Path::new(source), Path::new(our_copy));
|
|
}
|