• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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