aboutsummaryrefslogtreecommitdiff
path: root/src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2024-03-06 14:48:10 -0800
committerRob Mensching <rob@firegiant.com>2024-03-07 10:55:57 -0800
commit3d2d46f62fc01e2653d0251ad9703090574e7c41 (patch)
treeffdf7dce6c646f38b5e3ad8325c2ce78ca891a1a /src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs
parenta8504dc4eb1c2d09965b0858699ac737336ef3c1 (diff)
downloadwix-3d2d46f62fc01e2653d0251ad9703090574e7c41.tar.gz
wix-3d2d46f62fc01e2653d0251ad9703090574e7c41.tar.bz2
wix-3d2d46f62fc01e2653d0251ad9703090574e7c41.zip
Better .nupkg names
Diffstat (limited to 'src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs')
-rw-r--r--src/api/burn/test/WixToolsetTest.BootstrapperApplicationApi/VerUtilFixture.cs115
1 files changed, 115 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
3namespace 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}