blob: ef20ef901285b9d41e8a225d8d486b48797b6259 [file] [log] [blame]
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));
}