summaryrefslogtreecommitdiffstats
path: root/vendor/rustix/tests/fs/readdir.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/rustix/tests/fs/readdir.rs')
-rw-r--r--vendor/rustix/tests/fs/readdir.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/vendor/rustix/tests/fs/readdir.rs b/vendor/rustix/tests/fs/readdir.rs
new file mode 100644
index 000000000..8925660a9
--- /dev/null
+++ b/vendor/rustix/tests/fs/readdir.rs
@@ -0,0 +1,68 @@
+#![cfg(not(target_os = "redox"))]
+
+use rustix::fs::{Dir, DirEntry};
+use std::collections::HashMap;
+
+#[test]
+fn dir_entries() {
+ let tmpdir = tempfile::tempdir().expect("construct tempdir");
+ let dirfd = std::fs::File::open(tmpdir.path()).expect("open tempdir as file");
+ let mut dir = Dir::read_from(dirfd).expect("construct Dir from dirfd");
+
+ let entries = read_entries(&mut dir);
+ assert_eq!(entries.len(), 0, "no files in directory");
+
+ let _f1 = std::fs::File::create(tmpdir.path().join("file1")).expect("create file1");
+
+ let entries = read_entries(&mut dir);
+ assert!(
+ entries.get("file1").is_some(),
+ "directory contains `file1`: {:?}",
+ entries
+ );
+ assert_eq!(entries.len(), 1);
+
+ let _f2 = std::fs::File::create(tmpdir.path().join("file2")).expect("create file1");
+ let entries = read_entries(&mut dir);
+ assert!(
+ entries.get("file1").is_some(),
+ "directory contains `file1`: {:?}",
+ entries
+ );
+ assert!(
+ entries.get("file2").is_some(),
+ "directory contains `file2`: {:?}",
+ entries
+ );
+ assert_eq!(entries.len(), 2);
+}
+
+fn read_entries(dir: &mut Dir) -> HashMap<String, DirEntry> {
+ dir.rewind();
+ let mut out = HashMap::new();
+ loop {
+ match dir.read() {
+ Some(e) => {
+ let e = e.expect("non-error entry");
+ let name = e.file_name().to_str().expect("utf8 filename").to_owned();
+ if name != "." && name != ".." {
+ out.insert(name, e);
+ }
+ }
+ None => break,
+ }
+ }
+ out
+}
+
+#[test]
+fn dir_from_openat() {
+ let dirfd = rustix::fs::openat(
+ rustix::fs::cwd(),
+ ".",
+ rustix::fs::OFlags::RDONLY,
+ rustix::fs::Mode::empty(),
+ )
+ .expect("open cwd as file");
+ let _dir = Dir::read_from(dirfd).expect("construct Dir from dirfd");
+}