Skip to content

Commit

Permalink
Add missing manifest fields (#3757)
Browse files Browse the repository at this point in the history
* Add missing manifest fields

* Added all missing fields

* Added more test asserts

* Add all properties to tests

---------

Co-authored-by: Akinwale Alagbe <[email protected]>
  • Loading branch information
hackean-msft and Akinwale Alagbe authored Oct 24, 2023
1 parent e991523 commit 0d824f4
Show file tree
Hide file tree
Showing 11 changed files with 561 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ private enum TestManifestVersion
{
V100,
V110,
V160,
}

/// <summary>
Expand All @@ -51,6 +52,11 @@ public void ReadV1ManifestsAndVerifyContents()
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V110ManifestMerged));

this.ValidateManifestFields(v110manifest, TestManifestVersion.V110);

Manifest v160manifest = Manifest.CreateManifestFromPath(
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TestCollateral", ManifestStrings.V160ManifestMerged));

this.ValidateManifestFields(v160manifest, TestManifestVersion.V160);
}

/// <summary>
Expand Down Expand Up @@ -126,6 +132,7 @@ private void ValidateManifestFields(Manifest manifest, TestManifestVersion manif
Assert.Equal("Windows.Desktop", manifest.Platform[0]);
Assert.Equal("Windows.Universal", manifest.Platform[1]);
Assert.Equal("10.0.0.0", manifest.MinimumOSVersion);

Assert.Equal("zip", manifest.InstallerType);
Assert.Equal("machine", manifest.Scope);
Assert.Equal(3, manifest.InstallModes.Count);
Expand Down Expand Up @@ -193,9 +200,9 @@ private void ValidateManifestFields(Manifest manifest, TestManifestVersion manif
Assert.Equal("exe", manifest.AppsAndFeaturesEntries[0].InstallerType);
Assert.Single(manifest.Markets.AllowedMarkets);
Assert.Equal("US", manifest.Markets.AllowedMarkets[0]);
Assert.Single(manifest.ExpectedReturnCodes);
Assert.Equal(10, manifest.ExpectedReturnCodes[0].InstallerReturnCode);
Assert.Equal("packageInUse", manifest.ExpectedReturnCodes[0].ReturnResponse);
Assert.Equal(2, manifest.ExpectedReturnCodes.Count);
Assert.Equal(2, manifest.ExpectedReturnCodes[0].InstallerReturnCode);
Assert.Equal("contactSupport", manifest.ExpectedReturnCodes[0].ReturnResponse);
}

Assert.Equal(2, manifest.Installers.Count);
Expand Down Expand Up @@ -303,6 +310,71 @@ private void ValidateManifestFields(Manifest manifest, TestManifestVersion manif
Assert.Equal("Text", localization1.Agreements[0].Agreement);
Assert.Equal("https://AgreementUrl.net", localization1.Agreements[0].AgreementUrl);
}

if (manifestVersion >= TestManifestVersion.V160)
{
Assert.Equal("msi", manifest.NestedInstallerType);
Assert.Equal("Default installation notes", manifest.InstallationNotes);
Assert.Equal("https://DefaultPurchaseUrl.com", manifest.PurchaseUrl);

Assert.True(manifest.DisplayInstallWarnings);
Assert.True(manifest.DownloadCommandProhibited);

Assert.Single(manifest.NestedInstallerFiles);
InstallerNestedInstallerFile installerNestedInstallerFile = manifest.NestedInstallerFiles[0];
Assert.Equal("RelativeFilePath", installerNestedInstallerFile.RelativeFilePath);
Assert.Equal("PortableCommandAlias", installerNestedInstallerFile.PortableCommandAlias);

InstallerInstallationMetadata installerInstallationMetadata = manifest.InstallationMetadata;
Assert.Equal("%ProgramFiles%\\TestApp", installerInstallationMetadata.DefaultInstallLocation);
Assert.Single(installerInstallationMetadata.Files);

ManifestInstallerFile installerFile = installerInstallationMetadata.Files[0];
Assert.Equal("main.exe", installerFile.RelativeFilePath);
Assert.Equal("DisplayName", installerFile.DisplayName);
Assert.Equal("/arg", installerFile.InvocationParameter);
Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installerFile.FileSha256);

Assert.Single(manifest.Documentations);
ManifestDocumentation manifestDocumentation = manifest.Documentations[0];

Assert.Equal("Default document label", manifestDocumentation.DocumentLabel);
Assert.Equal("https://DefaultDocumentUrl.com", manifestDocumentation.DocumentUrl);

Assert.Single(manifest.Icons);
ManifestIcon icon = manifest.Icons[0];

Assert.Equal("69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8123", icon.IconSha256);
Assert.Equal("default", icon.IconTheme);
Assert.Equal("https://testIcon", icon.IconUrl);
Assert.Equal("custom", icon.IconResolution);
Assert.Equal("ico", icon.IconFileType);

Assert.Single(manifest.UnsupportedArguments);
Assert.Equal("log", manifest.UnsupportedArguments[0]);

Assert.Single(manifest.UnsupportedOSArchitectures);
Assert.Equal("arm", manifest.UnsupportedOSArchitectures[0]);

Assert.Single(installer1.InstallationMetadata.Files);
ManifestInstallerFile installerFile2 = installer1.InstallationMetadata.Files[0];
Assert.Equal("main2.exe", installerFile2.RelativeFilePath);
Assert.Equal("DisplayName2", installerFile2.DisplayName);
Assert.Equal("/arg2", installerFile2.InvocationParameter);
Assert.Equal("79D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82", installerFile2.FileSha256);

Assert.Equal("msi", installer1.NestedInstallerType);

InstallerNestedInstallerFile installerNestedInstallerFile2 = installer1.NestedInstallerFiles[0];
Assert.Equal("RelativeFilePath2", installerNestedInstallerFile2.RelativeFilePath);
Assert.Equal("PortableCommandAlias2", installerNestedInstallerFile2.PortableCommandAlias);

Assert.Single(installer1.UnsupportedArguments);
Assert.Equal("location", installer1.UnsupportedArguments[0]);

Assert.True(installer1.DisplayInstallWarnings);
Assert.True(installer1.DownloadCommandProhibited);
}
}

