@@ -296,4 +296,20 @@ public void testBackslash() throws Exception {
296
296
new S3DefaultDeleteFeature (session , new S3AccessControlListFeature (session )).delete (Collections .singletonList (test ), new DisabledLoginCallback (), new Delete .DisabledCallback ());
297
297
assertFalse (new S3FindFeature (session , new S3AccessControlListFeature (session )).find (test ));
298
298
}
299
+
300
+ @ Test
301
+ public void testTouchUriEncoding () throws Exception {
302
+ final Path container = new Path ("test-eu-central-1-cyberduck" , EnumSet .of (Path .Type .volume , Path .Type .directory ));
303
+ final S3AccessControlListFeature acl = new S3AccessControlListFeature (session );
304
+ final Path directory = new S3DirectoryFeature (session , new S3WriteFeature (session , new S3AccessControlListFeature (session )), new S3AccessControlListFeature (session )).mkdir (
305
+ new Path (container , String .format ("%s-+*~@([" , new AsciiRandomStringService ().random ()), EnumSet .of (Path .Type .file )), new TransferStatus ());
306
+ assertNull (directory .attributes ().getVersionId ());
307
+ assertTrue (new S3FindFeature (session , acl ).find (directory ));
308
+ assertEquals (directory .attributes (), new S3AttributesFinderFeature (session , acl ).find (directory ));
309
+ final Path test = new S3TouchFeature (session , acl ).touch (
310
+ new Path (directory , new AlphanumericRandomStringService ().random (), EnumSet .of (Path .Type .file )), new TransferStatus ());
311
+ assertTrue (new S3FindFeature (session , acl ).find (test ));
312
+ new S3DefaultDeleteFeature (session , acl ).delete (Arrays .asList (test , directory ), new DisabledLoginCallback (), new Delete .DisabledCallback ());
313
+ assertFalse (new S3FindFeature (session , acl ).find (directory ));
314
+ }
299
315
}
0 commit comments