1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3 
4 use tokio::fs;
5 use tokio_test::{assert_err, assert_ok};
6 
7 use std::sync::{Arc, Mutex};
8 use tempfile::tempdir;
9 
10 #[tokio::test]
11 async fn create_dir() {
12     let base_dir = tempdir().unwrap();
13     let new_dir = base_dir.path().join("foo");
14     let new_dir_2 = new_dir.clone();
15 
16     assert_ok!(fs::create_dir(new_dir).await);
17 
18     assert!(new_dir_2.is_dir());
19 }
20 
21 #[tokio::test]
22 async fn create_all() {
23     let base_dir = tempdir().unwrap();
24     let new_dir = base_dir.path().join("foo").join("bar");
25     let new_dir_2 = new_dir.clone();
26 
27     assert_ok!(fs::create_dir_all(new_dir).await);
28     assert!(new_dir_2.is_dir());
29 }
30 
31 #[tokio::test]
32 async fn build_dir() {
33     let base_dir = tempdir().unwrap();
34     let new_dir = base_dir.path().join("foo").join("bar");
35     let new_dir_2 = new_dir.clone();
36 
37     assert_ok!(fs::DirBuilder::new().recursive(true).create(new_dir).await);
38 
39     assert!(new_dir_2.is_dir());
40     assert_err!(
41         fs::DirBuilder::new()
42             .recursive(false)
43             .create(new_dir_2)
44             .await
45     );
46 }
47 
48 #[tokio::test]
49 async fn remove() {
50     let base_dir = tempdir().unwrap();
51     let new_dir = base_dir.path().join("foo");
52     let new_dir_2 = new_dir.clone();
53 
54     std::fs::create_dir(new_dir.clone()).unwrap();
55 
56     assert_ok!(fs::remove_dir(new_dir).await);
57     assert!(!new_dir_2.exists());
58 }
59 
60 #[tokio::test]
61 async fn read_inherent() {
62     let base_dir = tempdir().unwrap();
63 
64     let p = base_dir.path();
65     std::fs::create_dir(p.join("aa")).unwrap();
66     std::fs::create_dir(p.join("bb")).unwrap();
67     std::fs::create_dir(p.join("cc")).unwrap();
68 
69     let files = Arc::new(Mutex::new(Vec::new()));
70 
71     let f = files.clone();
72     let p = p.to_path_buf();
73 
74     let mut entries = fs::read_dir(p).await.unwrap();
75 
76     while let Some(e) = assert_ok!(entries.next_entry().await) {
77         let s = e.file_name().to_str().unwrap().to_string();
78         f.lock().unwrap().push(s);
79     }
80 
81     let mut files = files.lock().unwrap();
82     files.sort(); // because the order is not guaranteed
83     assert_eq!(
84         *files,
85         vec!["aa".to_string(), "bb".to_string(), "cc".to_string()]
86     );
87 }
88