#[cfg(test)]
mod tests {
use std::{io, path::PathBuf};
use sourcetrait_tooling as tooling;
use tooling::path::diff as pathdiff;
use sourcetrait_testing::prelude::*;
static TESTING: testing::Module = testing::module!(Integration, {
.using_fixture_dir()
});
#[tested]
fn test_two_files() {
let test = testing::test!({
.using_fixture_dir()
});
let first_same_filepath = test.fixture_dir().join("first-same.txt");
let second_same_filepath = test.fixture_dir().join("second-same.txt");
let first_different_filepath = test.fixture_dir().join("first-different.txt");
let second_different_filepath = test.fixture_dir().join("second-different.txt");
let a_filepath = test.fixture_dir().join("a.txt");
let b_filepath = test.fixture_dir().join("b.txt");
let dir_path = test.fixture_dir().join("dir");
assert!(!tooling::paths_differ(&first_same_filepath, &second_same_filepath).unwrap());
assert!(tooling::paths_differ(&first_different_filepath, &second_different_filepath).unwrap());
let expected_differences = Some(vec![
pathdiff::Difference::FileDiffers(second_different_filepath.clone())
]);
assert_eq!(expected_differences, tooling::path_diff(&first_different_filepath, &second_different_filepath).unwrap());
let expected_differences = Some(vec![
pathdiff::Difference::FileDiffers(b_filepath.clone())
]);
assert_eq!(expected_differences, tooling::path_diff(&a_filepath, &b_filepath).unwrap());
let err = tooling::paths_differ(&first_same_filepath, &test.fixture_dir().join("noexist"));
matches!(err, Err(e) if e.kind() == io::ErrorKind::NotFound);
let err = tooling::paths_differ(&test.fixture_dir().join("noexist"), &first_same_filepath);
matches!(err, Err(e) if e.kind() == io::ErrorKind::NotFound);
let expected_differences = Some(vec![
pathdiff::Difference::SubjectTypesDiffer
]);
assert_eq!(expected_differences, tooling::path_diff(&dir_path, &b_filepath).unwrap());
let expected_differences = Some(vec![
pathdiff::Difference::SubjectTypesDiffer
]);
assert_eq!(expected_differences, tooling::path_diff(&b_filepath, &dir_path).unwrap());
}
#[tested]
fn test_two_dirs() {
let test = testing::test!({
.using_fixture_dir()
});
let module_fixture_dir = test.module().fixture_dir();
assert!(!tooling::paths_differ(module_fixture_dir, module_fixture_dir).unwrap());
assert!(tooling::paths_differ(module_fixture_dir, test.fixture_dir()).unwrap());
let expected_diffs = Some(Vec::from([
pathdiff::Difference::DirectoryMissing(
PathBuf::from("1"),
pathdiff::Subject::Second,
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("3/alpha"),
pathdiff::Subject::Second,
),
pathdiff::Difference::FileDiffers(
PathBuf::from("3/different.txt"),
),
pathdiff::Difference::FileMissing(
PathBuf::from("3/two"),
pathdiff::Subject::Second,
),
pathdiff::Difference::TypesDiffer(
PathBuf::from("3/typedir"),
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("2"),
pathdiff::Subject::First,
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("3/bravo"),
pathdiff::Subject::First,
),
pathdiff::Difference::FileMissing(
PathBuf::from("3/three"),
pathdiff::Subject::First,
),
]));
let diffs = tooling::path_diff(test.fixture_dir().join("a"), test.fixture_dir().join("other/b")).unwrap();
assert_eq!(expected_diffs, diffs);
let expected_diffs = Some(Vec::from([
pathdiff::Difference::DirectoryMissing(
PathBuf::from("2"),
pathdiff::Subject::Second,
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("3/bravo"),
pathdiff::Subject::Second,
),
pathdiff::Difference::FileDiffers(
PathBuf::from("3/different.txt"),
),
pathdiff::Difference::FileMissing(
PathBuf::from("3/three"),
pathdiff::Subject::Second,
),
pathdiff::Difference::TypesDiffer(
PathBuf::from("3/typedir"),
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("1"),
pathdiff::Subject::First,
),
pathdiff::Difference::DirectoryMissing(
PathBuf::from("3/alpha"),
pathdiff::Subject::First,
),
pathdiff::Difference::FileMissing(
PathBuf::from("3/two"),
pathdiff::Subject::First,
),
]));
let diffs = tooling::path_diff(test.fixture_dir().join("other/b"), test.fixture_dir().join("a")).unwrap();
assert_eq!(expected_diffs, diffs);
}
}