#[cfg(test)]
mod tests {
use std::path::PathBuf;
#[test]
fn test_print_output() {
let args = vec![
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: false },
verbosity: filerefine::VerbosityFields {
verbose: true,
json: false,
json_pretty: false,
json_error: false,
},
},
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: true,
json: false,
json_pretty: false,
json_error: false,
},
},
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: false,
json_error: false,
},
},
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: false,
json_error: true,
},
},
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: true,
json_error: false,
},
},
filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: false,
json_pretty: false,
json_error: false,
},
},
];
for options in args.iter() {
let paths_to_check = vec![PathBuf::from("README.md")];
let final_res = filerefine::filerefine(options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
}
}
fn setup(name1: &PathBuf, name2: &PathBuf) {
let to_correct = PathBuf::from(&name1);
std::fs::File::create(&to_correct).unwrap();
let read_only = PathBuf::from(&name2);
std::fs::File::create(&read_only).unwrap();
let mut perms = std::fs::metadata(&read_only).unwrap().permissions();
perms.set_readonly(true);
std::fs::set_permissions(&read_only, perms).unwrap();
}
fn cleanup(name1: &PathBuf, read_only: &PathBuf) {
std::fs::remove_file(&name1).unwrap();
let mut perms = std::fs::metadata(&read_only).unwrap().permissions();
perms.set_readonly(false);
std::fs::set_permissions(&read_only, perms).unwrap();
std::fs::remove_file(&read_only).unwrap();
}
#[test]
fn test_print_output_verbose_dry() {
let options = filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: true,
json: false,
json_pretty: false,
json_error: false,
},
};
let to_correct = PathBuf::from("tes t verbose dry.txt");
let read_only = PathBuf::from("test_verbose_dry.txt");
setup(&to_correct, &read_only);
let paths_to_check = vec![
PathBuf::from("README.md"),
to_correct.clone(),
read_only.clone(),
];
let final_res = filerefine::filerefine(&options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
cleanup(&to_correct, &read_only);
}
#[test]
fn test_print_output_verbose_real() {
let options = filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: false },
verbosity: filerefine::VerbosityFields {
verbose: true,
json: false,
json_pretty: false,
json_error: false,
},
};
let to_correct = PathBuf::from("tes t verbose.txt");
let read_only = PathBuf::from("test_verbose.txt");
setup(&to_correct, &read_only);
let paths_to_check = vec![
PathBuf::from("README.md"),
to_correct.clone(),
read_only.clone(),
];
let final_res = filerefine::filerefine(&options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
cleanup(&PathBuf::from("tes_t_verbose.txt"), &read_only);
}
#[test]
fn test_print_output_json_real() {
let options = filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: false },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: false,
json_error: false,
},
};
let to_correct = PathBuf::from("tes t json.txt");
let read_only = PathBuf::from("test_json.txt");
setup(&to_correct, &read_only);
let paths_to_check = vec![
PathBuf::from("README.md"),
to_correct.clone(),
read_only.clone(),
];
let final_res = filerefine::filerefine(&options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
cleanup(&PathBuf::from("tes_t_json.txt"), &read_only);
}
#[test]
fn test_print_output_json_error_real() {
let options = filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: false },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: false,
json_error: true,
},
};
let to_correct = PathBuf::from("tes t json error.txt");
let read_only = PathBuf::from("test_json_error.txt");
setup(&to_correct, &read_only);
let paths_to_check = vec![
PathBuf::from("README.md"),
to_correct.clone(),
read_only.clone(),
];
let final_res = filerefine::filerefine(&options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
cleanup(&PathBuf::from("tes_t_json_error.txt"), &read_only)
}
#[test]
fn test_print_output_json_error_dry() {
let options = filerefine::OptionnalFields {
options: filerefine::OptionsFields { dry_run: true },
verbosity: filerefine::VerbosityFields {
verbose: false,
json: true,
json_pretty: false,
json_error: true,
},
};
let to_correct = PathBuf::from("tes t json error dry.txt");
let read_only = PathBuf::from("test_json_error_dry.txt");
setup(&to_correct, &read_only);
let paths_to_check = vec![
PathBuf::from("README.md"),
to_correct.clone(),
read_only.clone(),
];
let final_res = filerefine::filerefine(&options, paths_to_check);
filerefine::print_output(&options.verbosity, final_res).unwrap();
cleanup(&to_correct, &read_only)
}
}