#[cfg(windows)]
mod windows_heuristic {
use std::fs;
use std::os::windows::fs::FileTypeExt;
use tempfile::TempDir;
#[test]
fn windows_symlink_probes_relative_dir_and_picks_symlink_dir() {
let tmp = TempDir::new().unwrap();
fs::create_dir_all(tmp.path().join("target_dir")).unwrap();
let link = tmp.path().join("link");
pna::fs::symlink("target_dir", &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_dir(),
"expected symlink_dir flavor; got {:?}",
meta.file_type()
);
}
#[test]
fn windows_symlink_probes_relative_file_and_picks_symlink_file() {
let tmp = TempDir::new().unwrap();
fs::write(tmp.path().join("target_file"), b"").unwrap();
let link = tmp.path().join("link");
pna::fs::symlink("target_file", &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_file(),
"expected symlink_file flavor; got {:?}",
meta.file_type()
);
}
#[test]
fn windows_symlink_missing_relative_target_defaults_to_symlink_file() {
let tmp = TempDir::new().unwrap();
let link = tmp.path().join("link");
pna::fs::symlink("missing_relative", &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_file(),
"expected symlink_file (default); got {:?}",
meta.file_type()
);
}
#[test]
fn windows_symlink_probes_absolute_dir_and_picks_symlink_dir() {
let tmp = TempDir::new().unwrap();
let target = tmp.path().join("abs_target_dir");
fs::create_dir_all(&target).unwrap();
let link = tmp.path().join("link");
pna::fs::symlink(&target, &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_dir(),
"expected symlink_dir flavor from absolute path; got {:?}",
meta.file_type()
);
}
#[test]
fn windows_symlink_probes_absolute_file_and_picks_symlink_file() {
let tmp = TempDir::new().unwrap();
let target = tmp.path().join("abs_target_file");
fs::write(&target, b"").unwrap();
let link = tmp.path().join("link");
pna::fs::symlink(&target, &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_file(),
"expected symlink_file flavor from absolute path; got {:?}",
meta.file_type()
);
}
#[test]
fn windows_symlink_missing_absolute_target_defaults_to_symlink_file() {
let tmp = TempDir::new().unwrap();
let target = tmp.path().join("missing_absolute");
let link = tmp.path().join("link");
pna::fs::symlink(&target, &link).unwrap();
let meta = fs::symlink_metadata(&link).unwrap();
assert!(
meta.file_type().is_symlink_file(),
"expected symlink_file (default) from missing absolute path; got {:?}",
meta.file_type()
);
}
}