gix-command 0.10.1

A crate of the gitoxide project handling internal git command execution
Documentation
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(())
}