1 #![warn(rust_2018_idioms)] 2 #![cfg(feature = "full")] 3 4 use tokio::fs; 5 use tokio_test::assert_ok; 6 7 use std::sync::{Arc, Mutex}; 8 use tempfile::tempdir; 9 10 #[tokio::test] create_dir()11async 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] create_all()22async 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] remove()32async fn remove() { 33 let base_dir = tempdir().unwrap(); 34 let new_dir = base_dir.path().join("foo"); 35 let new_dir_2 = new_dir.clone(); 36 37 std::fs::create_dir(new_dir.clone()).unwrap(); 38 39 assert_ok!(fs::remove_dir(new_dir).await); 40 assert!(!new_dir_2.exists()); 41 } 42 43 #[tokio::test] read_inherent()44async fn read_inherent() { 45 let base_dir = tempdir().unwrap(); 46 47 let p = base_dir.path(); 48 std::fs::create_dir(p.join("aa")).unwrap(); 49 std::fs::create_dir(p.join("bb")).unwrap(); 50 std::fs::create_dir(p.join("cc")).unwrap(); 51 52 let files = Arc::new(Mutex::new(Vec::new())); 53 54 let f = files.clone(); 55 let p = p.to_path_buf(); 56 57 let mut entries = fs::read_dir(p).await.unwrap(); 58 59 while let Some(e) = assert_ok!(entries.next_entry().await) { 60 let s = e.file_name().to_str().unwrap().to_string(); 61 f.lock().unwrap().push(s); 62 } 63 64 let mut files = files.lock().unwrap(); 65 files.sort(); // because the order is not guaranteed 66 assert_eq!( 67 *files, 68 vec!["aa".to_string(), "bb".to_string(), "cc".to_string()] 69 ); 70 } 71 72 #[tokio::test] read_stream()73async fn read_stream() { 74 use tokio::stream::StreamExt; 75 76 let base_dir = tempdir().unwrap(); 77 78 let p = base_dir.path(); 79 std::fs::create_dir(p.join("aa")).unwrap(); 80 std::fs::create_dir(p.join("bb")).unwrap(); 81 std::fs::create_dir(p.join("cc")).unwrap(); 82 83 let files = Arc::new(Mutex::new(Vec::new())); 84 85 let f = files.clone(); 86 let p = p.to_path_buf(); 87 88 let mut entries = fs::read_dir(p).await.unwrap(); 89 90 while let Some(res) = entries.next().await { 91 let e = assert_ok!(res); 92 let s = e.file_name().to_str().unwrap().to_string(); 93 f.lock().unwrap().push(s); 94 } 95 96 let mut files = files.lock().unwrap(); 97 files.sort(); // because the order is not guaranteed 98 assert_eq!( 99 *files, 100 vec!["aa".to_string(), "bb".to_string(), "cc".to_string()] 101 ); 102 } 103