winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }