49 lines · 1.7 KB · Rust
RawDownload
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(())}