use search_path::SearchPath;
use std::path::PathBuf;
#[cfg(target_family = "windows")]
fn make_full_search_path() -> SearchPath {
String::from("tests;tests/a;tests/b;tests/c;tests/e/f;tests/e/f/g").into()
}
#[cfg(not(target_family = "windows"))]
fn make_full_search_path() -> SearchPath {
String::from("tests:tests/a:tests/b:tests/c:tests/e/f:tests/e/f/g").into()
}
#[cfg(target_family = "windows")]
fn make_partial_search_path() -> SearchPath {
String::from("tests/a;tests/c;tests/e/f/g").into()
}
#[cfg(not(target_family = "windows"))]
fn make_partial_search_path() -> SearchPath {
String::from("tests/a:tests/c:tests/e/f/g").into()
}
#[test]
fn find_file_full() {
let search_path = make_full_search_path();
let result = search_path.find(&PathBuf::from("a.txt"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/a.txt"))
}
#[test]
fn find_directory_full() {
let search_path = make_full_search_path();
let result = search_path.find(&PathBuf::from("d"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/b/d"))
}
#[test]
fn find_file_partial() {
let search_path = make_partial_search_path();
let result = search_path.find(&PathBuf::from("a.txt"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/e/f/g/a.txt"))
}
#[test]
fn find_no_file_full() {
let search_path = make_full_search_path();
let result = search_path.find(&PathBuf::from("none.txt"));
assert!(result.is_none());
}
#[test]
fn find_all_files_full() {
let search_path = make_full_search_path();
let files = search_path.find_all(&PathBuf::from("a.txt"));
assert_eq!(files.len(), 3);
assert_eq!(
files,
vec![
PathBuf::from("tests/a.txt"),
PathBuf::from("tests/b/a.txt"),
PathBuf::from("tests/e/f/g/a.txt")
]
)
}
#[test]
fn find_file_only_full() {
let search_path = make_full_search_path();
let result = search_path.find_file(&PathBuf::from("a.txt"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/a.txt"))
}
#[test]
fn find_no_file_only_full() {
let search_path = make_full_search_path();
let result = search_path.find_file(&PathBuf::from("d"));
assert!(result.is_none());
}
#[test]
fn find_directory_only_full() {
let search_path = make_full_search_path();
let result = search_path.find_directory(&PathBuf::from("d"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/b/d"))
}
#[test]
fn find_no_directory_only_full() {
let search_path = make_full_search_path();
let result = search_path.find_directory(&PathBuf::from("a.txt"));
assert!(result.is_none());
}
#[test]
fn find_path_file_full() {
let search_path = make_full_search_path();
let result = search_path.find(&PathBuf::from("g/a.txt"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/e/f/g/a.txt"))
}
#[test]
fn find_filename_partial() {
let search_path = make_partial_search_path();
let result = search_path.find_if_name_only(&PathBuf::from("a.txt"));
assert!(result.is_some());
let file = result.unwrap();
assert_eq!(file, PathBuf::from("tests/e/f/g/a.txt"))
}
#[test]
fn find_filename_with_directory_partial() {
let search_path = make_partial_search_path();
let result = search_path.find_if_name_only(&PathBuf::from("g/a.txt"));
assert!(result.is_none());
}