Skip to content

Commit 2c5cf40

Browse files
committed
chore(stat): add test case for file metadata
1 parent c57b47f commit 2c5cf40

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

tests/by-util/test_stat.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ use uutests::unwrap_or_return;
99
use uutests::util::{TestScenario, expected_result};
1010
use uutests::util_name;
1111

12+
use std::fs::metadata;
13+
use std::os::unix::fs::MetadataExt;
14+
1215
#[test]
1316
fn test_invalid_arg() {
1417
new_ucmd!().arg("--definitely-invalid").fails_with_code(1);
@@ -578,3 +581,58 @@ fn test_percent_escaping() {
578581
.succeeds();
579582
assert_eq!(result.stdout_str(), "%/%m/%%");
580583
}
584+
585+
#[cfg(unix)]
586+
#[test]
587+
fn test_correct_metadata() {
588+
use uucore::fs::{major, minor};
589+
590+
let ts = TestScenario::new(util_name!());
591+
let parse = |(i, str): (usize, &str)| {
592+
// Some outputs are in hex.
593+
let radix = if matches!(i, 5 | 13 | 17..) { 16 } else { 10 };
594+
i128::from_str_radix(str, radix)
595+
};
596+
for device in ["/", "/dev/null"] {
597+
let metadata = metadata(device).unwrap();
598+
let expected = [
599+
metadata.atime() as _,
600+
metadata.mtime() as _,
601+
metadata.ctime() as _,
602+
metadata.uid() as _,
603+
metadata.gid() as _,
604+
metadata.mode() as _,
605+
metadata.blocks() as _,
606+
metadata.size() as _,
607+
metadata.nlink() as _,
608+
metadata.ino() as _,
609+
metadata.dev() as _,
610+
major(metadata.dev() as _) as _,
611+
minor(metadata.dev() as _) as _,
612+
metadata.dev() as _,
613+
metadata.rdev() as _,
614+
major(metadata.rdev() as _) as _,
615+
minor(metadata.rdev() as _) as _,
616+
metadata.rdev() as _,
617+
major(metadata.rdev() as _) as _,
618+
minor(metadata.rdev() as _) as _,
619+
];
620+
let result = ts
621+
.ucmd()
622+
.args(&[
623+
"--printf",
624+
"%X %Y %Z %u %g %f %b %s %h %i %d %Hd %Ld %D %r %Hr %Lr %R %t %T",
625+
device,
626+
])
627+
.succeeds();
628+
dbg!(result.stdout_str());
629+
let output = result
630+
.stdout_str()
631+
.split(' ')
632+
.enumerate()
633+
.map(parse)
634+
.collect::<Result<Vec<i128>, _>>()
635+
.unwrap();
636+
assert_eq!(output, &expected);
637+
}
638+
}

0 commit comments

Comments
 (0)