@@ -43,6 +43,11 @@ def _scratch_file(self, path, content=""):
4343 fp .write (content )
4444 return full_path
4545
46+ def _scratch_directory (self , path ):
47+ full_path = os .path .join (self ._scratch_dir , path )
48+ os .makedirs (full_path , exist_ok = True )
49+ return full_path
50+
4651 def _scratch_symlink (self , path , target ):
4752 full_path = os .path .join (self ._scratch_dir , path )
4853 os .makedirs (os .path .dirname (full_path ), exist_ok = True )
@@ -296,7 +301,11 @@ def test_create_framework_zip_preserves_versioned_framework_symlinks(self):
296301 temp_path , output_zip )
297302
298303 with zipfile .ZipFile (output_zip ) as zip_file :
299- self .assertNotIn ("Foo.framework/Resources/" , zip_file .namelist ())
304+ zip_names = zip_file .namelist ()
305+ self .assertNotIn ("Foo.framework/Versions/" , zip_names )
306+ self .assertNotIn ("Foo.framework/Versions/A/" , zip_names )
307+ self .assertNotIn ("Foo.framework/Versions/A/Resources/" , zip_names )
308+ self .assertNotIn ("Foo.framework/Resources/" , zip_names )
300309 self .assertEqual (
301310 b"Versions/Current/Resources" ,
302311 zip_file .read ("Foo.framework/Resources" ),
@@ -311,5 +320,31 @@ def test_create_framework_zip_preserves_versioned_framework_symlinks(self):
311320 zip_file .getinfo (
312321 "Foo.framework/Versions/Current" ).external_attr >> 16 ))
313322
323+ def test_create_framework_zip_preserves_empty_versioned_directory (self ):
324+ temp_path = os .path .join (self ._scratch_dir , "out" , "Foo.framework" )
325+ output_zip = os .path .join (self ._scratch_dir , "Foo.zip" )
326+ self ._scratch_file ("out/Foo.framework/Versions/A/Foo" , "binary" )
327+ self ._scratch_directory ("out/Foo.framework/Versions/A/Headers" )
328+ self ._scratch_symlink ("out/Foo.framework/Versions/Current" , "A" )
329+ self ._scratch_symlink (
330+ "out/Foo.framework/Headers" , "Versions/Current/Headers" )
331+
332+ imported_dynamic_framework_processor ._create_framework_zip (
333+ temp_path , output_zip )
334+
335+ with zipfile .ZipFile (output_zip ) as zip_file :
336+ zip_names = zip_file .namelist ()
337+ self .assertIn ("Foo.framework/Versions/A/Headers/" , zip_names )
338+ self .assertNotIn ("Foo.framework/Headers/" , zip_names )
339+ self .assertEqual (
340+ b"Versions/Current/Headers" ,
341+ zip_file .read ("Foo.framework/Headers" ),
342+ )
343+ self .assertTrue (stat .S_ISLNK (
344+ zip_file .getinfo ("Foo.framework/Headers" ).external_attr >> 16 ))
345+ self .assertTrue (stat .S_ISDIR (
346+ zip_file .getinfo (
347+ "Foo.framework/Versions/A/Headers/" ).external_attr >> 16 ))
348+
314349if __name__ == "__main__" :
315350 unittest .main ()
0 commit comments