@@ -8082,7 +8082,7 @@ fn test_cp_not_existing_no_preserve_dir() {
80828082
80838083 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
80848084
8085- assert_eq ! ( 0o777 & ! 0o700 , d2_mode & 0o777 ) ;
8085+ assert_eq ! ( ! 0o700 & 0o777 , d2_mode & 0o777 ) ;
80868086}
80878087
80888088#[ test]
@@ -8106,7 +8106,7 @@ fn test_cp_not_existing_default_file() {
81068106
81078107 let f2_mode = at. metadata ( "f2" ) . mode ( ) ;
81088108
8109- assert_eq ! ( 0o770 & ! 0o700 , f2_mode & 0o777 ) ;
8109+ assert_eq ! ( ! 0o700 & 0o770 , f2_mode & 0o777 ) ;
81108110}
81118111
81128112#[ test]
@@ -8131,7 +8131,7 @@ fn test_cp_not_existing_default_dir() {
81318131
81328132 let d2_mode = at. metadata ( "d2" ) . mode ( ) ;
81338133
8134- assert_eq ! ( 0o770 & ! 0o700 , d2_mode & 0o777 ) ;
8134+ assert_eq ! ( ! 0o700 & 0o770 , d2_mode & 0o777 ) ;
81358135}
81368136
81378137#[ test]
@@ -8188,3 +8188,39 @@ fn test_cp_not_existing_preserve_dir() {
81888188
81898189 assert_eq ! ( d1_mode, d2_mode) ;
81908190}
8191+
8192+ #[ test]
8193+ #[ cfg( unix) ]
8194+ // adapted from GNU tests/cp/cp-parents
8195+ fn test_cp_not_existing_no_preserve_file_parents ( ) {
8196+ use std:: io;
8197+
8198+ let scene = TestScenario :: new ( util_name ! ( ) ) ;
8199+ let at = & scene. fixtures ;
8200+
8201+ scene. cmd ( "mkdir" ) . arg ( "d1" ) . succeeds ( ) ;
8202+ scene. cmd ( "mkdir" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8203+ scene. cmd ( "touch" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8204+ scene. cmd ( "chmod" ) . arg ( "770" ) . arg ( "d1" ) . succeeds ( ) ;
8205+ scene. cmd ( "chmod" ) . arg ( "700" ) . arg ( "d1/d2" ) . succeeds ( ) ;
8206+ scene. cmd ( "chmod" ) . arg ( "775" ) . arg ( "d1/d2/f" ) . succeeds ( ) ;
8207+ scene. cmd ( "mkdir" ) . arg ( "d3" ) . succeeds ( ) ;
8208+
8209+ scene
8210+ . ucmd ( )
8211+ . umask ( 0o022 )
8212+ . arg ( "--no-preserve=mode" )
8213+ . arg ( "--parents" )
8214+ . arg ( "d1/d2/f" )
8215+ . arg ( "d3" )
8216+ . set_stdout ( io:: stdout ( ) )
8217+ . succeeds ( ) ;
8218+
8219+ let d1_mode = at. metadata ( "d3/d1" ) . mode ( ) ;
8220+ let d2_mode = at. metadata ( "d3/d1/d2" ) . mode ( ) ;
8221+ let f_mode = at. metadata ( "d3/d1/d2/f" ) . mode ( ) ;
8222+
8223+ assert_eq ! ( !0o022 & 0o777 , d1_mode & 0o777 ) ;
8224+ assert_eq ! ( !0o022 & 0o777 , d2_mode & 0o777 ) ;
8225+ assert_eq ! ( !0o022 & 0o666 , f_mode & 0o777 ) ;
8226+ }
0 commit comments