91 lines · 2.5 KB · Rust
RawDownload
fn stack() -> gix_status::SymlinkCheck {    stack_in("base")} fn stack_in(dir: &str) -> gix_status::SymlinkCheck {    gix_status::SymlinkCheck::new(        crate::scripted_fixture_read_only("symlink_stack.sh")            .expect("valid script")            .join(dir),    )} #[test]fn paths_not_going_through_symlink_directories_are_ok_and_point_to_correct_item() -> crate::Result {    for root in ["base", "symlink-base"] {        let mut stack = stack_in(root);        for (rela_path, expectation) in [            ("root-filelink", is_symlink as fn(&std::fs::Metadata) -> bool),            ("root-dirlink", is_symlinked_dir),            ("file", is_file),            ("dir/file-in-dir", is_file),            ("dir", is_dir),            ("dir/subdir", is_dir),            ("dir/filelink", is_symlink),            ("dir/dirlink", is_symlinked_dir),        ] {            assert!(                expectation(&stack.verified_path(rela_path)?.symlink_metadata()?),                "{rela_path:?} expectation failed"            );        }    }    Ok(())} #[test]fn leaf_file_does_not_have_to_exist() -> crate::Result {    assert!(!stack().verified_path("dir/does-not-exist")?.exists());    Ok(())} #[test]#[cfg(not(windows))]fn intermediate_directories_have_to_exist_or_not_found_error() -> crate::Result {    assert_eq!(        stack().verified_path("nonexisting-dir/file").unwrap_err().kind(),        std::io::ErrorKind::NotFound    );    Ok(())} #[test]#[cfg(windows)]fn intermediate_directories_do_not_have_exist_for_success() -> crate::Result {    assert!(stack().verified_path("nonexisting-dir/file").is_ok());    Ok(())} #[test]#[cfg_attr(    windows,    ignore = "on windows, symlinks appear to be files or dirs, is_symlink() doesn't work")]fn paths_leading_through_symlinks_are_rejected() {    let mut stack = stack();    assert_eq!(        stack.verified_path("root-dirlink/file-in-dir").unwrap_err().kind(),        std::io::ErrorKind::Other,        "root-dirlink is a symlink to a directory"    );     assert_eq!(        stack.verified_path("dir/dirlink/nothing").unwrap_err().kind(),        std::io::ErrorKind::Other,        "root-dirlink is a symlink to a directory"    );} fn is_symlink(m: &std::fs::Metadata) -> bool {    m.is_symlink()} fn is_symlinked_dir(m: &std::fs::Metadata) -> bool {    m.is_symlink()}fn is_file(m: &std::fs::Metadata) -> bool {    m.is_file()}fn is_dir(m: &std::fs::Metadata) -> bool {    m.is_dir()}