@@ -655,6 +655,31 @@ mod tests {
655655 ) ;
656656 }
657657
658+ #[ test]
659+ fn parse_dos_line_with_space_before_ampm ( ) {
660+ let file: File = ListParser :: parse_dos ( "04-08-14 03:09 PM 1234 readme.txt" )
661+ . ok ( )
662+ . unwrap ( ) ;
663+ pretty_assertions:: assert_eq!( file. name( ) , "readme.txt" ) ;
664+ pretty_assertions:: assert_eq!( file. size, 1234 ) ;
665+ assert ! ( file. is_file( ) ) ;
666+
667+ let file: File = ListParser :: parse_dos ( "04-08-14 10:30 AM <DIR> somedir" )
668+ . ok ( )
669+ . unwrap ( ) ;
670+ pretty_assertions:: assert_eq!( file. name( ) , "somedir" ) ;
671+ assert ! ( file. is_directory( ) ) ;
672+
673+ // Verify both formats produce the same timestamp
674+ let with_space = ListParser :: parse_dos ( "04-08-14 03:09 PM 1234 readme.txt" )
675+ . ok ( )
676+ . unwrap ( ) ;
677+ let without_space = ListParser :: parse_dos ( "04-08-14 03:09PM 1234 readme.txt" )
678+ . ok ( )
679+ . unwrap ( ) ;
680+ pretty_assertions:: assert_eq!( with_space. modified, without_space. modified) ;
681+ }
682+
658683 #[ test]
659684 fn parse_dos_line_with_comma_separated_size ( ) {
660685 let file: File = ListParser :: parse_dos ( "04-08-14 03:09PM 1,234 readme.txt" )
@@ -830,6 +855,36 @@ mod tests {
830855 . unwrap( ) ,
831856 Duration :: from_secs( 1396969740 )
832857 ) ;
858+ // Space before AM/PM
859+ pretty_assertions:: assert_eq!(
860+ ListParser :: parse_dostime( "04-08-14 03:09 PM" )
861+ . ok( )
862+ . unwrap( )
863+ . duration_since( SystemTime :: UNIX_EPOCH )
864+ . ok( )
865+ . unwrap( ) ,
866+ Duration :: from_secs( 1396969740 )
867+ ) ;
868+ // AM variant without space
869+ pretty_assertions:: assert_eq!(
870+ ListParser :: parse_dostime( "04-08-14 03:09AM" )
871+ . ok( )
872+ . unwrap( )
873+ . duration_since( SystemTime :: UNIX_EPOCH )
874+ . ok( )
875+ . unwrap( ) ,
876+ Duration :: from_secs( 1396926540 )
877+ ) ;
878+ // AM variant with space
879+ pretty_assertions:: assert_eq!(
880+ ListParser :: parse_dostime( "04-08-14 03:09 AM" )
881+ . ok( )
882+ . unwrap( )
883+ . duration_since( SystemTime :: UNIX_EPOCH )
884+ . ok( )
885+ . unwrap( ) ,
886+ Duration :: from_secs( 1396926540 )
887+ ) ;
833888 // Not enough argument for datetime
834889 assert ! ( ListParser :: parse_dostime( "04-08-14" ) . is_err( ) ) ;
835890 }
@@ -860,6 +915,16 @@ mod tests {
860915 pretty_assertions:: assert_eq!( file. name( ) , "docs" ) ;
861916 assert ! ( file. is_directory( ) ) ;
862917
918+ // cdir (current directory) should parse as directory
919+ let file = ListParser :: parse_mlsd ( "type=cdir;size=4096;modify=20181105163248; ." ) . unwrap ( ) ;
920+ pretty_assertions:: assert_eq!( file. name( ) , "." ) ;
921+ assert ! ( file. is_directory( ) ) ;
922+
923+ // pdir (parent directory) should parse as directory
924+ let file = ListParser :: parse_mlsd ( "type=pdir;size=4096;modify=20181105163248; .." ) . unwrap ( ) ;
925+ pretty_assertions:: assert_eq!( file. name( ) , ".." ) ;
926+ assert ! ( file. is_directory( ) ) ;
927+
863928 let file = ListParser :: parse_mlsd (
864929 "type=file;size=4096;modify=20181105163248;unix.mode=644; omar.txt" ,
865930 )
0 commit comments