From 9e4052cc2ee12751ba94909ff479bd03df141ac4 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 7 Jan 2018 14:56:08 +0300 Subject: Test utils --- tests/testutils/src/lib.rs | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/testutils/src/lib.rs (limited to 'tests/testutils/src') diff --git a/tests/testutils/src/lib.rs b/tests/testutils/src/lib.rs new file mode 100644 index 000000000..9fc85cc24 --- /dev/null +++ b/tests/testutils/src/lib.rs @@ -0,0 +1,64 @@ +extern crate difference; +extern crate file; + +use std::path::{PathBuf, Path}; +use std::fs::read_dir; + +use difference::Changeset; + +pub fn assert_equal_text( + expected: &str, + actual: &str, + path: &Path +) { + if expected != actual { + print_difference(expected, actual, path) + } +} + +pub fn collect_tests(paths: &[&str]) -> Vec { + paths.iter().flat_map(|path| { + let path = test_data_dir().join(path); + test_from_dir(&path).into_iter() + }).collect() +} + +fn test_from_dir(dir: &Path) -> Vec { + let mut acc = Vec::new(); + for file in read_dir(&dir).unwrap() { + let file = file.unwrap(); + let path = file.path(); + if path.extension().unwrap_or_default() == "rs" { + acc.push(path); + } + } + acc.sort(); + acc +} + +fn print_difference(expected: &str, actual: &str, path: &Path) { + let dir = project_dir(); + let path = path.strip_prefix(&dir).unwrap_or_else(|_| path); + println!("\nfile: {}", path.display()); + if expected.trim() == actual.trim() { + println!("whitespace difference"); + println!("rewriting the file"); + file::put_text(path, actual).unwrap(); + } else { + let changeset = Changeset::new(actual, expected, "\n"); + println!("{}", changeset); + } + panic!("Comparison failed") +} + +fn project_dir() -> PathBuf { + let dir = env!("CARGO_MANIFEST_DIR"); + PathBuf::from(dir) + .parent().unwrap() + .parent().unwrap() + .to_owned() +} + +fn test_data_dir() -> PathBuf { + project_dir().join("tests/data") +} \ No newline at end of file -- cgit v1.2.3