/// <summary>
Expand All @@ -320,6 +392,11 @@ internal class ManifestStrings
/// </summary>
public const string V110ManifestMerged = "V1_1ManifestMerged.yaml";

/// <summary>
/// Merged v1.1 manifest.
/// </summary>
public const string V160ManifestMerged = "V1_6ManifestMerged.yaml";

/// <summary>
/// Merged v1 manifest without localization.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@ Dependencies:
Description: The MSIX SDK project is an effort to enable developers
ElevationRequirement: elevatesSelf
ExpectedReturnCodes:
- InstallerReturnCode: 10
ReturnResponse: packageInUse
- InstallerReturnCode: 2
ReturnResponse: contactSupport
- InstallerReturnCode: 3
ReturnResponse: custom
ReturnResponseUrl: https://defaultReturnResponseUrl.com
FileExtensions:
- appx
- msix
Expand Down
234 changes: 234 additions & 0 deletions src/WinGetUtilInterop.UnitTests/TestCollateral/V1_6ManifestMerged.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
PackageIdentifier: microsoft.msixsdk
PackageVersion: 1.7.32
PackageLocale: en-US
Publisher: Microsoft
PublisherUrl: https://www.microsoft.com
PublisherSupportUrl: https://www.microsoft.com/support
PrivacyUrl: https://www.microsoft.com/privacy
Author: Microsoft
PackageName: MSIX SDK
PackageUrl: https://www.microsoft.com/msixsdk/home
License: MIT License
LicenseUrl: https://www.microsoft.com/msixsdk/license
Copyright: Copyright Microsoft Corporation
CopyrightUrl: https://www.microsoft.com/msixsdk/copyright
ShortDescription: This is MSIX SDK
Description: The MSIX SDK project is an effort to enable developers
Moniker: msixsdk
Tags:
- "appxsdk"
- "msixsdk"
ReleaseNotes: Default release notes
ReleaseNotesUrl: https://DefaultReleaseNotes.net
PurchaseUrl: https://DefaultPurchaseUrl.com
InstallationNotes: Default installation notes
Documentations:
- DocumentLabel: Default document label
DocumentUrl: https://DefaultDocumentUrl.com
Icons:
- IconUrl: https://testIcon
IconFileType: ico
IconResolution: custom
IconTheme: default
IconSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8123
Agreements:
- AgreementLabel: DefaultLabel
Agreement: DefaultText
AgreementUrl: https://DefaultAgreementUrl.net
InstallerLocale: en-US
Platform:
- Windows.Desktop
- Windows.Universal
MinimumOSVersion: 10.0.0.0
InstallerType: zip
Scope: machine
InstallModes:
- interactive
- silent
- silentWithProgress
InstallerSwitches:
Custom: /custom
SilentWithProgress: /silentwithprogress
Silent: /silence
Interactive: /interactive
Log: /log=<LOGPATH>
InstallLocation: /dir=<INSTALLPATH>
Upgrade: /upgrade
InstallerSuccessCodes:
- 1
- 0x80070005
UpgradeBehavior: uninstallPrevious
Commands:
- makemsix
- makeappx
Protocols:
- protocol1
- protocol2
FileExtensions:
- appx
- msix
- appxbundle
- msixbundle
Dependencies:
WindowsFeatures:
- IIS
WindowsLibraries:
- VC Runtime
PackageDependencies:
- PackageIdentifier: Microsoft.MsixSdkDep
MinimumVersion: 1.0.0
ExternalDependencies:
- Outside dependencies
Capabilities:
- internetClient
RestrictedCapabilities:
- runFullTrust
PackageFamilyName: Microsoft.DesktopAppInstaller_8wekyb3d8bbwe
ProductCode: "{Foo}"
ReleaseDate: 2021-01-01
InstallerAbortsTerminal: true
InstallLocationRequired: true
RequireExplicitUpgrade: true
DisplayInstallWarnings: true
ElevationRequirement: elevatesSelf
UnsupportedOSArchitectures:
- arm
AppsAndFeaturesEntries:
- DisplayName: DisplayName
DisplayVersion: DisplayVersion
Publisher: Publisher
ProductCode: ProductCode
UpgradeCode: UpgradeCode
InstallerType: exe
Markets:
AllowedMarkets:
- US
ExpectedReturnCodes:
- InstallerReturnCode: 2
ReturnResponse: contactSupport
- InstallerReturnCode: 3
ReturnResponse: custom
ReturnResponseUrl: https://defaultReturnResponseUrl.com
UnsupportedArguments:
- log
NestedInstallerType: msi
NestedInstallerFiles:
- RelativeFilePath: RelativeFilePath
PortableCommandAlias: PortableCommandAlias
InstallationMetadata:
DefaultInstallLocation: "%ProgramFiles%\\TestApp"
Files:
- RelativeFilePath: "main.exe"
FileSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82
FileType: launch
InvocationParameter: "/arg"
DisplayName: "DisplayName"
DownloadCommandProhibited: true
Localization:
- Agreements:
- Agreement: Text
AgreementLabel: Label
AgreementUrl: https://AgreementUrl.net
Author: Microsoft UK
Copyright: Copyright Microsoft Corporation UK
CopyrightUrl: https://www.microsoft.com/msixsdk/copyright/UK
Description: The MSIX SDK project is an effort to enable developers UK
License: MIT License UK
LicenseUrl: https://www.microsoft.com/msixsdk/license/UK
PackageLocale: en-GB
PackageName: MSIX SDK UK
PackageUrl: https://www.microsoft.com/msixsdk/home/UK
PrivacyUrl: https://www.microsoft.com/privacy/UK
Publisher: Microsoft UK
PublisherSupportUrl: https://www.microsoft.com/support/UK
PublisherUrl: https://www.microsoft.com/UK
ReleaseNotes: Release notes
ReleaseNotesUrl: https://ReleaseNotes.net
ShortDescription: This is MSIX SDK UK
Tags:
- appxsdkUK
- msixsdkUK
Installers:
- Architecture: x86
InstallerLocale: en-GB
Platform:
- Windows.Desktop
MinimumOSVersion: 10.0.1.0
InstallerType: msix
InstallerUrl: https://www.microsoft.com/msixsdk/msixsdkx86.msix
InstallerSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82
SignatureSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82
Scope: user
InstallModes:
- interactive
InstallerSwitches:
Custom: /c
SilentWithProgress: /sp
Silent: /s
Interactive: /i
Log: /l=<LOGPATH>
InstallLocation: /d=<INSTALLPATH>
Upgrade: /u
UpgradeBehavior: install
Commands:
- makemsixPreview
- makeappxPreview
Protocols:
- protocol1preview
- protocol2preview
FileExtensions:
- appxbundle
- msixbundle
- appx
- msix
Dependencies:
WindowsFeatures:
- PreviewIIS
WindowsLibraries:
- Preview VC Runtime
PackageDependencies:
- PackageIdentifier: Microsoft.MsixSdkDepPreview
MinimumVersion: 1.0.0
ExternalDependencies:
- Preview Outside dependencies
PackageFamilyName: Microsoft.DesktopAppInstallerPreview_8wekyb3d8bbwe
Capabilities:
- internetClientPreview
RestrictedCapabilities:
- runFullTrustPreview
ReleaseDate: 2021-02-02
InstallerAbortsTerminal: false
InstallLocationRequired: false
NestedInstallerFiles:
- RelativeFilePath: RelativeFilePath2
PortableCommandAlias: PortableCommandAlias2
RequireExplicitUpgrade: false
DisplayInstallWarnings: true
ElevationRequirement: elevationRequired
NestedInstallerType: msi
UnsupportedArguments:
- location
UnsupportedOSArchitectures:
- arm64
Markets:
ExcludedMarkets:
- "US"
ExpectedReturnCodes:
- InstallerReturnCode: 2
ReturnResponse: contactSupport
DownloadCommandProhibited: true
InstallationMetadata:
DefaultInstallLocation: "%ProgramFiles%\\TestApp"
Files:
- RelativeFilePath: "main2.exe"
FileSha256: 79D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82
FileType: launch2
InvocationParameter: "/arg2"
DisplayName: "DisplayName2"
- Architecture: x64
InstallerSha256: 69D84CA8899800A5575CE31798293CD4FEBAB1D734A07C2E51E56A28E0DF8C82
InstallerUrl: https://www.microsoft.com/msixsdk/msixsdkx64.exe
InstallerType: exe
ProductCode: '{Bar}'
ManifestType: singleton
ManifestVersion: 1.6.0
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@
<None Update="TestCollateral\Test_yaml_without_bom.yaml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="TestCollateral\V1_6ManifestMerged.yaml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="xunit.runner.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Expand Down
Loading

0 comments on commit 0d824f4

Please sign in to comment.