diff --git a/src/validate.rs b/src/validate.rs index afab496..8e60e85 100644 --- a/src/validate.rs +++ b/src/validate.rs @@ -1,4 +1,4 @@ -use std::{path::PathBuf, fs, collections::HashMap}; +use std::{path::PathBuf, fs, collections::HashMap, borrow::BorrowMut}; use crate::util; @@ -27,15 +27,11 @@ pub fn validate(verbosity: u8, config: util::config::Config) { } // make sure each has a match - // - check the file stems - // - compare the file stems - // - check if either file is in the invalid list - // - add to the notification queue let mut in_to_out: (Vec<(PathBuf, PathBuf)>, Vec) = map_files(in_files, out_files); let invalid: Vec<(PathBuf, PathBuf)> = check_mappings(in_to_out.0, in_suffix, out_suffix); print_unmached(in_to_out.1); - print_invalid_pairs(invalid); + print_invalid_pairs(invalid, in_suffix, out_suffix); } @@ -147,11 +143,11 @@ fn print_unmached(unmatched: Vec) { } /** - * @brief Utility function to print invalid pairs + * @brief Utility function to print invalid pairs and suggest a fix * * @param invalid: A vector of invalid pairs */ -fn print_invalid_pairs(invalid: Vec<(PathBuf, PathBuf)>) { +fn print_invalid_pairs(invalid: Vec<(PathBuf, PathBuf)>, in_suffix: &str, out_suffix: &str) { } @@ -177,6 +173,38 @@ mod tests { return files; } + #[fixture] + fn in_files() -> Vec { + let invalid_map11 = PathBuf::from("in/inv/path/file.in "); + let invalid_map12 = PathBuf::from("in/inv/path/file_stupid.in"); + let invalid_map13 = PathBuf::from("in/inv/path/file/dead.inn"); + + let valid_map11 = PathBuf::from("in/val/path/file.in"); + let valid_map12 = PathBuf::from("in/val/path/file_stupid.in"); + let valid_map13 = PathBuf::from("in/val/path/file/dead.in"); + + let in_files = vec![invalid_map11, invalid_map12, invalid_map13, + valid_map11, valid_map12, valid_map13]; + + return in_files; + } + + #[fixture] + fn out_files() -> Vec { + let invalid_map21 = PathBuf::from("out/inv/path/file.out"); + let invalid_map22 = PathBuf::from("out/inv/path/file_stupid.out "); + let invalid_map23 = PathBuf::from("out/inv/path/file.outt"); + + let valid_map21 = PathBuf::from("out/val/path/file.out"); + let valid_map22 = PathBuf::from("out/val/path/file_stupid.out"); + let valid_map23 = PathBuf::from("out/val/path/file.out"); + + let out_files = vec![invalid_map21, invalid_map22, invalid_map23, + valid_map21, valid_map22, valid_map23]; + + return out_files; + } + #[rstest] fn test_collect_invalid(files: Vec) { let suffix = "suf"; @@ -195,4 +223,33 @@ mod tests { assert!(invalid.contains(&files[4])); assert!(invalid.contains(&files[5])); } + + #[rstest] + fn test_map(in_files: Vec, out_files: Vec) { + let mappings: (Vec<(PathBuf, PathBuf)>, Vec) = map_files(in_files, out_files); + + print_unmached(mappings.1); + assert!(&mappings.0.contains(&(in_files[0], out_files[0]))); + assert!(&mappings.0.contains(&(in_files[1], out_files[1]))); + assert!(&mappings.0.contains(&(in_files[2], out_files[2]))); + assert!(&mappings.0.contains(&(in_files[3], out_files[3]))); + assert!(&mappings.0.contains(&(in_files[4], out_files[4]))); + assert!(&mappings.0.contains(&(in_files[5], out_files[5]))); + } + + #[rstest] + fn test_check_valid_mappings(in_files: Vec, out_files: Vec) { + let in_suffix = "in"; + let out_suffix = "out"; + let invalid: Vec<(PathBuf, PathBuf)> = check_mappings(map_files(in_files, out_files).0, in_suffix, out_suffix); + + print_invalid_pairs(invalid, in_suffix, out_suffix); + assert!(&invalid.contains(&(in_files[0], out_files[0]))); + assert!(&invalid.contains(&(in_files[1], out_files[1]))); + assert!(&invalid.contains(&(in_files[2], out_files[2]))); + + assert!(!&invalid.contains(&(in_files[3], out_files[3]))); + assert!(!&invalid.contains(&(in_files[4], out_files[4]))); + assert!(!&invalid.contains(&(in_files[5], out_files[5]))); + } }