V1ManifestReadTest.cs (30372B)
1 // ----------------------------------------------------------------------------- 2 // <copyright file="V1ManifestReadTest.cs" company="Microsoft Corporation"> 3 // Copyright (c) Microsoft Corporation. Licensed under the MIT License. 4 // </copyright> 5 // ----------------------------------------------------------------------------- 6 7 namespace WinGetUtilInterop.UnitTests.ManifestUnitTest 8 { 9 using System.IO; 10 using System.Reflection; 11 using Microsoft.WinGetUtil.Models.V1; 12 using Microsoft.WinGetUtil.UnitTests.Common.Logging; 13 using Xunit; 14 using Xunit.Abstractions; 15 16 /// <summary> 17 /// Manifest equality tests. 18 /// </summary> 19 public class V1ManifestReadTest 20 { 21 private ITestOutputHelper log; 22 23 /// <summary> 24 /// Initializes a new instance of the <see cref="V1ManifestReadTest"/> class. 25 /// </summary> 26 /// <param name="log">Output Helper.</param> 27 public V1ManifestReadTest(ITestOutputHelper log) 28 { 29 this.log = log; 30 } 31 32 private enum TestManifestVersion 33 { 34 V1_0_0, 35 V1_1_0, 36 V1_6_0, 37 V1_7_0, 38 V1_9_0, 39 V1_10_0, 40 V1_12_0, 41 } 42 43 /// <summary> 44 /// Read v1 manifest. 45 /// </summary> 46 [Fact] 47 [DisplayTestMethodName] 48 public void ReadV1ManifestsAndVerifyContents() 49 { 50 Manifest v1_0_0manifest = Manifest.CreateManifestFromPath( 51 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_0_0ManifestMerged)); 52 53 this.ValidateManifestFields(v1_0_0manifest, TestManifestVersion.V1_0_0); 54 55 Manifest v1_1_0manifest = Manifest.CreateManifestFromPath( 56 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_1_0ManifestMerged)); 57 58 this.ValidateManifestFields(v1_1_0manifest, TestManifestVersion.V1_1_0); 59 60 Manifest v1_6_0manifest = Manifest.CreateManifestFromPath( 61 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_6_0ManifestMerged)); 62 63 this.ValidateManifestFields(v1_6_0manifest, TestManifestVersion.V1_6_0); 64 65 Manifest v1_7_0manifest = Manifest.CreateManifestFromPath( 66 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_7_0ManifestMerged)); 67 68 this.ValidateManifestFields(v1_7_0manifest, TestManifestVersion.V1_7_0); 69 70 Manifest v1_9_0manifest = Manifest.CreateManifestFromPath( 71 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_9_0ManifestMerged)); 72 73 this.ValidateManifestFields(v1_9_0manifest, TestManifestVersion.V1_9_0); 74 75 Manifest v1_10_0manifest = Manifest.CreateManifestFromPath( 76 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_10_0ManifestMerged)); 77 78 this.ValidateManifestFields(v1_10_0manifest, TestManifestVersion.V1_10_0); 79 80 Manifest v1_12_0manifest = Manifest.CreateManifestFromPath( 81 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1_12_0ManifestMerged)); 82 83 this.ValidateManifestFields(v1_12_0manifest, TestManifestVersion.V1_12_0); 84 } 85 86 /// <summary> 87 /// Read v1 manifest without additional localization. 88 /// </summary> 89 [Fact] 90 [DisplayTestMethodName] 91 public void ReadV1ManifestNoLocalization() 92 { 93 Manifest v1manifest = Manifest.CreateManifestFromPath( 94 Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V1ManifestNoLocalization)); 95 96 // Calling GetURIs() on manifest without localization should not fail. 97 v1manifest.GetURIs(); 98 } 99 100 /// <summary> 101 /// Read bad min manifest info. 102 /// </summary> 103 [Fact] 104 [DisplayTestMethodName] 105 public void ReadV1LocaleManifestInfoNoPackageLocale() 106 { 107 Assert.Throws<InvalidDataException>( 108 () => 109 { 110 _ = MinManifestInfo.CreateManifestInfoFromPath( 111 Path.Combine( 112 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), 113 "TestCollateral", 114 ManifestStrings.V1ManifestInfoMissingRequiredPackageLocale)); 115 }); 116 } 117 118 private void ValidateManifestFields(Manifest manifest, TestManifestVersion manifestVersion) 119 { 120 Assert.Equal("microsoft.msixsdk", manifest.Id); 121 Assert.Equal("1.7.32", manifest.Version); 122 123 // Default locale 124 Assert.Equal("en-US", manifest.PackageLocale); 125 Assert.Equal("Microsoft", manifest.Publisher); 126 Assert.Equal("https://www.microsoft.com", manifest.PublisherUrl); 127 Assert.Equal("https://www.microsoft.com/support", manifest.PublisherSupportUrl); 128 Assert.Equal("https://www.microsoft.com/privacy", manifest.PrivacyUrl); 129 Assert.Equal("Microsoft", manifest.Author); 130 Assert.Equal("MSIX SDK", manifest.PackageName); 131 Assert.Equal("https://www.microsoft.com/msixsdk/home", manifest.PackageUrl); 132 Assert.Equal("MIT License", manifest.License); 133 Assert.Equal("https://www.microsoft.com/msixsdk/license", manifest.LicenseUrl); 134 Assert.Equal("Copyright Microsoft Corporation", manifest.Copyright); 135 Assert.Equal("https://www.microsoft.com/msixsdk/copyright", manifest.CopyrightUrl); 136 Assert.Equal("This is MSIX SDK", manifest.ShortDescription); 137 Assert.Equal("The MSIX SDK project is an effort to enable developers", manifest.Description); 138 Assert.Equal("msixsdk", manifest.Moniker); 139 Assert.Equal(2, manifest.Tags.Count); 140 Assert.Equal("appxsdk", manifest.Tags[0]); 141 Assert.Equal("msixsdk", manifest.Tags[1]); 142 143 if (manifestVersion >= TestManifestVersion.V1_1_0) 144 { 145 Assert.Equal("Default release notes", manifest.ReleaseNotes); 146 Assert.Equal("https://DefaultReleaseNotes.net", manifest.ReleaseNotesUrl); 147 Assert.Single(manifest.Agreements); 148 Assert.Equal("DefaultLabel", manifest.Agreements[0].AgreementLabel); 149 Assert.Equal("DefaultText", manifest.Agreements[0].Agreement); 150 Assert.Equal("https://DefaultAgreementUrl.net", manifest.Agreements[0].AgreementUrl); 151 } 152 153 if (manifestVersion >= TestManifestVersion.V1_6_0) 154 { 155 Assert.Equal("Default installation notes", manifest.InstallationNotes); 156 Assert.Equal("https://DefaultPurchaseUrl.com", manifest.PurchaseUrl); 157 158 Assert.Single(manifest.Documentations); 159 ManifestDocumentation manifestDocumentation = manifest.Documentations[0]; 160 161 Assert.Equal("Default document label", manifestDocumentation.DocumentLabel); 162 Assert.Equal("https://DefaultDocumentUrl.com", manifestDocumentation.DocumentUrl); 163 164 Assert.Single(manifest.Icons); 165 ManifestIcon icon = manifest.Icons[0]; 166 167 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8123", icon.IconSha256); 168 Assert.Equal("default", icon.IconTheme); 169 Assert.Equal("https://testIcon", icon.IconUrl); 170 Assert.Equal("custom", icon.IconResolution); 171 Assert.Equal("ico", icon.IconFileType); 172 } 173 174 // Default installer 175 Assert.Equal("en-US", manifest.InstallerLocale); 176 Assert.Equal(2, manifest.Platform.Count); 177 Assert.Equal("Windows.Desktop", manifest.Platform[0]); 178 Assert.Equal("Windows.Universal", manifest.Platform[1]); 179 Assert.Equal("10.0.0.0", manifest.MinimumOSVersion); 180 181 Assert.Equal("zip", manifest.InstallerType); 182 Assert.Equal("machine", manifest.Scope); 183 Assert.Equal(3, manifest.InstallModes.Count); 184 Assert.Equal("interactive", manifest.InstallModes[0]); 185 Assert.Equal("silent", manifest.InstallModes[1]); 186 Assert.Equal("silentWithProgress", manifest.InstallModes[2]); 187 188 var defaultSwitches = manifest.Switches; 189 Assert.Equal("/custom", defaultSwitches.Custom); 190 Assert.Equal("/silentwithprogress", defaultSwitches.SilentWithProgress); 191 Assert.Equal("/silence", defaultSwitches.Silent); 192 Assert.Equal("/interactive", defaultSwitches.Interactive); 193 Assert.Equal("/log=<LOGPATH>", defaultSwitches.Log); 194 Assert.Equal("/dir=<INSTALLPATH>", defaultSwitches.InstallLocation); 195 Assert.Equal("/upgrade", defaultSwitches.Upgrade); 196 197 Assert.Equal(2, manifest.InstallerSuccessCodes.Count); 198 Assert.Equal(1, manifest.InstallerSuccessCodes[0]); 199 Assert.Equal(0x80070005, manifest.InstallerSuccessCodes[1]); 200 Assert.Equal("uninstallPrevious", manifest.UpgradeBehavior); 201 Assert.Equal(2, manifest.Commands.Count); 202 Assert.Equal("makemsix", manifest.Commands[0]); 203 Assert.Equal("makeappx", manifest.Commands[1]); 204 Assert.Equal(2, manifest.Protocols.Count); 205 Assert.Equal("protocol1", manifest.Protocols[0]); 206 Assert.Equal("protocol2", manifest.Protocols[1]); 207 Assert.Equal(4, manifest.FileExtensions.Count); 208 Assert.Equal("appx", manifest.FileExtensions[0]); 209 Assert.Equal("msix", manifest.FileExtensions[1]); 210 Assert.Equal("appxbundle", manifest.FileExtensions[2]); 211 Assert.Equal("msixbundle", manifest.FileExtensions[3]); 212 213 Assert.Single(manifest.Dependencies.WindowsFeatures); 214 Assert.Equal("IIS", manifest.Dependencies.WindowsFeatures[0]); 215 Assert.Single(manifest.Dependencies.WindowsLibraries); 216 Assert.Equal("VC Runtime", manifest.Dependencies.WindowsLibraries[0]); 217 Assert.Single(manifest.Dependencies.PackageDependencies); 218 Assert.Equal("Microsoft.MsixSdkDep", manifest.Dependencies.PackageDependencies[0].PackageIdentifier); 219 Assert.Equal("1.0.0", manifest.Dependencies.PackageDependencies[0].MinimumVersion); 220 Assert.Single(manifest.Dependencies.ExternalDependencies); 221 Assert.Equal("Outside dependencies", manifest.Dependencies.ExternalDependencies[0]); 222 223 Assert.Single(manifest.Capabilities); 224 Assert.Equal("internetClient", manifest.Capabilities[0]); 225 Assert.Single(manifest.RestrictedCapabilities); 226 Assert.Equal("runFullTrust", manifest.RestrictedCapabilities[0]); 227 Assert.Equal("Microsoft.DesktopAppInstaller_8wekyb3d8bbwe", manifest.PackageFamilyName); 228 Assert.Equal("{Foo}", manifest.ProductCode); 229 230 if (manifestVersion >= TestManifestVersion.V1_1_0) 231 { 232 Assert.Equal("2021-01-01", manifest.ReleaseDate); 233 Assert.True(manifest.InstallerAbortsTerminal); 234 Assert.True(manifest.InstallLocationRequired); 235 Assert.True(manifest.RequireExplicitUpgrade); 236 Assert.Equal("elevatesSelf", manifest.ElevationRequirement); 237 Assert.Single(manifest.UnsupportedOSArchitectures); 238 Assert.Equal("arm", manifest.UnsupportedOSArchitectures[0]); 239 Assert.Single(manifest.AppsAndFeaturesEntries); 240 Assert.Equal("DisplayName", manifest.AppsAndFeaturesEntries[0].DisplayName); 241 Assert.Equal("DisplayVersion", manifest.AppsAndFeaturesEntries[0].DisplayVersion); 242 Assert.Equal("Publisher", manifest.AppsAndFeaturesEntries[0].Publisher); 243 Assert.Equal("ProductCode", manifest.AppsAndFeaturesEntries[0].ProductCode); 244 Assert.Equal("UpgradeCode", manifest.AppsAndFeaturesEntries[0].UpgradeCode); 245 Assert.Equal("exe", manifest.AppsAndFeaturesEntries[0].InstallerType); 246 Assert.Single(manifest.Markets.AllowedMarkets); 247 Assert.Equal("US", manifest.Markets.AllowedMarkets[0]); 248 Assert.Equal(2, manifest.ExpectedReturnCodes.Count); 249 Assert.Equal(2, manifest.ExpectedReturnCodes[0].InstallerReturnCode); 250 Assert.Equal("contactSupport", manifest.ExpectedReturnCodes[0].ReturnResponse); 251 } 252 253 if (manifestVersion >= TestManifestVersion.V1_6_0) 254 { 255 Assert.Equal("msi", manifest.NestedInstallerType); 256 Assert.Single(manifest.NestedInstallerFiles); 257 InstallerNestedInstallerFile installerNestedInstallerFile = manifest.NestedInstallerFiles[0]; 258 Assert.Equal("RelativeFilePath", installerNestedInstallerFile.RelativeFilePath); 259 Assert.Equal("PortableCommandAlias", installerNestedInstallerFile.PortableCommandAlias); 260 261 InstallerInstallationMetadata installerInstallationMetadata = manifest.InstallationMetadata; 262 Assert.Equal("%ProgramFiles%\\TestApp", installerInstallationMetadata.DefaultInstallLocation); 263 Assert.Single(installerInstallationMetadata.Files); 264 265 ManifestInstallerFile installerFile = installerInstallationMetadata.Files[0]; 266 Assert.Equal("main.exe", installerFile.RelativeFilePath); 267 Assert.Equal("DisplayName", installerFile.DisplayName); 268 Assert.Equal("/arg", installerFile.InvocationParameter); 269 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installerFile.FileSha256); 270 271 Assert.Single(manifest.UnsupportedArguments); 272 Assert.Equal("log", manifest.UnsupportedArguments[0]); 273 274 Assert.Single(manifest.UnsupportedOSArchitectures); 275 Assert.Equal("arm", manifest.UnsupportedOSArchitectures[0]); 276 277 Assert.True(manifest.DisplayInstallWarnings); 278 Assert.True(manifest.DownloadCommandProhibited); 279 280 Assert.Equal("https://defaultReturnResponseUrl.com", manifest.ExpectedReturnCodes[0].ReturnResponseUrl); 281 } 282 283 if (manifestVersion >= TestManifestVersion.V1_7_0) 284 { 285 Assert.Equal("/repair", defaultSwitches.Repair); 286 Assert.Equal("uninstaller", manifest.RepairBehavior); 287 } 288 289 if (manifestVersion >= TestManifestVersion.V1_9_0) 290 { 291 Assert.True(manifest.ArchiveBinariesDependOnPath); 292 } 293 294 if (manifestVersion >= TestManifestVersion.V1_10_0) 295 { 296 Assert.Equal("microsoftEntraId", manifest.Authentication.AuthenticationType); 297 Assert.Equal("DefaultResource", manifest.Authentication.MicrosoftEntraIdAuthenticationInfo.Resource); 298 Assert.Equal("DefaultScope", manifest.Authentication.MicrosoftEntraIdAuthenticationInfo.Scope); 299 } 300 301 // Individual installers 302 if (manifestVersion >= TestManifestVersion.V1_12_0) 303 { 304 Assert.Equal(4, manifest.Installers.Count); 305 } 306 else 307 { 308 Assert.Equal(2, manifest.Installers.Count); 309 } 310 311 ManifestInstaller installer1 = manifest.Installers[0]; 312 Assert.Equal("x86", installer1.Arch); 313 Assert.Equal("en-GB", installer1.InstallerLocale); 314 Assert.Single(installer1.Platform); 315 Assert.Equal("Windows.Desktop", installer1.Platform[0]); 316 Assert.Equal("10.0.1.0", installer1.MinimumOSVersion); 317 Assert.Equal("msix", installer1.InstallerType); 318 Assert.Equal("https://www.microsoft.com/msixsdk/msixsdkx86.msix", installer1.Url); 319 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installer1.Sha256); 320 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installer1.SignatureSha256); 321 Assert.Equal("user", installer1.Scope); 322 Assert.Single(installer1.InstallModes); 323 Assert.Equal("interactive", installer1.InstallModes[0]); 324 325 var installer1Switches = installer1.Switches; 326 Assert.Equal("/c", installer1Switches.Custom); 327 Assert.Equal("/sp", installer1Switches.SilentWithProgress); 328 Assert.Equal("/s", installer1Switches.Silent); 329 Assert.Equal("/i", installer1Switches.Interactive); 330 Assert.Equal("/l=<LOGPATH>", installer1Switches.Log); 331 Assert.Equal("/d=<INSTALLPATH>", installer1Switches.InstallLocation); 332 Assert.Equal("/u", installer1Switches.Upgrade); 333 334 Assert.Equal("install", installer1.UpgradeBehavior); 335 Assert.Equal(2, installer1.Commands.Count); 336 Assert.Equal("makemsixPreview", installer1.Commands[0]); 337 Assert.Equal("makeappxPreview", installer1.Commands[1]); 338 Assert.Equal(2, installer1.Protocols.Count); 339 Assert.Equal("protocol1preview", installer1.Protocols[0]); 340 Assert.Equal("protocol2preview", installer1.Protocols[1]); 341 Assert.Equal(4, installer1.FileExtensions.Count); 342 Assert.Equal("appxbundle", installer1.FileExtensions[0]); 343 Assert.Equal("msixbundle", installer1.FileExtensions[1]); 344 Assert.Equal("appx", installer1.FileExtensions[2]); 345 Assert.Equal("msix", installer1.FileExtensions[3]); 346 347 Assert.Single(installer1.Dependencies.WindowsFeatures); 348 Assert.Equal("PreviewIIS", installer1.Dependencies.WindowsFeatures[0]); 349 Assert.Single(installer1.Dependencies.WindowsLibraries); 350 Assert.Equal("Preview VC Runtime", installer1.Dependencies.WindowsLibraries[0]); 351 Assert.Single(installer1.Dependencies.PackageDependencies); 352 Assert.Equal("Microsoft.MsixSdkDepPreview", installer1.Dependencies.PackageDependencies[0].PackageIdentifier); 353 Assert.Single(installer1.Dependencies.ExternalDependencies); 354 Assert.Equal("Preview Outside dependencies", installer1.Dependencies.ExternalDependencies[0]); 355 356 Assert.Single(installer1.Capabilities); 357 Assert.Equal("internetClientPreview", installer1.Capabilities[0]); 358 Assert.Single(installer1.RestrictedCapabilities); 359 Assert.Equal("runFullTrustPreview", installer1.RestrictedCapabilities[0]); 360 Assert.Equal("Microsoft.DesktopAppInstallerPreview_8wekyb3d8bbwe", installer1.PackageFamilyName); 361 362 if (manifestVersion >= TestManifestVersion.V1_1_0) 363 { 364 Assert.Equal("2021-02-02", installer1.ReleaseDate); 365 Assert.True(!installer1.InstallerAbortsTerminal); 366 Assert.True(!installer1.InstallLocationRequired); 367 Assert.True(!installer1.RequireExplicitUpgrade); 368 Assert.Equal("elevationRequired", installer1.ElevationRequirement); 369 Assert.Single(installer1.UnsupportedOSArchitectures); 370 Assert.Equal("arm64", installer1.UnsupportedOSArchitectures[0]); 371 Assert.Single(installer1.Markets.ExcludedMarkets); 372 Assert.Equal("US", installer1.Markets.ExcludedMarkets[0]); 373 Assert.Single(installer1.ExpectedReturnCodes); 374 Assert.Equal(2, installer1.ExpectedReturnCodes[0].InstallerReturnCode); 375 Assert.Equal("contactSupport", installer1.ExpectedReturnCodes[0].ReturnResponse); 376 } 377 378 ManifestInstaller installer2 = manifest.Installers[1]; 379 Assert.Equal("x64", installer2.Arch); 380 Assert.Equal("exe", installer2.InstallerType); 381 Assert.Equal("https://www.microsoft.com/msixsdk/msixsdkx64.exe", installer2.Url); 382 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installer2.Sha256); 383 Assert.Equal("{Bar}", installer2.ProductCode); 384 385 if (manifestVersion >= TestManifestVersion.V1_6_0) 386 { 387 Assert.Single(installer1.InstallationMetadata.Files); 388 ManifestInstallerFile installerFile2 = installer1.InstallationMetadata.Files[0]; 389 Assert.Equal("main2.exe", installerFile2.RelativeFilePath); 390 Assert.Equal("DisplayName2", installerFile2.DisplayName); 391 Assert.Equal("/arg2", installerFile2.InvocationParameter); 392 Assert.Equal("79D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installerFile2.FileSha256); 393 394 Assert.Equal("msi", installer1.NestedInstallerType); 395 396 InstallerNestedInstallerFile installerNestedInstallerFile2 = installer1.NestedInstallerFiles[0]; 397 Assert.Equal("RelativeFilePath2", installerNestedInstallerFile2.RelativeFilePath); 398 Assert.Equal("PortableCommandAlias2", installerNestedInstallerFile2.PortableCommandAlias); 399 400 Assert.Single(installer1.UnsupportedArguments); 401 Assert.Equal("location", installer1.UnsupportedArguments[0]); 402 403 Assert.True(installer1.DisplayInstallWarnings); 404 Assert.True(installer1.DownloadCommandProhibited); 405 406 Assert.Equal("https://returnResponseUrl.com", installer1.ExpectedReturnCodes[0].ReturnResponseUrl); 407 } 408 409 if (manifestVersion >= TestManifestVersion.V1_7_0) 410 { 411 Assert.Equal("/r", installer1Switches.Repair); 412 Assert.Equal("modify", installer1.RepairBehavior); 413 } 414 415 if (manifestVersion >= TestManifestVersion.V1_9_0) 416 { 417 Assert.False(installer1.ArchiveBinariesDependOnPath); 418 Assert.Equal("fakeIdentifier", installer2.ProductId); 419 } 420 421 if (manifestVersion >= TestManifestVersion.V1_10_0) 422 { 423 Assert.Equal("microsoftEntraId", installer1.Authentication.AuthenticationType); 424 Assert.Equal("Resource", installer1.Authentication.MicrosoftEntraIdAuthenticationInfo.Resource); 425 Assert.Equal("Scope", installer1.Authentication.MicrosoftEntraIdAuthenticationInfo.Scope); 426 } 427 428 // Additional Localizations 429 Assert.Single(manifest.Localization); 430 ManifestLocalization localization1 = manifest.Localization[0]; 431 Assert.Equal("en-GB", localization1.PackageLocale); 432 Assert.Equal("Microsoft UK", localization1.Publisher); 433 Assert.Equal("https://www.microsoft.com/UK", localization1.PublisherUrl); 434 Assert.Equal("https://www.microsoft.com/support/UK", localization1.PublisherSupportUrl); 435 Assert.Equal("https://www.microsoft.com/privacy/UK", localization1.PrivacyUrl); 436 Assert.Equal("Microsoft UK", localization1.Author); 437 Assert.Equal("MSIX SDK UK", localization1.PackageName); 438 Assert.Equal("https://www.microsoft.com/msixsdk/home/UK", localization1.PackageUrl); 439 Assert.Equal("MIT License UK", localization1.License); 440 Assert.Equal("https://www.microsoft.com/msixsdk/license/UK", localization1.LicenseUrl); 441 Assert.Equal("Copyright Microsoft Corporation UK", localization1.Copyright); 442 Assert.Equal("https://www.microsoft.com/msixsdk/copyright/UK", localization1.CopyrightUrl); 443 Assert.Equal("This is MSIX SDK UK", localization1.ShortDescription); 444 Assert.Equal("The MSIX SDK project is an effort to enable developers UK", localization1.Description); 445 Assert.Equal(2, localization1.Tags.Count); 446 Assert.Equal("appxsdkUK", localization1.Tags[0]); 447 Assert.Equal("msixsdkUK", localization1.Tags[1]); 448 449 if (manifestVersion >= TestManifestVersion.V1_1_0) 450 { 451 Assert.Equal("Release notes", localization1.ReleaseNotes); 452 Assert.Equal("https://ReleaseNotes.net", localization1.ReleaseNotesUrl); 453 Assert.Single(localization1.Agreements); 454 Assert.Equal("Label", localization1.Agreements[0].AgreementLabel); 455 Assert.Equal("Text", localization1.Agreements[0].Agreement); 456 Assert.Equal("https://AgreementUrl.net", localization1.Agreements[0].AgreementUrl); 457 } 458 459 if (manifestVersion >= TestManifestVersion.V1_6_0) 460 { 461 Assert.Equal("Installation notes", localization1.InstallationNotes); 462 Assert.Equal("https://PurchaseUrl.com", localization1.PurchaseUrl); 463 464 Assert.Single(localization1.Documentations); 465 ManifestDocumentation manifestDocumentation = localization1.Documentations[0]; 466 467 Assert.Equal("Document label", manifestDocumentation.DocumentLabel); 468 Assert.Equal("https://DocumentUrl.com", manifestDocumentation.DocumentUrl); 469 470 Assert.Single(localization1.Icons); 471 ManifestIcon icon = localization1.Icons[0]; 472 473 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8321", icon.IconSha256); 474 Assert.Equal("dark", icon.IconTheme); 475 Assert.Equal("https://testIcon2", icon.IconUrl); 476 Assert.Equal("32x32", icon.IconResolution); 477 Assert.Equal("png", icon.IconFileType); 478 } 479 480 if (manifestVersion >= TestManifestVersion.V1_12_0) 481 { 482 // Manifest v12 adds support for the Font installer type and NestedInstallerType, 483 // with two additional installers added to the merged manifest to verify these. 484 ManifestInstaller installer3 = manifest.Installers[2]; 485 Assert.Equal("neutral", installer3.Arch); 486 Assert.Equal("zip", installer3.InstallerType); 487 Assert.Equal("https://www.microsoft.com/msixsdk/msixsdkx64.exe", installer3.Url); 488 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installer3.Sha256); 489 Assert.Equal("font", installer3.NestedInstallerType); 490 Assert.Equal(5, installer3.NestedInstallerFiles.Count); 491 Assert.Equal("relativeFilePath1.otf", installer3.NestedInstallerFiles[0].RelativeFilePath); 492 Assert.Equal("relativeFilePath2.ttf", installer3.NestedInstallerFiles[1].RelativeFilePath); 493 Assert.Equal("relativeFilePath3.fnt", installer3.NestedInstallerFiles[2].RelativeFilePath); 494 Assert.Equal("relativeFilePath4.ttc", installer3.NestedInstallerFiles[3].RelativeFilePath); 495 Assert.Equal("relativeFilePath5.otc", installer3.NestedInstallerFiles[4].RelativeFilePath); 496 497 ManifestInstaller installer4 = manifest.Installers[3]; 498 Assert.Equal("neutral", installer4.Arch); 499 Assert.Equal("font", installer4.InstallerType); 500 Assert.Equal("https://www.microsoft.com/msixsdk/msixsdkx64.exe", installer4.Url); 501 Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installer4.Sha256); 502 } 503 } 504 505 /// <summary> 506 /// Helper class with manifest strings. 507 /// </summary> 508 internal class ManifestStrings 509 { 510 #pragma warning disable SA1310 // FieldNamesMustNotContainUnderscore 511 /// <summary> 512 /// Merged v1 manifest. 513 /// </summary> 514 public const string V1_0_0ManifestMerged = "V1ManifestMerged.yaml"; 515 516 /// <summary> 517 /// Merged v1.1 manifest. 518 /// </summary> 519 public const string V1_1_0ManifestMerged = "V1_1ManifestMerged.yaml"; 520 521 /// <summary> 522 /// Merged v1.6 manifest. 523 /// </summary> 524 public const string V1_6_0ManifestMerged = "V1_6ManifestMerged.yaml"; 525 526 /// <summary> 527 /// Merged v1.7 manifest. 528 /// </summary> 529 public const string V1_7_0ManifestMerged = "V1_7ManifestMerged.yaml"; 530 531 /// <summary> 532 /// Merged v1.9 manifest. 533 /// </summary> 534 public const string V1_9_0ManifestMerged = "V1_9ManifestMerged.yaml"; 535 536 /// <summary> 537 /// Merged v1.10 manifest. 538 /// </summary> 539 public const string V1_10_0ManifestMerged = "V1_10ManifestMerged.yaml"; 540 541 /// <summary> 542 /// Merged v1.12 manifest. 543 /// </summary> 544 public const string V1_12_0ManifestMerged = "V1_12ManifestMerged.yaml"; 545 #pragma warning restore SA1310 // FieldNamesMustNotContainUnderscore 546 547 /// <summary> 548 /// Merged v1 manifest without localization. 549 /// </summary> 550 public const string V1ManifestNoLocalization = "V1ManifestNoLocalization.yaml"; 551 552 /// <summary> 553 /// Merged v1 manifest missing required PackageLocale. 554 /// </summary> 555 public const string V1ManifestInfoMissingRequiredPackageLocale = "V1ManifestInfoMissingRequiredPackageLocale.yaml"; 556 } 557 } 558 }