diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-05-16 16:07:43 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-05-17 22:54:13 -0500 |
commit | 46fb0597d4d6192833ddcf836f4bcf6295ef0aaf (patch) | |
tree | bfe188365bb37b298c42238d39568ebfc8809dcb | |
parent | 0ea53e27361cbfe664df98d717e55005f329aff1 (diff) | |
download | wix-46fb0597d4d6192833ddcf836f4bcf6295ef0aaf.tar.gz wix-46fb0597d4d6192833ddcf836f4bcf6295ef0aaf.tar.bz2 wix-46fb0597d4d6192833ddcf836f4bcf6295ef0aaf.zip |
Keep track of when parts of verutil/WixVersions are missing.
Return null when WixVersion.TryParse returns false.
6776
-rw-r--r-- | src/api/burn/WixToolset.Mba.Core/VerUtil.cs | 4 | ||||
-rw-r--r-- | src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | 24 | ||||
-rw-r--r-- | src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | 8 | ||||
-rw-r--r-- | src/api/wix/WixToolset.Data/WixVersion.cs | 33 | ||||
-rw-r--r-- | src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs | 80 | ||||
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/inc/verutil.h | 4 | ||||
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/verutil.cpp | 13 | ||||
-rw-r--r-- | src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp | 168 | ||||
-rw-r--r-- | src/wix/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs | 10 |
9 files changed, 322 insertions, 22 deletions
diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs index 611f9710..14552310 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs | |||
@@ -68,6 +68,10 @@ namespace WixToolset.Mba.Core | |||
68 | public IntPtr rgReleaseLabels; | 68 | public IntPtr rgReleaseLabels; |
69 | public IntPtr cchMetadataOffset; | 69 | public IntPtr cchMetadataOffset; |
70 | public bool fInvalid; | 70 | public bool fInvalid; |
71 | public bool fHasMajor; | ||
72 | public bool fHasMinor; | ||
73 | public bool fHasPatch; | ||
74 | public bool fHasRevision; | ||
71 | } | 75 | } |
72 | 76 | ||
73 | internal static string VersionStringFromOffset(IntPtr wzVersion, IntPtr cchOffset, int? cchLength = null) | 77 | internal static string VersionStringFromOffset(IntPtr wzVersion, IntPtr cchOffset, int? cchLength = null) |
diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs index 731dedaf..e0312474 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | |||
@@ -25,6 +25,10 @@ namespace WixToolset.Mba.Core | |||
25 | this.ReleaseLabels = new VerUtilVersionReleaseLabel[version.cReleaseLabels]; | 25 | this.ReleaseLabels = new VerUtilVersionReleaseLabel[version.cReleaseLabels]; |
26 | this.Metadata = VerUtil.VersionStringFromOffset(version.sczVersion, version.cchMetadataOffset); | 26 | this.Metadata = VerUtil.VersionStringFromOffset(version.sczVersion, version.cchMetadataOffset); |
27 | this.IsInvalid = version.fInvalid; | 27 | this.IsInvalid = version.fInvalid; |
28 | this.HasMajor = version.fHasMajor; | ||
29 | this.HasMinor = version.fHasMinor; | ||
30 | this.HasPatch = version.fHasPatch; | ||
31 | this.HasRevision = version.fHasRevision; | ||
28 | 32 | ||
29 | for (var i = 0; i < version.cReleaseLabels; ++i) | 33 | for (var i = 0; i < version.cReleaseLabels; ++i) |
30 | { | 34 | { |
@@ -80,6 +84,26 @@ namespace WixToolset.Mba.Core | |||
80 | /// </summary> | 84 | /// </summary> |
81 | public bool IsInvalid { get; private set; } | 85 | public bool IsInvalid { get; private set; } |
82 | 86 | ||
87 | /// <summary> | ||
88 | /// Whether the Major part was specified. | ||
89 | /// </summary> | ||
90 | public bool HasMajor { get; private set; } | ||
91 | |||
92 | /// <summary> | ||
93 | /// Whether the Minor part was specified. | ||
94 | /// </summary> | ||
95 | public bool HasMinor { get; private set; } | ||
96 | |||
97 | /// <summary> | ||
98 | /// Whether the Patch part was specified. | ||
99 | /// </summary> | ||
100 | public bool HasPatch { get; private set; } | ||
101 | |||
102 | /// <summary> | ||
103 | /// Whether the Revision part was specified. | ||
104 | /// </summary> | ||
105 | public bool HasRevision { get; private set; } | ||
106 | |||
83 | /// <inheritdoc/> | 107 | /// <inheritdoc/> |
84 | public void Dispose() | 108 | public void Dispose() |
85 | { | 109 | { |
diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs index ceb1b12a..6fb8aced 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | |||
@@ -57,6 +57,10 @@ namespace WixToolsetTest.Mba.Core | |||
57 | Assert.Empty(parsedVersion.ReleaseLabels); | 57 | Assert.Empty(parsedVersion.ReleaseLabels); |
58 | Assert.Equal("", parsedVersion.Metadata); | 58 | Assert.Equal("", parsedVersion.Metadata); |
59 | Assert.False(parsedVersion.IsInvalid); | 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); | ||
60 | } | 64 | } |
61 | 65 | ||
62 | [Fact] | 66 | [Fact] |
@@ -74,6 +78,10 @@ namespace WixToolsetTest.Mba.Core | |||
74 | Assert.Equal(5, parsedVersion.ReleaseLabels.Length); | 78 | Assert.Equal(5, parsedVersion.ReleaseLabels.Length); |
75 | Assert.Equal("+abc123", parsedVersion.Metadata); | 79 | Assert.Equal("+abc123", parsedVersion.Metadata); |
76 | Assert.True(parsedVersion.IsInvalid); | 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); | ||
77 | 85 | ||
78 | Assert.Equal("a", parsedVersion.ReleaseLabels[0].Label); | 86 | Assert.Equal("a", parsedVersion.ReleaseLabels[0].Label); |
79 | Assert.False(parsedVersion.ReleaseLabels[0].IsNumeric); | 87 | Assert.False(parsedVersion.ReleaseLabels[0].IsNumeric); |
diff --git a/src/api/wix/WixToolset.Data/WixVersion.cs b/src/api/wix/WixToolset.Data/WixVersion.cs index 2b02bd7d..ab68b55a 100644 --- a/src/api/wix/WixToolset.Data/WixVersion.cs +++ b/src/api/wix/WixToolset.Data/WixVersion.cs | |||
@@ -22,22 +22,42 @@ namespace WixToolset.Data | |||
22 | /// <summary> | 22 | /// <summary> |
23 | /// Gets or sets the major version. | 23 | /// Gets or sets the major version. |
24 | /// </summary> | 24 | /// </summary> |
25 | public uint? Major { get; set; } | 25 | public uint Major { get; set; } |
26 | 26 | ||
27 | /// <summary> | 27 | /// <summary> |
28 | /// Gets or sets the minor version. | 28 | /// Gets or sets the minor version. |
29 | /// </summary> | 29 | /// </summary> |
30 | public uint? Minor { get; set; } | 30 | public uint Minor { get; set; } |
31 | 31 | ||
32 | /// <summary> | 32 | /// <summary> |
33 | /// Gets or sets the patch version. | 33 | /// Gets or sets the patch version. |
34 | /// </summary> | 34 | /// </summary> |
35 | public uint? Patch { get; set; } | 35 | public uint Patch { get; set; } |
36 | 36 | ||
37 | /// <summary> | 37 | /// <summary> |
38 | /// Gets or sets the revision version. | 38 | /// Gets or sets the revision version. |
39 | /// </summary> | 39 | /// </summary> |
40 | public uint? Revision { get; set; } | 40 | public uint Revision { get; set; } |
41 | |||
42 | /// <summary> | ||
43 | /// Gets or sets whether the major version was defined. | ||
44 | /// </summary> | ||
45 | public bool HasMajor { get; set; } | ||
46 | |||
47 | /// <summary> | ||
48 | /// Gets or sets the whether the minor version was defined. | ||
49 | /// </summary> | ||
50 | public bool HasMinor { get; set; } | ||
51 | |||
52 | /// <summary> | ||
53 | /// Gets or sets the whether the patch version was defined. | ||
54 | /// </summary> | ||
55 | public bool HasPatch { get; set; } | ||
56 | |||
57 | /// <summary> | ||
58 | /// Gets or sets the whether the revision version was defined. | ||
59 | /// </summary> | ||
60 | public bool HasRevision { get; set; } | ||
41 | 61 | ||
42 | /// <summary> | 62 | /// <summary> |
43 | /// Gets or sets the labels in the version. | 63 | /// Gets or sets the labels in the version. |
@@ -143,15 +163,19 @@ namespace WixToolset.Data | |||
143 | { | 163 | { |
144 | case 0: | 164 | case 0: |
145 | version.Major = part; | 165 | version.Major = part; |
166 | version.HasMajor = true; | ||
146 | break; | 167 | break; |
147 | case 1: | 168 | case 1: |
148 | version.Minor = part; | 169 | version.Minor = part; |
170 | version.HasMinor = true; | ||
149 | break; | 171 | break; |
150 | case 2: | 172 | case 2: |
151 | version.Patch = part; | 173 | version.Patch = part; |
174 | version.HasPatch = true; | ||
152 | break; | 175 | break; |
153 | case 3: | 176 | case 3: |
154 | version.Revision = part; | 177 | version.Revision = part; |
178 | version.HasRevision = true; | ||
155 | break; | 179 | break; |
156 | } | 180 | } |
157 | 181 | ||
@@ -264,6 +288,7 @@ namespace WixToolset.Data | |||
264 | 288 | ||
265 | if (invalid) | 289 | if (invalid) |
266 | { | 290 | { |
291 | version = null; | ||
267 | return false; | 292 | return false; |
268 | } | 293 | } |
269 | 294 | ||
diff --git a/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs b/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs index 45253460..ffa3213a 100644 --- a/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs +++ b/src/api/wix/test/WixToolsetTest.Data/WixVerFixture.cs | |||
@@ -11,13 +11,15 @@ namespace WixToolsetTest.Data | |||
11 | [Fact] | 11 | [Fact] |
12 | public void CannotParseEmptyStringAsVersion() | 12 | public void CannotParseEmptyStringAsVersion() |
13 | { | 13 | { |
14 | Assert.False(WixVersion.TryParse(String.Empty, out var _)); | 14 | Assert.False(WixVersion.TryParse(String.Empty, out var version)); |
15 | Assert.Null(version); | ||
15 | } | 16 | } |
16 | 17 | ||
17 | [Fact] | 18 | [Fact] |
18 | public void CannotParseInvalidStringAsVersion() | 19 | public void CannotParseInvalidStringAsVersion() |
19 | { | 20 | { |
20 | Assert.False(WixVersion.TryParse("invalid", out var _)); | 21 | Assert.False(WixVersion.TryParse("invalid", out var version)); |
22 | Assert.Null(version); | ||
21 | } | 23 | } |
22 | 24 | ||
23 | [Fact] | 25 | [Fact] |
@@ -29,6 +31,10 @@ namespace WixToolsetTest.Data | |||
29 | Assert.Equal((uint)2, version.Minor); | 31 | Assert.Equal((uint)2, version.Minor); |
30 | Assert.Equal((uint)3, version.Patch); | 32 | Assert.Equal((uint)3, version.Patch); |
31 | Assert.Equal((uint)4, version.Revision); | 33 | Assert.Equal((uint)4, version.Revision); |
34 | Assert.True(version.HasMajor); | ||
35 | Assert.True(version.HasMinor); | ||
36 | Assert.True(version.HasPatch); | ||
37 | Assert.True(version.HasRevision); | ||
32 | Assert.Null(version.Labels); | 38 | Assert.Null(version.Labels); |
33 | Assert.Null(version.Metadata); | 39 | Assert.Null(version.Metadata); |
34 | } | 40 | } |
@@ -41,7 +47,11 @@ namespace WixToolsetTest.Data | |||
41 | Assert.Equal((uint)1, version.Major); | 47 | Assert.Equal((uint)1, version.Major); |
42 | Assert.Equal((uint)2, version.Minor); | 48 | Assert.Equal((uint)2, version.Minor); |
43 | Assert.Equal((uint)3, version.Patch); | 49 | Assert.Equal((uint)3, version.Patch); |
44 | Assert.Null(version.Revision); | 50 | Assert.Equal((uint)0, version.Revision); |
51 | Assert.True(version.HasMajor); | ||
52 | Assert.True(version.HasMinor); | ||
53 | Assert.True(version.HasPatch); | ||
54 | Assert.False(version.HasRevision); | ||
45 | Assert.Null(version.Labels); | 55 | Assert.Null(version.Labels); |
46 | Assert.Null(version.Metadata); | 56 | Assert.Null(version.Metadata); |
47 | } | 57 | } |
@@ -55,6 +65,10 @@ namespace WixToolsetTest.Data | |||
55 | Assert.Equal((uint)2, version.Minor); | 65 | Assert.Equal((uint)2, version.Minor); |
56 | Assert.Equal((uint)3, version.Patch); | 66 | Assert.Equal((uint)3, version.Patch); |
57 | Assert.Equal((uint)0, version.Revision); | 67 | Assert.Equal((uint)0, version.Revision); |
68 | Assert.True(version.HasMajor); | ||
69 | Assert.True(version.HasMinor); | ||
70 | Assert.True(version.HasPatch); | ||
71 | Assert.True(version.HasRevision); | ||
58 | Assert.Null(version.Labels); | 72 | Assert.Null(version.Labels); |
59 | Assert.Null(version.Metadata); | 73 | Assert.Null(version.Metadata); |
60 | } | 74 | } |
@@ -66,8 +80,12 @@ namespace WixToolsetTest.Data | |||
66 | Assert.Null(version.Prefix); | 80 | Assert.Null(version.Prefix); |
67 | Assert.Equal((uint)1, version.Major); | 81 | Assert.Equal((uint)1, version.Major); |
68 | Assert.Equal((uint)2, version.Minor); | 82 | Assert.Equal((uint)2, version.Minor); |
69 | Assert.Null(version.Patch); | 83 | Assert.Equal((uint)0, version.Patch); |
70 | Assert.Null(version.Revision); | 84 | Assert.Equal((uint)0, version.Revision); |
85 | Assert.True(version.HasMajor); | ||
86 | Assert.True(version.HasMinor); | ||
87 | Assert.False(version.HasPatch); | ||
88 | Assert.False(version.HasRevision); | ||
71 | Assert.Equal("19", version.Labels[0].Label); | 89 | Assert.Equal("19", version.Labels[0].Label); |
72 | Assert.Equal((uint)19, version.Labels[0].Numeric); | 90 | Assert.Equal((uint)19, version.Labels[0].Numeric); |
73 | Assert.Null(version.Metadata); | 91 | Assert.Null(version.Metadata); |
@@ -80,8 +98,12 @@ namespace WixToolsetTest.Data | |||
80 | Assert.Null(version.Prefix); | 98 | Assert.Null(version.Prefix); |
81 | Assert.Equal((uint)1, version.Major); | 99 | Assert.Equal((uint)1, version.Major); |
82 | Assert.Equal((uint)2, version.Minor); | 100 | Assert.Equal((uint)2, version.Minor); |
83 | Assert.Null(version.Patch); | 101 | Assert.Equal((uint)0, version.Patch); |
84 | Assert.Null(version.Revision); | 102 | Assert.Equal((uint)0, version.Revision); |
103 | Assert.True(version.HasMajor); | ||
104 | Assert.True(version.HasMinor); | ||
105 | Assert.False(version.HasPatch); | ||
106 | Assert.False(version.HasRevision); | ||
85 | Assert.Equal("2", version.Labels[0].Label); | 107 | Assert.Equal("2", version.Labels[0].Label); |
86 | Assert.Equal((uint)2, version.Labels[0].Numeric); | 108 | Assert.Equal((uint)2, version.Labels[0].Numeric); |
87 | Assert.Equal("0", version.Labels[1].Label); | 109 | Assert.Equal("0", version.Labels[1].Label); |
@@ -97,6 +119,11 @@ namespace WixToolsetTest.Data | |||
97 | Assert.Equal((uint)0, version.Major); | 119 | Assert.Equal((uint)0, version.Major); |
98 | Assert.Equal((uint)0, version.Minor); | 120 | Assert.Equal((uint)0, version.Minor); |
99 | Assert.Equal((uint)1, version.Patch); | 121 | Assert.Equal((uint)1, version.Patch); |
122 | Assert.Equal((uint)0, version.Revision); | ||
123 | Assert.True(version.HasMajor); | ||
124 | Assert.True(version.HasMinor); | ||
125 | Assert.True(version.HasPatch); | ||
126 | Assert.False(version.HasRevision); | ||
100 | Assert.Equal("a", version.Labels[0].Label); | 127 | Assert.Equal("a", version.Labels[0].Label); |
101 | Assert.Null(version.Labels[0].Numeric); | 128 | Assert.Null(version.Labels[0].Numeric); |
102 | Assert.Null(version.Metadata); | 129 | Assert.Null(version.Metadata); |
@@ -109,8 +136,12 @@ namespace WixToolsetTest.Data | |||
109 | Assert.Null(version.Prefix); | 136 | Assert.Null(version.Prefix); |
110 | Assert.Equal((uint)0, version.Major); | 137 | Assert.Equal((uint)0, version.Major); |
111 | Assert.Equal((uint)1, version.Minor); | 138 | Assert.Equal((uint)1, version.Minor); |
112 | Assert.Null(version.Patch); | 139 | Assert.Equal((uint)0, version.Patch); |
113 | Assert.Null(version.Revision); | 140 | Assert.Equal((uint)0, version.Revision); |
141 | Assert.True(version.HasMajor); | ||
142 | Assert.True(version.HasMinor); | ||
143 | Assert.False(version.HasPatch); | ||
144 | Assert.False(version.HasRevision); | ||
114 | Assert.Equal("a", version.Labels[0].Label); | 145 | Assert.Equal("a", version.Labels[0].Label); |
115 | Assert.Null(version.Labels[0].Numeric); | 146 | Assert.Null(version.Labels[0].Numeric); |
116 | Assert.Equal("000", version.Labels[1].Label); | 147 | Assert.Equal("000", version.Labels[1].Label); |
@@ -126,7 +157,11 @@ namespace WixToolsetTest.Data | |||
126 | Assert.Equal((uint)1, version.Major); | 157 | Assert.Equal((uint)1, version.Major); |
127 | Assert.Equal((uint)2, version.Minor); | 158 | Assert.Equal((uint)2, version.Minor); |
128 | Assert.Equal((uint)3, version.Patch); | 159 | Assert.Equal((uint)3, version.Patch); |
129 | Assert.Null(version.Revision); | 160 | Assert.Equal((uint)0, version.Revision); |
161 | Assert.True(version.HasMajor); | ||
162 | Assert.True(version.HasMinor); | ||
163 | Assert.True(version.HasPatch); | ||
164 | Assert.False(version.HasRevision); | ||
130 | Assert.Null(version.Labels); | 165 | Assert.Null(version.Labels); |
131 | Assert.Equal("abcd", version.Metadata); | 166 | Assert.Equal("abcd", version.Metadata); |
132 | } | 167 | } |
@@ -134,8 +169,10 @@ namespace WixToolsetTest.Data | |||
134 | [Fact] | 169 | [Fact] |
135 | public void CannotParseUnexpectedContentAsMetadata() | 170 | public void CannotParseUnexpectedContentAsMetadata() |
136 | { | 171 | { |
137 | Assert.False(WixVersion.TryParse("1.2.3.abcd", out var _)); | 172 | Assert.False(WixVersion.TryParse("1.2.3.abcd", out var version)); |
138 | Assert.False(WixVersion.TryParse("1.2.3.-abcd", out var _)); | 173 | Assert.Null(version); |
174 | Assert.False(WixVersion.TryParse("1.2.3.-abcd", out version)); | ||
175 | Assert.Null(version); | ||
139 | } | 176 | } |
140 | 177 | ||
141 | [Fact] | 178 | [Fact] |
@@ -147,6 +184,10 @@ namespace WixToolsetTest.Data | |||
147 | Assert.Equal((uint)20, version.Minor); | 184 | Assert.Equal((uint)20, version.Minor); |
148 | Assert.Equal((uint)30, version.Patch); | 185 | Assert.Equal((uint)30, version.Patch); |
149 | Assert.Equal((uint)40, version.Revision); | 186 | Assert.Equal((uint)40, version.Revision); |
187 | Assert.True(version.HasMajor); | ||
188 | Assert.True(version.HasMinor); | ||
189 | Assert.True(version.HasPatch); | ||
190 | Assert.True(version.HasRevision); | ||
150 | Assert.Null(version.Labels); | 191 | Assert.Null(version.Labels); |
151 | Assert.Null(version.Metadata); | 192 | Assert.Null(version.Metadata); |
152 | 193 | ||
@@ -156,6 +197,10 @@ namespace WixToolsetTest.Data | |||
156 | Assert.Equal((uint)200, version2.Minor); | 197 | Assert.Equal((uint)200, version2.Minor); |
157 | Assert.Equal((uint)300, version2.Patch); | 198 | Assert.Equal((uint)300, version2.Patch); |
158 | Assert.Equal((uint)400, version2.Revision); | 199 | Assert.Equal((uint)400, version2.Revision); |
200 | Assert.True(version.HasMajor); | ||
201 | Assert.True(version.HasMinor); | ||
202 | Assert.True(version.HasPatch); | ||
203 | Assert.True(version.HasRevision); | ||
159 | Assert.Null(version2.Labels); | 204 | Assert.Null(version2.Labels); |
160 | Assert.Null(version2.Metadata); | 205 | Assert.Null(version2.Metadata); |
161 | } | 206 | } |
@@ -169,6 +214,10 @@ namespace WixToolsetTest.Data | |||
169 | Assert.Equal(4294967295, version.Minor); | 214 | Assert.Equal(4294967295, version.Minor); |
170 | Assert.Equal(4294967295, version.Patch); | 215 | Assert.Equal(4294967295, version.Patch); |
171 | Assert.Equal(4294967295, version.Revision); | 216 | Assert.Equal(4294967295, version.Revision); |
217 | Assert.True(version.HasMajor); | ||
218 | Assert.True(version.HasMinor); | ||
219 | Assert.True(version.HasPatch); | ||
220 | Assert.True(version.HasRevision); | ||
172 | Assert.Null(version.Labels); | 221 | Assert.Null(version.Labels); |
173 | Assert.Null(version.Metadata); | 222 | Assert.Null(version.Metadata); |
174 | } | 223 | } |
@@ -176,7 +225,8 @@ namespace WixToolsetTest.Data | |||
176 | [Fact] | 225 | [Fact] |
177 | public void CannotParseTooLargeNumbers() | 226 | public void CannotParseTooLargeNumbers() |
178 | { | 227 | { |
179 | Assert.False(WixVersion.TryParse("4294967296.4294967296.4294967296.4294967296", out var _)); | 228 | Assert.False(WixVersion.TryParse("4294967296.4294967296.4294967296.4294967296", out var version)); |
229 | Assert.Null(version); | ||
180 | } | 230 | } |
181 | 231 | ||
182 | [Fact] | 232 | [Fact] |
@@ -188,6 +238,10 @@ namespace WixToolsetTest.Data | |||
188 | Assert.Equal((uint)2, version.Minor); | 238 | Assert.Equal((uint)2, version.Minor); |
189 | Assert.Equal((uint)3, version.Patch); | 239 | Assert.Equal((uint)3, version.Patch); |
190 | Assert.Equal((uint)4, version.Revision); | 240 | Assert.Equal((uint)4, version.Revision); |
241 | Assert.True(version.HasMajor); | ||
242 | Assert.True(version.HasMinor); | ||
243 | Assert.True(version.HasPatch); | ||
244 | Assert.True(version.HasRevision); | ||
191 | Assert.Equal("a", version.Labels[0].Label); | 245 | Assert.Equal("a", version.Labels[0].Label); |
192 | Assert.Null(version.Labels[0].Numeric); | 246 | Assert.Null(version.Labels[0].Numeric); |
193 | Assert.Equal("b", version.Labels[1].Label); | 247 | Assert.Equal("b", version.Labels[1].Label); |
diff --git a/src/libs/dutil/WixToolset.DUtil/inc/verutil.h b/src/libs/dutil/WixToolset.DUtil/inc/verutil.h index 4fdaa522..cab18be7 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/verutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/verutil.h | |||
@@ -28,6 +28,10 @@ typedef struct _VERUTIL_VERSION | |||
28 | VERUTIL_VERSION_RELEASE_LABEL* rgReleaseLabels; | 28 | VERUTIL_VERSION_RELEASE_LABEL* rgReleaseLabels; |
29 | SIZE_T cchMetadataOffset; | 29 | SIZE_T cchMetadataOffset; |
30 | BOOL fInvalid; | 30 | BOOL fInvalid; |
31 | BOOL fHasMajor; | ||
32 | BOOL fHasMinor; | ||
33 | BOOL fHasPatch; | ||
34 | BOOL fHasRevision; | ||
31 | } VERUTIL_VERSION; | 35 | } VERUTIL_VERSION; |
32 | 36 | ||
33 | /******************************************************************* | 37 | /******************************************************************* |
diff --git a/src/libs/dutil/WixToolset.DUtil/verutil.cpp b/src/libs/dutil/WixToolset.DUtil/verutil.cpp index 30b979b1..276441b5 100644 --- a/src/libs/dutil/WixToolset.DUtil/verutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/verutil.cpp | |||
@@ -196,9 +196,13 @@ DAPI_(HRESULT) VerCopyVersion( | |||
196 | 196 | ||
197 | pCopy->chPrefix = pSource->chPrefix; | 197 | pCopy->chPrefix = pSource->chPrefix; |
198 | pCopy->dwMajor = pSource->dwMajor; | 198 | pCopy->dwMajor = pSource->dwMajor; |
199 | pCopy->fHasMajor = pSource->fHasMajor; | ||
199 | pCopy->dwMinor = pSource->dwMinor; | 200 | pCopy->dwMinor = pSource->dwMinor; |
201 | pCopy->fHasMinor = pSource->fHasMinor; | ||
200 | pCopy->dwPatch = pSource->dwPatch; | 202 | pCopy->dwPatch = pSource->dwPatch; |
203 | pCopy->fHasPatch = pSource->fHasPatch; | ||
201 | pCopy->dwRevision = pSource->dwRevision; | 204 | pCopy->dwRevision = pSource->dwRevision; |
205 | pCopy->fHasRevision = pSource->fHasRevision; | ||
202 | 206 | ||
203 | if (pSource->cReleaseLabels) | 207 | if (pSource->cReleaseLabels) |
204 | { | 208 | { |
@@ -370,15 +374,19 @@ DAPI_(HRESULT) VerParseVersion( | |||
370 | { | 374 | { |
371 | case 0: | 375 | case 0: |
372 | pVersion->dwMajor = uPart; | 376 | pVersion->dwMajor = uPart; |
377 | pVersion->fHasMajor = TRUE; | ||
373 | break; | 378 | break; |
374 | case 1: | 379 | case 1: |
375 | pVersion->dwMinor = uPart; | 380 | pVersion->dwMinor = uPart; |
381 | pVersion->fHasMinor = TRUE; | ||
376 | break; | 382 | break; |
377 | case 2: | 383 | case 2: |
378 | pVersion->dwPatch = uPart; | 384 | pVersion->dwPatch = uPart; |
385 | pVersion->fHasPatch = TRUE; | ||
379 | break; | 386 | break; |
380 | case 3: | 387 | case 3: |
381 | pVersion->dwRevision = uPart; | 388 | pVersion->dwRevision = uPart; |
389 | pVersion->fHasRevision = TRUE; | ||
382 | break; | 390 | break; |
383 | } | 391 | } |
384 | 392 | ||
@@ -549,6 +557,11 @@ DAPI_(HRESULT) VerVersionFromQword( | |||
549 | pVersion->dwPatch = (WORD)(qwVersion >> 16 & 0xffff); | 557 | pVersion->dwPatch = (WORD)(qwVersion >> 16 & 0xffff); |
550 | pVersion->dwRevision = (WORD)(qwVersion & 0xffff); | 558 | pVersion->dwRevision = (WORD)(qwVersion & 0xffff); |
551 | 559 | ||
560 | pVersion->fHasMajor = TRUE; | ||
561 | pVersion->fHasMinor = TRUE; | ||
562 | pVersion->fHasPatch = TRUE; | ||
563 | pVersion->fHasRevision = TRUE; | ||
564 | |||
552 | hr = StrAllocFormatted(&pVersion->sczVersion, L"%lu.%lu.%lu.%lu", pVersion->dwMajor, pVersion->dwMinor, pVersion->dwPatch, pVersion->dwRevision); | 565 | hr = StrAllocFormatted(&pVersion->sczVersion, L"%lu.%lu.%lu.%lu", pVersion->dwMajor, pVersion->dwMinor, pVersion->dwPatch, pVersion->dwRevision); |
553 | ExitOnFailure(hr, "Failed to allocate and format the version string."); | 566 | ExitOnFailure(hr, "Failed to allocate and format the version string."); |
554 | 567 | ||
diff --git a/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp b/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp index c20b9887..3402097c 100644 --- a/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp +++ b/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp | |||
@@ -42,6 +42,10 @@ namespace DutilTests | |||
42 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 42 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
43 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); | 43 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); |
44 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 44 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
45 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
46 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
47 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
48 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasRevision); | ||
45 | 49 | ||
46 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 50 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
47 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 51 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -52,6 +56,10 @@ namespace DutilTests | |||
52 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 56 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
53 | Assert::Equal<DWORD>(5, pVersion2->cchMetadataOffset); | 57 | Assert::Equal<DWORD>(5, pVersion2->cchMetadataOffset); |
54 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 58 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
59 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
60 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
61 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasPatch); | ||
62 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
55 | 63 | ||
56 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 64 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
57 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 65 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -62,6 +70,10 @@ namespace DutilTests | |||
62 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); | 70 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); |
63 | Assert::Equal<DWORD>(7, pVersion3->cchMetadataOffset); | 71 | Assert::Equal<DWORD>(7, pVersion3->cchMetadataOffset); |
64 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 72 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
73 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
74 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMinor); | ||
75 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasPatch); | ||
76 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasRevision); | ||
65 | 77 | ||
66 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); | 78 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); |
67 | TestVerutilCompareParsedVersions(pVersion3, pVersion2, 0); | 79 | TestVerutilCompareParsedVersions(pVersion3, pVersion2, 0); |
@@ -111,6 +123,10 @@ namespace DutilTests | |||
111 | 123 | ||
112 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); | 124 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); |
113 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 125 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
126 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
127 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
128 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasPatch); | ||
129 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
114 | 130 | ||
115 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 131 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
116 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 132 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -127,6 +143,10 @@ namespace DutilTests | |||
127 | 143 | ||
128 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); | 144 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); |
129 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 145 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
146 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
147 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
148 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasPatch); | ||
149 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
130 | 150 | ||
131 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, -1); | 151 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, -1); |
132 | } | 152 | } |
@@ -183,6 +203,10 @@ namespace DutilTests | |||
183 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 203 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
184 | Assert::Equal<DWORD>(3, pVersion1->cchMetadataOffset); | 204 | Assert::Equal<DWORD>(3, pVersion1->cchMetadataOffset); |
185 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); | 205 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); |
206 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
207 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasMinor); | ||
208 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasPatch); | ||
209 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
186 | 210 | ||
187 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 211 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
188 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 212 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -193,6 +217,10 @@ namespace DutilTests | |||
193 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 217 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
194 | Assert::Equal<DWORD>(3, pVersion2->cchMetadataOffset); | 218 | Assert::Equal<DWORD>(3, pVersion2->cchMetadataOffset); |
195 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 219 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
220 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
221 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasMinor); | ||
222 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasPatch); | ||
223 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
196 | 224 | ||
197 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 225 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
198 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 226 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -203,6 +231,10 @@ namespace DutilTests | |||
203 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); | 231 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); |
204 | Assert::Equal<DWORD>(1, pVersion3->cchMetadataOffset); | 232 | Assert::Equal<DWORD>(1, pVersion3->cchMetadataOffset); |
205 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 233 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
234 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
235 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasMinor); | ||
236 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasPatch); | ||
237 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasRevision); | ||
206 | 238 | ||
207 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 239 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
208 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | 240 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); |
@@ -213,6 +245,10 @@ namespace DutilTests | |||
213 | Assert::Equal<DWORD>(0, pVersion4->cReleaseLabels); | 245 | Assert::Equal<DWORD>(0, pVersion4->cReleaseLabels); |
214 | Assert::Equal<DWORD>(0, pVersion4->cchMetadataOffset); | 246 | Assert::Equal<DWORD>(0, pVersion4->cchMetadataOffset); |
215 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); | 247 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); |
248 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasMajor); | ||
249 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasMinor); | ||
250 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasPatch); | ||
251 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasRevision); | ||
216 | 252 | ||
217 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | 253 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); |
218 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | 254 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); |
@@ -229,6 +265,10 @@ namespace DutilTests | |||
229 | 265 | ||
230 | Assert::Equal<DWORD>(4, pVersion5->cchMetadataOffset); | 266 | Assert::Equal<DWORD>(4, pVersion5->cchMetadataOffset); |
231 | Assert::Equal<BOOL>(FALSE, pVersion5->fInvalid); | 267 | Assert::Equal<BOOL>(FALSE, pVersion5->fInvalid); |
268 | Assert::Equal<BOOL>(TRUE, pVersion5->fHasMajor); | ||
269 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasMinor); | ||
270 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasPatch); | ||
271 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasRevision); | ||
232 | 272 | ||
233 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); | 273 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); |
234 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); | 274 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); |
@@ -245,6 +285,10 @@ namespace DutilTests | |||
245 | 285 | ||
246 | Assert::Equal<DWORD>(5, pVersion6->cchMetadataOffset); | 286 | Assert::Equal<DWORD>(5, pVersion6->cchMetadataOffset); |
247 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); | 287 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); |
288 | Assert::Equal<BOOL>(TRUE, pVersion6->fHasMajor); | ||
289 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasMinor); | ||
290 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasPatch); | ||
291 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasRevision); | ||
248 | 292 | ||
249 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); | 293 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); |
250 | TestVerutilCompareParsedVersions(pVersion3, pVersion4, 1); | 294 | TestVerutilCompareParsedVersions(pVersion3, pVersion4, 1); |
@@ -297,6 +341,10 @@ namespace DutilTests | |||
297 | 341 | ||
298 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); | 342 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); |
299 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 343 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
344 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
345 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
346 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
347 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
300 | 348 | ||
301 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 349 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
302 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 350 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -313,6 +361,10 @@ namespace DutilTests | |||
313 | 361 | ||
314 | Assert::Equal<DWORD>(3, pVersion2->cchMetadataOffset); | 362 | Assert::Equal<DWORD>(3, pVersion2->cchMetadataOffset); |
315 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 363 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
364 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
365 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasMinor); | ||
366 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasPatch); | ||
367 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
316 | 368 | ||
317 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 369 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
318 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 370 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -329,6 +381,10 @@ namespace DutilTests | |||
329 | 381 | ||
330 | Assert::Equal<DWORD>(3, pVersion3->cchMetadataOffset); | 382 | Assert::Equal<DWORD>(3, pVersion3->cchMetadataOffset); |
331 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 383 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
384 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
385 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasMinor); | ||
386 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasPatch); | ||
387 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasRevision); | ||
332 | 388 | ||
333 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); | 389 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); |
334 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, -1); | 390 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, -1); |
@@ -387,6 +443,10 @@ namespace DutilTests | |||
387 | 443 | ||
388 | Assert::Equal<DWORD>(8, pVersion1->cchMetadataOffset); | 444 | Assert::Equal<DWORD>(8, pVersion1->cchMetadataOffset); |
389 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 445 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
446 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
447 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
448 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasPatch); | ||
449 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
390 | 450 | ||
391 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 451 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
392 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 452 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -407,6 +467,10 @@ namespace DutilTests | |||
407 | 467 | ||
408 | Assert::Equal<DWORD>(9, pVersion2->cchMetadataOffset); | 468 | Assert::Equal<DWORD>(9, pVersion2->cchMetadataOffset); |
409 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 469 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
470 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
471 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
472 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasPatch); | ||
473 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
410 | 474 | ||
411 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 475 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
412 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 476 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -431,6 +495,10 @@ namespace DutilTests | |||
431 | 495 | ||
432 | Assert::Equal<DWORD>(9, pVersion3->cchMetadataOffset); | 496 | Assert::Equal<DWORD>(9, pVersion3->cchMetadataOffset); |
433 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 497 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
498 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
499 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMinor); | ||
500 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasPatch); | ||
501 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasRevision); | ||
434 | 502 | ||
435 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 503 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
436 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | 504 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); |
@@ -455,6 +523,10 @@ namespace DutilTests | |||
455 | 523 | ||
456 | Assert::Equal<DWORD>(13, pVersion4->cchMetadataOffset); | 524 | Assert::Equal<DWORD>(13, pVersion4->cchMetadataOffset); |
457 | Assert::Equal<BOOL>(FALSE, pVersion4->fInvalid); | 525 | Assert::Equal<BOOL>(FALSE, pVersion4->fInvalid); |
526 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMajor); | ||
527 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMinor); | ||
528 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasPatch); | ||
529 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasRevision); | ||
458 | 530 | ||
459 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); | 531 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); |
460 | TestVerutilCompareParsedVersions(pVersion3, pVersion4, 0); | 532 | TestVerutilCompareParsedVersions(pVersion3, pVersion4, 0); |
@@ -499,6 +571,10 @@ namespace DutilTests | |||
499 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 571 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
500 | Assert::Equal<DWORD>(6, pVersion1->cchMetadataOffset); | 572 | Assert::Equal<DWORD>(6, pVersion1->cchMetadataOffset); |
501 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 573 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
574 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
575 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
576 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
577 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
502 | 578 | ||
503 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 579 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
504 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 580 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -509,6 +585,10 @@ namespace DutilTests | |||
509 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 585 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
510 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); | 586 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); |
511 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 587 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
588 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
589 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
590 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasPatch); | ||
591 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
512 | 592 | ||
513 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 593 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
514 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 594 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -519,6 +599,10 @@ namespace DutilTests | |||
519 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); | 599 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); |
520 | Assert::Equal<DWORD>(6, pVersion3->cchMetadataOffset); | 600 | Assert::Equal<DWORD>(6, pVersion3->cchMetadataOffset); |
521 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); | 601 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); |
602 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
603 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMinor); | ||
604 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasPatch); | ||
605 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasRevision); | ||
522 | 606 | ||
523 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); | 607 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); |
524 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 1); | 608 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 1); |
@@ -573,6 +657,10 @@ namespace DutilTests | |||
573 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 657 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
574 | Assert::Equal<DWORD>(11, pVersion1->cchMetadataOffset); | 658 | Assert::Equal<DWORD>(11, pVersion1->cchMetadataOffset); |
575 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 659 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
660 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
661 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
662 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
663 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasRevision); | ||
576 | 664 | ||
577 | NativeAssert::StringEqual(wzVersion1, pVersion2->sczVersion); | 665 | NativeAssert::StringEqual(wzVersion1, pVersion2->sczVersion); |
578 | Assert::Equal<WCHAR>(L'v', pVersion2->chPrefix); | 666 | Assert::Equal<WCHAR>(L'v', pVersion2->chPrefix); |
@@ -583,6 +671,10 @@ namespace DutilTests | |||
583 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 671 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
584 | Assert::Equal<DWORD>(11, pVersion2->cchMetadataOffset); | 672 | Assert::Equal<DWORD>(11, pVersion2->cchMetadataOffset); |
585 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 673 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
674 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
675 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
676 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasPatch); | ||
677 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasRevision); | ||
586 | 678 | ||
587 | NativeAssert::StringEqual(wzVersion1, pVersion3->sczVersion); | 679 | NativeAssert::StringEqual(wzVersion1, pVersion3->sczVersion); |
588 | Assert::Equal<WCHAR>(L'V', pVersion3->chPrefix); | 680 | Assert::Equal<WCHAR>(L'V', pVersion3->chPrefix); |
@@ -593,6 +685,10 @@ namespace DutilTests | |||
593 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); | 685 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); |
594 | Assert::Equal<DWORD>(11, pVersion3->cchMetadataOffset); | 686 | Assert::Equal<DWORD>(11, pVersion3->cchMetadataOffset); |
595 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 687 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
688 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
689 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMinor); | ||
690 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasPatch); | ||
691 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasRevision); | ||
596 | 692 | ||
597 | NativeAssert::StringEqual(L"10.20.30.40-abc", pVersion4->sczVersion); | 693 | NativeAssert::StringEqual(L"10.20.30.40-abc", pVersion4->sczVersion); |
598 | Assert::Equal<WCHAR>(L'v', pVersion4->chPrefix); | 694 | Assert::Equal<WCHAR>(L'v', pVersion4->chPrefix); |
@@ -608,6 +704,10 @@ namespace DutilTests | |||
608 | 704 | ||
609 | Assert::Equal<DWORD>(15, pVersion4->cchMetadataOffset); | 705 | Assert::Equal<DWORD>(15, pVersion4->cchMetadataOffset); |
610 | Assert::Equal<BOOL>(FALSE, pVersion4->fInvalid); | 706 | Assert::Equal<BOOL>(FALSE, pVersion4->fInvalid); |
707 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMajor); | ||
708 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMinor); | ||
709 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasPatch); | ||
710 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasRevision); | ||
611 | 711 | ||
612 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | 712 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); |
613 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | 713 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); |
@@ -618,6 +718,10 @@ namespace DutilTests | |||
618 | Assert::Equal<DWORD>(0, pVersion5->cReleaseLabels); | 718 | Assert::Equal<DWORD>(0, pVersion5->cReleaseLabels); |
619 | Assert::Equal<DWORD>(0, pVersion5->cchMetadataOffset); | 719 | Assert::Equal<DWORD>(0, pVersion5->cchMetadataOffset); |
620 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); | 720 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); |
721 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasMajor); | ||
722 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasMinor); | ||
723 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasPatch); | ||
724 | Assert::Equal<BOOL>(FALSE, pVersion5->fHasRevision); | ||
621 | 725 | ||
622 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); | 726 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); |
623 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 0); | 727 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 0); |
@@ -659,6 +763,10 @@ namespace DutilTests | |||
659 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 763 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
660 | Assert::Equal<DWORD>(43, pVersion1->cchMetadataOffset); | 764 | Assert::Equal<DWORD>(43, pVersion1->cchMetadataOffset); |
661 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 765 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
766 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
767 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
768 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
769 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasRevision); | ||
662 | 770 | ||
663 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 771 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
664 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 772 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -669,6 +777,10 @@ namespace DutilTests | |||
669 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 777 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
670 | Assert::Equal<DWORD>(0, pVersion2->cchMetadataOffset); | 778 | Assert::Equal<DWORD>(0, pVersion2->cchMetadataOffset); |
671 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 779 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
780 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasMajor); | ||
781 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasMinor); | ||
782 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasPatch); | ||
783 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
672 | 784 | ||
673 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); | 785 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 1); |
674 | } | 786 | } |
@@ -705,6 +817,10 @@ namespace DutilTests | |||
705 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 817 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
706 | Assert::Equal<DWORD>(6, pVersion1->cchMetadataOffset); | 818 | Assert::Equal<DWORD>(6, pVersion1->cchMetadataOffset); |
707 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 819 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
820 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
821 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
822 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
823 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
708 | 824 | ||
709 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 825 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
710 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 826 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -715,6 +831,10 @@ namespace DutilTests | |||
715 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 831 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
716 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); | 832 | Assert::Equal<DWORD>(6, pVersion2->cchMetadataOffset); |
717 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 833 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
834 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
835 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMinor); | ||
836 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasPatch); | ||
837 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
718 | 838 | ||
719 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); | 839 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); |
720 | } | 840 | } |
@@ -749,6 +869,10 @@ namespace DutilTests | |||
749 | 869 | ||
750 | Assert::Equal<DWORD>(8, pSource->cchMetadataOffset); | 870 | Assert::Equal<DWORD>(8, pSource->cchMetadataOffset); |
751 | Assert::Equal<BOOL>(FALSE, pSource->fInvalid); | 871 | Assert::Equal<BOOL>(FALSE, pSource->fInvalid); |
872 | Assert::Equal<BOOL>(TRUE, pSource->fHasMajor); | ||
873 | Assert::Equal<BOOL>(TRUE, pSource->fHasMinor); | ||
874 | Assert::Equal<BOOL>(TRUE, pSource->fHasPatch); | ||
875 | Assert::Equal<BOOL>(TRUE, pSource->fHasRevision); | ||
752 | 876 | ||
753 | hr = VerCopyVersion(pSource, &pCopy); | 877 | hr = VerCopyVersion(pSource, &pCopy); |
754 | NativeAssert::Succeeded(hr, "VerCopyVersion failed"); | 878 | NativeAssert::Succeeded(hr, "VerCopyVersion failed"); |
@@ -756,6 +880,10 @@ namespace DutilTests | |||
756 | Assert::False(pSource == pCopy); | 880 | Assert::False(pSource == pCopy); |
757 | Assert::False(pSource->sczVersion == pCopy->sczVersion); | 881 | Assert::False(pSource->sczVersion == pCopy->sczVersion); |
758 | Assert::Equal<WCHAR>(L'\0', pCopy->chPrefix); | 882 | Assert::Equal<WCHAR>(L'\0', pCopy->chPrefix); |
883 | Assert::Equal<BOOL>(TRUE, pCopy->fHasMajor); | ||
884 | Assert::Equal<BOOL>(TRUE, pCopy->fHasMinor); | ||
885 | Assert::Equal<BOOL>(TRUE, pCopy->fHasPatch); | ||
886 | Assert::Equal<BOOL>(TRUE, pCopy->fHasRevision); | ||
759 | 887 | ||
760 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); | 888 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); |
761 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); | 889 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); |
@@ -814,6 +942,10 @@ namespace DutilTests | |||
814 | 942 | ||
815 | Assert::Equal<DWORD>(18, pSource->cchMetadataOffset); | 943 | Assert::Equal<DWORD>(18, pSource->cchMetadataOffset); |
816 | Assert::Equal<BOOL>(TRUE, pSource->fInvalid); | 944 | Assert::Equal<BOOL>(TRUE, pSource->fInvalid); |
945 | Assert::Equal<BOOL>(TRUE, pSource->fHasMajor); | ||
946 | Assert::Equal<BOOL>(TRUE, pSource->fHasMinor); | ||
947 | Assert::Equal<BOOL>(TRUE, pSource->fHasPatch); | ||
948 | Assert::Equal<BOOL>(TRUE, pSource->fHasRevision); | ||
817 | 949 | ||
818 | hr = VerCopyVersion(pSource, &pCopy); | 950 | hr = VerCopyVersion(pSource, &pCopy); |
819 | NativeAssert::Succeeded(hr, "VerCopyVersion failed"); | 951 | NativeAssert::Succeeded(hr, "VerCopyVersion failed"); |
@@ -822,6 +954,10 @@ namespace DutilTests | |||
822 | Assert::False(pSource->sczVersion == pCopy->sczVersion); | 954 | Assert::False(pSource->sczVersion == pCopy->sczVersion); |
823 | Assert::False(pSource->rgReleaseLabels == pCopy->rgReleaseLabels); | 955 | Assert::False(pSource->rgReleaseLabels == pCopy->rgReleaseLabels); |
824 | Assert::Equal<WCHAR>(L'v', pCopy->chPrefix); | 956 | Assert::Equal<WCHAR>(L'v', pCopy->chPrefix); |
957 | Assert::Equal<BOOL>(TRUE, pCopy->fHasMajor); | ||
958 | Assert::Equal<BOOL>(TRUE, pCopy->fHasMinor); | ||
959 | Assert::Equal<BOOL>(TRUE, pCopy->fHasPatch); | ||
960 | Assert::Equal<BOOL>(TRUE, pCopy->fHasRevision); | ||
825 | 961 | ||
826 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); | 962 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); |
827 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); | 963 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); |
@@ -886,6 +1022,10 @@ namespace DutilTests | |||
886 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 1022 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
887 | Assert::Equal<DWORD>(0, pVersion1->cchMetadataOffset); | 1023 | Assert::Equal<DWORD>(0, pVersion1->cchMetadataOffset); |
888 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); | 1024 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); |
1025 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasMajor); | ||
1026 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasMinor); | ||
1027 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasPatch); | ||
1028 | Assert::Equal<BOOL>(FALSE, pVersion1->fHasRevision); | ||
889 | 1029 | ||
890 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 1030 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
891 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | 1031 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); |
@@ -896,6 +1036,10 @@ namespace DutilTests | |||
896 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); | 1036 | Assert::Equal<DWORD>(0, pVersion2->cReleaseLabels); |
897 | Assert::Equal<DWORD>(2, pVersion2->cchMetadataOffset); | 1037 | Assert::Equal<DWORD>(2, pVersion2->cchMetadataOffset); |
898 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 1038 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
1039 | Assert::Equal<BOOL>(TRUE, pVersion2->fHasMajor); | ||
1040 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasMinor); | ||
1041 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasPatch); | ||
1042 | Assert::Equal<BOOL>(FALSE, pVersion2->fHasRevision); | ||
899 | 1043 | ||
900 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 1044 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
901 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | 1045 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); |
@@ -906,6 +1050,10 @@ namespace DutilTests | |||
906 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); | 1050 | Assert::Equal<DWORD>(0, pVersion3->cReleaseLabels); |
907 | Assert::Equal<DWORD>(4, pVersion3->cchMetadataOffset); | 1051 | Assert::Equal<DWORD>(4, pVersion3->cchMetadataOffset); |
908 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); | 1052 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); |
1053 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMajor); | ||
1054 | Assert::Equal<BOOL>(TRUE, pVersion3->fHasMinor); | ||
1055 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasPatch); | ||
1056 | Assert::Equal<BOOL>(FALSE, pVersion3->fHasRevision); | ||
909 | 1057 | ||
910 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 1058 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
911 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | 1059 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); |
@@ -916,6 +1064,10 @@ namespace DutilTests | |||
916 | Assert::Equal<DWORD>(0, pVersion4->cReleaseLabels); | 1064 | Assert::Equal<DWORD>(0, pVersion4->cReleaseLabels); |
917 | Assert::Equal<DWORD>(6, pVersion4->cchMetadataOffset); | 1065 | Assert::Equal<DWORD>(6, pVersion4->cchMetadataOffset); |
918 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); | 1066 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); |
1067 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMajor); | ||
1068 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasMinor); | ||
1069 | Assert::Equal<BOOL>(TRUE, pVersion4->fHasPatch); | ||
1070 | Assert::Equal<BOOL>(FALSE, pVersion4->fHasRevision); | ||
919 | 1071 | ||
920 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | 1072 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); |
921 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | 1073 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); |
@@ -926,6 +1078,10 @@ namespace DutilTests | |||
926 | Assert::Equal<DWORD>(0, pVersion5->cReleaseLabels); | 1078 | Assert::Equal<DWORD>(0, pVersion5->cReleaseLabels); |
927 | Assert::Equal<DWORD>(8, pVersion5->cchMetadataOffset); | 1079 | Assert::Equal<DWORD>(8, pVersion5->cchMetadataOffset); |
928 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); | 1080 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); |
1081 | Assert::Equal<BOOL>(TRUE, pVersion5->fHasMajor); | ||
1082 | Assert::Equal<BOOL>(TRUE, pVersion5->fHasMinor); | ||
1083 | Assert::Equal<BOOL>(TRUE, pVersion5->fHasPatch); | ||
1084 | Assert::Equal<BOOL>(TRUE, pVersion5->fHasRevision); | ||
929 | 1085 | ||
930 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); | 1086 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); |
931 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); | 1087 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); |
@@ -936,6 +1092,10 @@ namespace DutilTests | |||
936 | Assert::Equal<DWORD>(0, pVersion6->cReleaseLabels); | 1092 | Assert::Equal<DWORD>(0, pVersion6->cReleaseLabels); |
937 | Assert::Equal<DWORD>(2, pVersion6->cchMetadataOffset); | 1093 | Assert::Equal<DWORD>(2, pVersion6->cchMetadataOffset); |
938 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); | 1094 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); |
1095 | Assert::Equal<BOOL>(TRUE, pVersion6->fHasMajor); | ||
1096 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasMinor); | ||
1097 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasPatch); | ||
1098 | Assert::Equal<BOOL>(FALSE, pVersion6->fHasRevision); | ||
939 | 1099 | ||
940 | NativeAssert::StringEqual(wzVersion7, pVersion7->sczVersion); | 1100 | NativeAssert::StringEqual(wzVersion7, pVersion7->sczVersion); |
941 | Assert::Equal<WCHAR>(L'\0', pVersion7->chPrefix); | 1101 | Assert::Equal<WCHAR>(L'\0', pVersion7->chPrefix); |
@@ -951,6 +1111,10 @@ namespace DutilTests | |||
951 | 1111 | ||
952 | Assert::Equal<DWORD>(4, pVersion7->cchMetadataOffset); | 1112 | Assert::Equal<DWORD>(4, pVersion7->cchMetadataOffset); |
953 | Assert::Equal<BOOL>(TRUE, pVersion7->fInvalid); | 1113 | Assert::Equal<BOOL>(TRUE, pVersion7->fInvalid); |
1114 | Assert::Equal<BOOL>(TRUE, pVersion7->fHasMajor); | ||
1115 | Assert::Equal<BOOL>(FALSE, pVersion7->fHasMinor); | ||
1116 | Assert::Equal<BOOL>(FALSE, pVersion7->fHasPatch); | ||
1117 | Assert::Equal<BOOL>(FALSE, pVersion7->fHasRevision); | ||
954 | } | 1118 | } |
955 | finally | 1119 | finally |
956 | { | 1120 | { |
@@ -984,6 +1148,10 @@ namespace DutilTests | |||
984 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); | 1148 | Assert::Equal<DWORD>(0, pVersion1->cReleaseLabels); |
985 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); | 1149 | Assert::Equal<DWORD>(7, pVersion1->cchMetadataOffset); |
986 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 1150 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
1151 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMajor); | ||
1152 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasMinor); | ||
1153 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasPatch); | ||
1154 | Assert::Equal<BOOL>(TRUE, pVersion1->fHasRevision); | ||
987 | } | 1155 | } |
988 | finally | 1156 | finally |
989 | { | 1157 | { |
diff --git a/src/wix/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs index e63bf65c..672bb235 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs | |||
@@ -254,10 +254,10 @@ namespace WixToolset.Core.Burn.Bundles | |||
254 | return new Version(0, 0); | 254 | return new Version(0, 0); |
255 | } | 255 | } |
256 | 256 | ||
257 | var major = wixVersion.Major ?? 0; | 257 | var major = wixVersion.Major; |
258 | var minor = wixVersion.Minor ?? 0; | 258 | var minor = wixVersion.Minor; |
259 | var build = wixVersion.Patch ?? 0; | 259 | var build = wixVersion.Patch; |
260 | var revision = wixVersion.Revision ?? 0; | 260 | var revision = wixVersion.Revision; |
261 | 261 | ||
262 | if (UInt16.MaxValue < major || UInt16.MaxValue < minor || UInt16.MaxValue < build || UInt16.MaxValue < revision) | 262 | if (UInt16.MaxValue < major || UInt16.MaxValue < minor || UInt16.MaxValue < build || UInt16.MaxValue < revision) |
263 | { | 263 | { |
@@ -369,7 +369,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
369 | public BURN_SPLASH_SCREEN_TYPE Type; | 369 | public BURN_SPLASH_SCREEN_TYPE Type; |
370 | 370 | ||
371 | [MarshalAs(UnmanagedType.U2)] | 371 | [MarshalAs(UnmanagedType.U2)] |
372 | public UInt16 ResourceId; | 372 | public ushort ResourceId; |
373 | 373 | ||
374 | public byte[] ToBytes() | 374 | public byte[] ToBytes() |
375 | { | 375 | { |