@@ -9,6 +9,9 @@ use uutests::unwrap_or_return;
99use uutests:: util:: { TestScenario , expected_result} ;
1010use uutests:: util_name;
1111
12+ use std:: fs:: metadata;
13+ use std:: os:: unix:: fs:: MetadataExt ;
14+
1215#[ test]
1316fn 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