about summary refs log tree commit diff
path: root/src/tools/miri/tests
diff options
context:
space:
mode:
authorAlex Saveau <saveau.alexandre@gmail.com>2022-10-19 10:43:57 -0700
committerAlex Saveau <saveau.alexandre@gmail.com>2022-10-19 11:48:56 -0700
commitb0f693552d02d3cefa0c7a01b702f61b60568533 (patch)
tree8e5ee6d3106058875772e49b583f5f77afa23e91 /src/tools/miri/tests
parent4b8f4319954ff2642690b9e5cbe4af352d095bf6 (diff)
downloadrust-b0f693552d02d3cefa0c7a01b702f61b60568533.tar.gz
rust-b0f693552d02d3cefa0c7a01b702f61b60568533.zip
Make miri read_dir test a little more robust
Signed-off-by: Alex Saveau <saveau.alexandre@gmail.com>
Diffstat (limited to 'src/tools/miri/tests')
-rw-r--r--src/tools/miri/tests/pass-dep/shims/fs.rs28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/tools/miri/tests/pass-dep/shims/fs.rs b/src/tools/miri/tests/pass-dep/shims/fs.rs
index e2a1d14f740..e573d330aa4 100644
--- a/src/tools/miri/tests/pass-dep/shims/fs.rs
+++ b/src/tools/miri/tests/pass-dep/shims/fs.rs
@@ -4,7 +4,8 @@
 #![feature(io_error_more)]
 #![feature(io_error_uncategorized)]
 
-use std::ffi::CString;
+use std::collections::HashMap;
+use std::ffi::{CString, OsString};
 use std::fs::{
     create_dir, read_dir, read_link, remove_dir, remove_dir_all, remove_file, rename, File,
     OpenOptions,
@@ -394,29 +395,34 @@ fn test_directory() {
     // Creating a directory when it already exists should fail.
     assert_eq!(ErrorKind::AlreadyExists, create_dir(&dir_path).unwrap_err().kind());
 
-    // Create some files inside the directory
+    // Create some files and dirs inside the directory
     let path_1 = dir_path.join("test_file_1");
     drop(File::create(&path_1).unwrap());
     let path_2 = dir_path.join("test_file_2");
     drop(File::create(&path_2).unwrap());
-    // Test that the files are present inside the directory
-    let dir_iter = read_dir(&dir_path).unwrap();
-    let mut file_names = dir_iter.map(|e| e.unwrap().file_name()).collect::<Vec<_>>();
-    file_names.sort_unstable();
-    assert_eq!(file_names, vec!["test_file_1", "test_file_2"]);
+    let dir_1 = dir_path.join("test_dir_1");
+    create_dir(&dir_1).unwrap();
     // Test that read_dir metadata calls succeed
     assert_eq!(
-        &[true, true],
-        &*read_dir(&dir_path)
+        HashMap::from([
+            (OsString::from("test_file_1"), true),
+            (OsString::from("test_file_2"), true),
+            (OsString::from("test_dir_1"), false)
+        ]),
+        read_dir(&dir_path)
             .unwrap()
-            .map(|e| e.unwrap().metadata().unwrap().is_file())
-            .collect::<Vec<_>>()
+            .map(|e| {
+                let e = e.unwrap();
+                (e.file_name(), e.metadata().unwrap().is_file())
+            })
+            .collect::<HashMap<_, _>>()
     );
     // Deleting the directory should fail, since it is not empty.
     assert_eq!(ErrorKind::DirectoryNotEmpty, remove_dir(&dir_path).unwrap_err().kind());
     // Clean up the files in the directory
     remove_file(&path_1).unwrap();
     remove_file(&path_2).unwrap();
+    remove_dir(&dir_1).unwrap();
     // Now there should be nothing left in the directory.
     let dir_iter = read_dir(&dir_path).unwrap();
     let file_names = dir_iter.map(|e| e.unwrap().file_name()).collect::<Vec<_>>();