1 #![cfg(windows)]
2 use remove_dir_all::remove_dir_all;
3 use std::fs::{self, File};
4
5 macro_rules! assert_not_found {
6 ($path:expr) => {{
7 match fs::metadata($path) {
8 Ok(_) => panic!("did not expect to retrieve metadata for {}", $path),
9 Err(ref err) if err.kind() != ::std::io::ErrorKind::NotFound => {
10 panic!("expected path {} to be NotFound, was {:?}", $path, err)
11 }
12 _ => {}
13 }
14 }};
15 }
16
17 #[test]
removes_empty()18 fn removes_empty() {
19 fs::create_dir_all("./empty").unwrap();
20 assert!(fs::metadata("./empty").unwrap().is_dir());
21
22 remove_dir_all("./empty").unwrap();
23 assert_not_found!("./empty");
24 }
25
26 #[test]
removes_files()27 fn removes_files() {
28 fs::create_dir_all("./files").unwrap();
29
30 for i in 0..5 {
31 let path = format!("./files/empty-{}.txt", i);
32
33 {
34 let mut _file = File::create(&path);
35 }
36
37 assert!(fs::metadata(&path).unwrap().is_file());
38 }
39
40 remove_dir_all("./files").unwrap();
41 assert_not_found!("./files");
42 }
43
44 #[test]
removes_dirs()45 fn removes_dirs() {
46 for i in 0..5 {
47 let path = format!("./dirs/{}/subdir", i);
48
49 fs::create_dir_all(&path).unwrap();
50
51 assert!(fs::metadata(&path).unwrap().is_dir());
52 }
53
54 remove_dir_all("./dirs").unwrap();
55 assert_not_found!("./dirs");
56 }
57
58 #[test]
removes_read_only()59 fn removes_read_only() {
60 env_logger::init();
61 for i in 0..5 {
62 let path = format!("./readonly/{}/subdir", i);
63
64 fs::create_dir_all(&path).unwrap();
65
66 let file_path = format!("{}/file.txt", path);
67 {
68 let file = File::create(&file_path).unwrap();
69
70 if i % 2 == 0 {
71 let metadata = file.metadata().unwrap();
72 let mut permissions = metadata.permissions();
73 permissions.set_readonly(true);
74
75 fs::set_permissions(&file_path, permissions).unwrap();
76 }
77 }
78
79 assert_eq!(
80 i % 2 == 0,
81 fs::metadata(&file_path).unwrap().permissions().readonly()
82 );
83
84 if i % 2 == 1 {
85 let metadata = fs::metadata(&path).unwrap();
86
87 let mut permissions = metadata.permissions();
88 permissions.set_readonly(true);
89
90 fs::set_permissions(&path, permissions).unwrap();
91
92 assert!(fs::metadata(&path).unwrap().permissions().readonly());
93 }
94 }
95
96 remove_dir_all("./readonly").unwrap();
97 assert_not_found!("./readonly");
98 }
99
100 // TODO: Should probably test readonly hard links...
101