@@ -2988,6 +2988,7 @@ def test_package_write_upm(self):
29882988 }],
29892989 "manifest_path" : "PlayServicesResolver/Editor" ,
29902990 "readme" : "PlayServicesResolver/Editor/README.md" ,
2991+ "documentation" : "PlayServicesResolver/Doc" ,
29912992 "includes" :
29922993 ["ios-resolver.unitypackage" , "jar-resolver.unitypackage" ],
29932994 "common_manifest" : {
@@ -3069,6 +3070,8 @@ def test_package_write_upm(self):
30693070 "Google.VersionHandlerImpl_v1.2.87.0.dll" ,
30703071 "package/PlayServicesResolver/Editor/"
30713072 "Google.VersionHandlerImpl_v1.2.87.0.dll.meta" ,
3073+ "package/Documentation~" ,
3074+ "package/Documentation~/index.md" ,
30723075 ], unitypackage_file .getnames ())
30733076 unitypackage_file .extractall (self .staging_dir )
30743077
@@ -3081,6 +3084,14 @@ def test_package_write_upm(self):
30813084 self .staging_dir , "package/PlayServicesResolver/Editor/"
30823085 "Google.VersionHandler.dll" )))
30833086
3087+ self .assertTrue (
3088+ filecmp .cmp (
3089+ os .path .join (
3090+ self .assets_dir ,
3091+ "PlayServicesResolver/Doc/index.md" ),
3092+ os .path .join (
3093+ self .staging_dir , "package/Documentation~/index.md" )))
3094+
30843095 # Check package.json
30853096 with open (os .path .join (self .staging_dir , "package/package.json" ),
30863097 "rt" ) as manifest :
@@ -3110,6 +3121,76 @@ def test_package_write_upm(self):
31103121 self .assertEqual (expected_override_metadata ,
31113122 yaml_dict ["PluginImporter" ]["platformData" ])
31123123
3124+ def test_package_write_upm_documentation_as_file (self ):
3125+ """Test write_upm() with documentation path as a file."""
3126+ project = export_unity_package .ProjectConfiguration (
3127+ {
3128+ "packages" : [{
3129+ "name" : "play-services-resolver.unitypackage" ,
3130+ "imports" : [{
3131+ "paths" : [
3132+ "PlayServicesResolver/Editor/Google.VersionHandler.dll" ,
3133+ ]
3134+ }],
3135+ "manifest_path" : "PlayServicesResolver/Editor" ,
3136+ # Use README.md as documentation.
3137+ "documentation" : "PlayServicesResolver/Editor/README.md" ,
3138+ "common_manifest" : {
3139+ "name" : "com.google.play-services-resolver" ,
3140+ },
3141+ "export_upm" : 1
3142+ }]
3143+ }, set (), "1.0.0" )
3144+ package = project .packages_by_name ["play-services-resolver.unitypackage" ]
3145+
3146+ upm_package = package .write_upm (
3147+ export_unity_package .GuidDatabase (
3148+ export_unity_package .DuplicateGuidsChecker (), {
3149+ "1.0.0" : {
3150+ "PlayServicesResolver/Editor/README.md" :
3151+ "baa27a4c0385454899a759d9852966b7" ,
3152+ "PlayServicesResolver/Editor/"
3153+ "play-services-resolver_version-1.0.0_manifest.txt" :
3154+ "353f6aace2cd42adb1343fc6a808f62e" ,
3155+ "com.google.play-services-resolver/package.json" :
3156+ "782a38c5f19e4bb99e927976c8daa9ac" ,
3157+ "com.google.play-services-resolver/PlayServicesResolver" :
3158+ "fa7daf703ad1430dad0cd8b764e5e6d2" ,
3159+ "com.google.play-services-resolver/PlayServicesResolver/"
3160+ "Editor" :
3161+ "2334cd7684164851a8a53db5bd5923ca" ,
3162+ }
3163+ }, "1.0.0" ), [self .assets_dir ], self .staging_dir , 0 )
3164+
3165+ with tarfile .open (upm_package , "r:gz" ) as upm_package_file :
3166+ # Check included files.
3167+ self .assertCountEqual ([
3168+ "package" ,
3169+ "package/package.json" ,
3170+ "package/package.json.meta" ,
3171+ "package/PlayServicesResolver" ,
3172+ "package/PlayServicesResolver.meta" ,
3173+ "package/PlayServicesResolver/Editor" ,
3174+ "package/PlayServicesResolver/Editor.meta" ,
3175+ "package/PlayServicesResolver/Editor/Google.VersionHandler.dll" ,
3176+ "package/PlayServicesResolver/Editor/Google.VersionHandler.dll.meta" ,
3177+ "package/PlayServicesResolver/Editor/"
3178+ "play-services-resolver_version-1.0.0_manifest.txt" ,
3179+ "package/PlayServicesResolver/Editor/"
3180+ "play-services-resolver_version-1.0.0_manifest.txt.meta" ,
3181+ "package/Documentation~" ,
3182+ "package/Documentation~/index.md" ,
3183+ ], upm_package_file .getnames ())
3184+ upm_package_file .extractall (self .staging_dir )
3185+
3186+ self .assertTrue (
3187+ filecmp .cmp (
3188+ os .path .join (
3189+ self .assets_dir ,
3190+ "PlayServicesResolver/Editor/README.md" ),
3191+ os .path .join (
3192+ self .staging_dir , "package/Documentation~/index.md" )))
3193+
31133194 def test_package_write_upm_missing_readme (self ):
31143195 """Test write_upm() with misconfigured readme path."""
31153196 project = export_unity_package .ProjectConfiguration (
@@ -3204,13 +3285,20 @@ def setUp(self):
32043285 """Unpack resources to a temporary directory."""
32053286 super (FileOperationsTest , self ).setUp ()
32063287 self .assets_dir = os .path .join (TEST_DATA_PATH , "Assets" )
3288+ self .temp_dir = os .path .join (FLAGS .test_tmpdir , "copy_temp" )
3289+ os .makedirs (self .temp_dir )
3290+
3291+ def tearDown (self ):
3292+ """Clean up the temporary directory."""
3293+ super (FileOperationsTest , self ).tearDown ()
3294+ shutil .rmtree (self .temp_dir )
32073295
32083296 def test_copy_and_set_rwx (self ):
32093297 """Copy a file and set it to readable / writeable and executable."""
32103298 source_path = os .path .join (
32113299 self .assets_dir ,
32123300 "PlayServicesResolver/Editor/play-services-resolver_v1.2.87.0.txt" )
3213- target_path = os .path .join (FLAGS . test_tmpdir ,
3301+ target_path = os .path .join (self . temp_dir ,
32143302 "play-services-resolver_v1.2.87.0.txt" )
32153303 self .assertFalse (os .path .exists (target_path ))
32163304
@@ -3227,7 +3315,7 @@ def test_copy_and_set_rwx_new_dir(self):
32273315 self .assets_dir ,
32283316 "PlayServicesResolver/Editor/play-services-resolver_v1.2.87.0.txt" )
32293317 target_path = os .path .join (
3230- FLAGS . test_tmpdir ,
3318+ self . temp_dir ,
32313319 "a/nonexistent/directory/play-services-resolver_v1.2.87.0.txt" )
32323320 self .assertFalse (os .path .exists (target_path ))
32333321
@@ -3262,6 +3350,29 @@ def test_copy_files_to_dir(self):
32623350 finally :
32633351 export_unity_package .copy_and_set_rwx = original_copy_and_set_rwx
32643352
3353+ def test_copy_dir_to_dir (self ):
3354+ """Test copying directory into a directory recursively."""
3355+ source_path = os .path .join (
3356+ self .assets_dir ,
3357+ "PlayServicesResolver" )
3358+ target_path = os .path .join (
3359+ FLAGS .test_tmpdir ,
3360+ "a/nonexistent/directory" )
3361+ self .assertFalse (os .path .exists (target_path ))
3362+
3363+ export_unity_package .copy_and_set_rwx (source_path , target_path )
3364+ self .assertTrue (os .path .exists (target_path ))
3365+ cmp_result = filecmp .dircmp (source_path , target_path )
3366+ self .assertFalse (cmp_result .left_only or cmp_result .right_only or
3367+ cmp_result .diff_files )
3368+ self .assertEqual (
3369+ stat .S_IRUSR | stat .S_IWUSR | stat .S_IXUSR ,
3370+ os .stat (os .path .join (target_path , "Editor" )).st_mode & stat .S_IRWXU )
3371+ self .assertEqual (
3372+ stat .S_IRUSR | stat .S_IWUSR | stat .S_IXUSR ,
3373+ (os .stat (os .path .join (target_path , "Editor.meta" )).st_mode &
3374+ stat .S_IRWXU ))
3375+
32653376
32663377class ReadJsonFileTest (absltest .TestCase ):
32673378 """Test reading a JSON file."""
0 commit comments