101 lines
2.5 KiB
Rust
101 lines
2.5 KiB
Rust
#![cfg(windows)]
|
|
use remove_dir_all::remove_dir_all;
|
|
use std::fs::{self, File};
|
|
|
|
macro_rules! assert_not_found {
|
|
($path:expr) => {{
|
|
match fs::metadata($path) {
|
|
Ok(_) => panic!("did not expect to retrieve metadata for {}", $path),
|
|
Err(ref err) if err.kind() != ::std::io::ErrorKind::NotFound => {
|
|
panic!("expected path {} to be NotFound, was {:?}", $path, err)
|
|
}
|
|
_ => {}
|
|
}
|
|
}};
|
|
}
|
|
|
|
#[test]
|
|
fn removes_empty() {
|
|
fs::create_dir_all("./empty").unwrap();
|
|
assert!(fs::metadata("./empty").unwrap().is_dir());
|
|
|
|
remove_dir_all("./empty").unwrap();
|
|
assert_not_found!("./empty");
|
|
}
|
|
|
|
#[test]
|
|
fn removes_files() {
|
|
fs::create_dir_all("./files").unwrap();
|
|
|
|
for i in 0..5 {
|
|
let path = format!("./files/empty-{}.txt", i);
|
|
|
|
{
|
|
let mut _file = File::create(&path);
|
|
}
|
|
|
|
assert!(fs::metadata(&path).unwrap().is_file());
|
|
}
|
|
|
|
remove_dir_all("./files").unwrap();
|
|
assert_not_found!("./files");
|
|
}
|
|
|
|
#[test]
|
|
fn removes_dirs() {
|
|
for i in 0..5 {
|
|
let path = format!("./dirs/{}/subdir", i);
|
|
|
|
fs::create_dir_all(&path).unwrap();
|
|
|
|
assert!(fs::metadata(&path).unwrap().is_dir());
|
|
}
|
|
|
|
remove_dir_all("./dirs").unwrap();
|
|
assert_not_found!("./dirs");
|
|
}
|
|
|
|
#[test]
|
|
fn removes_read_only() {
|
|
env_logger::init();
|
|
for i in 0..5 {
|
|
let path = format!("./readonly/{}/subdir", i);
|
|
|
|
fs::create_dir_all(&path).unwrap();
|
|
|
|
let file_path = format!("{}/file.txt", path);
|
|
{
|
|
let file = File::create(&file_path).unwrap();
|
|
|
|
if i % 2 == 0 {
|
|
let metadata = file.metadata().unwrap();
|
|
let mut permissions = metadata.permissions();
|
|
permissions.set_readonly(true);
|
|
|
|
fs::set_permissions(&file_path, permissions).unwrap();
|
|
}
|
|
}
|
|
|
|
assert_eq!(
|
|
i % 2 == 0,
|
|
fs::metadata(&file_path).unwrap().permissions().readonly()
|
|
);
|
|
|
|
if i % 2 == 1 {
|
|
let metadata = fs::metadata(&path).unwrap();
|
|
|
|
let mut permissions = metadata.permissions();
|
|
permissions.set_readonly(true);
|
|
|
|
fs::set_permissions(&path, permissions).unwrap();
|
|
|
|
assert!(fs::metadata(&path).unwrap().permissions().readonly());
|
|
}
|
|
}
|
|
|
|
remove_dir_all("./readonly").unwrap();
|
|
assert_not_found!("./readonly");
|
|
}
|
|
|
|
// TODO: Should probably test readonly hard links...
|