blob: 264ff0e1414b6197a646a4289ff38ddf259aabce [file] [log] [blame]
#![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...