diff options
Diffstat (limited to 'src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi')
3 files changed, 139 insertions, 0 deletions
diff --git a/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs new file mode 100644 index 00000000..1eeec941 --- /dev/null +++ b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolsetTest.BootstrapperApplicationApi | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.BootstrapperApplicationApi; | ||
| 7 | using Xunit; | ||
| 8 | |||
| 9 | public class VerUtilFixture | ||
| 10 | { | ||
| 11 | [Fact] | ||
| 12 | public void CanCompareStringVersions() | ||
| 13 | { | ||
| 14 | var version1 = "1.2.3.4+abcd"; | ||
| 15 | var version2 = "1.2.3.4+zyxw"; | ||
| 16 | |||
| 17 | Assert.Equal(0, VerUtil.CompareStringVersions(version1, version2, strict: false)); | ||
| 18 | } | ||
| 19 | |||
| 20 | [Fact] | ||
| 21 | public void CanCopyVersion() | ||
| 22 | { | ||
| 23 | var version = "1.2.3.4-5.6.7.8.9.0"; | ||
| 24 | |||
| 25 | VerUtilVersion copiedVersion = null; | ||
| 26 | try | ||
| 27 | { | ||
| 28 | using (var parsedVersion = VerUtil.ParseVersion(version, strict: true)) | ||
| 29 | { | ||
| 30 | copiedVersion = VerUtil.CopyVersion(parsedVersion); | ||
| 31 | } | ||
| 32 | |||
| 33 | using (var secondVersion = VerUtil.ParseVersion(version, strict: true)) | ||
| 34 | { | ||
| 35 | Assert.Equal(0, VerUtil.CompareParsedVersions(copiedVersion, secondVersion)); | ||
| 36 | } | ||
| 37 | } | ||
| 38 | finally | ||
| 39 | { | ||
| 40 | copiedVersion?.Dispose(); | ||
| 41 | } | ||
| 42 | } | ||
| 43 | |||
| 44 | [Fact] | ||
| 45 | public void CanCreateFromQword() | ||
| 46 | { | ||
| 47 | var version = new Version(100, 200, 300, 400); | ||
| 48 | var qwVersion = VersionToLong(version); | ||
| 49 | |||
| 50 | using var parsedVersion = VerUtil.VersionFromQword(qwVersion); | ||
| 51 | Assert.Equal("100.200.300.400", parsedVersion.Version); | ||
| 52 | Assert.Equal('\0', parsedVersion.Prefix); | ||
| 53 | Assert.Equal(100u, parsedVersion.Major); | ||
| 54 | Assert.Equal(200u, parsedVersion.Minor); | ||
| 55 | Assert.Equal(300u, parsedVersion.Patch); | ||
| 56 | Assert.Equal(400u, parsedVersion.Revision); | ||
| 57 | Assert.Empty(parsedVersion.ReleaseLabels); | ||
| 58 | Assert.Equal("", parsedVersion.Metadata); | ||
| 59 | Assert.False(parsedVersion.IsInvalid); | ||
| 60 | Assert.True(parsedVersion.HasMajor); | ||
| 61 | Assert.True(parsedVersion.HasMinor); | ||
| 62 | Assert.True(parsedVersion.HasPatch); | ||
| 63 | Assert.True(parsedVersion.HasRevision); | ||
| 64 | } | ||
| 65 | |||
| 66 | [Fact] | ||
| 67 | public void CanParseVersion() | ||
| 68 | { | ||
| 69 | var version = "1.2.3.4-a.b.c.d.5.+abc123"; | ||
| 70 | |||
| 71 | using var parsedVersion = VerUtil.ParseVersion(version, strict: false); | ||
| 72 | Assert.Equal(version, parsedVersion.Version); | ||
| 73 | Assert.Equal('\0', parsedVersion.Prefix); | ||
| 74 | Assert.Equal(1u, parsedVersion.Major); | ||
| 75 | Assert.Equal(2u, parsedVersion.Minor); | ||
| 76 | Assert.Equal(3u, parsedVersion.Patch); | ||
| 77 | Assert.Equal(4u, parsedVersion.Revision); | ||
| 78 | Assert.Equal(5, parsedVersion.ReleaseLabels.Length); | ||
| 79 | Assert.Equal("+abc123", parsedVersion.Metadata); | ||
| 80 | Assert.True(parsedVersion.IsInvalid); | ||
| 81 | Assert.True(parsedVersion.HasMajor); | ||
| 82 | Assert.True(parsedVersion.HasMinor); | ||
| 83 | Assert.True(parsedVersion.HasPatch); | ||
| 84 | Assert.True(parsedVersion.HasRevision); | ||
| 85 | |||
| 86 | Assert.Equal("a", parsedVersion.ReleaseLabels[0].Label); | ||
| 87 | Assert.False(parsedVersion.ReleaseLabels[0].IsNumeric); | ||
| 88 | |||
| 89 | Assert.Equal("b", parsedVersion.ReleaseLabels[1].Label); | ||
| 90 | Assert.False(parsedVersion.ReleaseLabels[1].IsNumeric); | ||
| 91 | |||
| 92 | Assert.Equal("c", parsedVersion.ReleaseLabels[2].Label); | ||
| 93 | Assert.False(parsedVersion.ReleaseLabels[2].IsNumeric); | ||
| 94 | |||
| 95 | Assert.Equal("d", parsedVersion.ReleaseLabels[3].Label); | ||
| 96 | Assert.False(parsedVersion.ReleaseLabels[3].IsNumeric); | ||
| 97 | |||
| 98 | Assert.Equal("5", parsedVersion.ReleaseLabels[4].Label); | ||
| 99 | Assert.True(parsedVersion.ReleaseLabels[4].IsNumeric); | ||
| 100 | Assert.Equal(5u, parsedVersion.ReleaseLabels[4].Value); | ||
| 101 | } | ||
| 102 | |||
| 103 | private static long VersionToLong(Version version) | ||
| 104 | { | ||
| 105 | // In Windows, each version component has a max value of 65535, | ||
| 106 | // so we truncate the version before shifting it, which will overflow if invalid. | ||
| 107 | long major = (long)(ushort)version.Major << 48; | ||
| 108 | long minor = (long)(ushort)version.Minor << 32; | ||
| 109 | long build = (long)(ushort)version.Build << 16; | ||
| 110 | long revision = (long)(ushort)version.Revision; | ||
| 111 | |||
| 112 | return major | minor | build | revision; | ||
| 113 | } | ||
| 114 | } | ||
| 115 | } | ||
diff --git a/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.csproj b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.csproj new file mode 100644 index 00000000..a3d9930d --- /dev/null +++ b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.csproj | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> | ||
| 3 | |||
| 4 | <Project Sdk="Microsoft.NET.Sdk"> | ||
| 5 | <PropertyGroup> | ||
| 6 | <TargetFramework>net6.0</TargetFramework> | ||
| 7 | <RuntimeIdentifier>win-x86</RuntimeIdentifier> | ||
| 8 | <SelfContained>false</SelfContained> | ||
| 9 | <IsWixTestProject>true</IsWixTestProject> | ||
| 10 | </PropertyGroup> | ||
| 11 | |||
| 12 | <ItemGroup> | ||
| 13 | <ProjectReference Include="..\..\WixToolset.BootstrapperApplicationApi\WixToolset.BootstrapperApplicationApi.csproj" /> | ||
| 14 | </ItemGroup> | ||
| 15 | |||
| 16 | <ItemGroup> | ||
| 17 | <PackageReference Include="WixInternal.TestSupport" /> | ||
| 18 | </ItemGroup> | ||
| 19 | </Project> | ||
diff --git a/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.v3.ncrunchproject b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.v3.ncrunchproject new file mode 100644 index 00000000..7b5b2139 --- /dev/null +++ b/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/WixToolsetTest.BootstrapperApplicationApi.v3.ncrunchproject | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | <ProjectConfiguration> | ||
| 2 | <Settings> | ||
| 3 | <CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace> | ||
| 4 | </Settings> | ||
| 5 | </ProjectConfiguration> \ No newline at end of file | ||
