use super::*; #[test] fn internal_win_path_lookup() -> gix_testtools::Result { let root = gix_testtools::scripted_fixture_read_only("win_path_lookup.sh")?; let mut paths: Vec<_> = std::fs::read_dir(&root)? .filter_map(Result::ok) .map(|e| e.path().to_str().expect("no illformed UTF8").to_owned()) .collect(); paths.sort(); paths.insert(0, String::new()); let joined_paths = std::env::join_paths(paths)?; assert_eq!( win_path_lookup("a/b".as_ref(), &joined_paths), None, "any path with separator is considered ready to use" ); assert!( std::path::Path::new("Cargo.toml").is_file(), "the empty-PATH check needs a file in the current directory" ); assert_eq!( win_path_lookup("Cargo.toml".as_ref(), std::ffi::OsStr::new("")), None, "empty PATH entries don't search the current directory" ); assert_eq!( win_path_lookup("x".as_ref(), &joined_paths), Some(root.join("a").join("x.exe")), "exe will be preferred, and it searches left to right thus doesn't find c/x.exe" ); assert_eq!( win_path_lookup("x.exe".as_ref(), &joined_paths), Some(root.join("a").join("x.exe")), "no matter what, a/x won't be found as it's shadowed by an exe file" ); assert_eq!( win_path_lookup("exe.com".as_ref(), &joined_paths), Some(root.join("b").join("exe.com")), "an explicitly requested suffix is preserved" ); assert_eq!( win_path_lookup("exe".as_ref(), &joined_paths), Some(root.join("b").join("exe")), "it finds files further down the path as well" ); Ok(()) }