diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-05-16 16:03:25 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-05-17 22:54:13 -0500 |
commit | 0ea53e27361cbfe664df98d717e55005f329aff1 (patch) | |
tree | d75e02fadee9669593ca3ccf28401b67064244af | |
parent | d5985a1688bc878e42ffd3ce3939fa52303cab16 (diff) | |
download | wix-0ea53e27361cbfe664df98d717e55005f329aff1.tar.gz wix-0ea53e27361cbfe664df98d717e55005f329aff1.tar.bz2 wix-0ea53e27361cbfe664df98d717e55005f329aff1.zip |
Store the prefix character in VERUTIL_VERSION.
Fix edge case where version string is all v's.
-rw-r--r-- | src/api/burn/WixToolset.Mba.Core/VerUtil.cs | 1 | ||||
-rw-r--r-- | src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | 6 | ||||
-rw-r--r-- | src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | 2 | ||||
-rw-r--r-- | src/burn/test/BurnUnitTest/RegistrationTest.cpp | 3 | ||||
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/inc/verutil.h | 1 | ||||
-rw-r--r-- | src/libs/dutil/WixToolset.DUtil/verutil.cpp | 37 | ||||
-rw-r--r-- | src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp | 82 |
7 files changed, 118 insertions, 14 deletions
diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs index a342f85c..611f9710 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtil.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtil.cs | |||
@@ -59,6 +59,7 @@ namespace WixToolset.Mba.Core | |||
59 | internal struct VersionStruct | 59 | internal struct VersionStruct |
60 | { | 60 | { |
61 | public IntPtr sczVersion; | 61 | public IntPtr sczVersion; |
62 | public char chPrefix; | ||
62 | public uint dwMajor; | 63 | public uint dwMajor; |
63 | public uint dwMinor; | 64 | public uint dwMinor; |
64 | public uint dwPatch; | 65 | public uint dwPatch; |
diff --git a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs index 7408c26f..731dedaf 100644 --- a/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs +++ b/src/api/burn/WixToolset.Mba.Core/VerUtilVersion.cs | |||
@@ -17,6 +17,7 @@ namespace WixToolset.Mba.Core | |||
17 | var pVersion = handle.DangerousGetHandle(); | 17 | var pVersion = handle.DangerousGetHandle(); |
18 | var version = (VerUtil.VersionStruct)Marshal.PtrToStructure(pVersion, typeof(VerUtil.VersionStruct)); | 18 | var version = (VerUtil.VersionStruct)Marshal.PtrToStructure(pVersion, typeof(VerUtil.VersionStruct)); |
19 | this.Version = Marshal.PtrToStringUni(version.sczVersion); | 19 | this.Version = Marshal.PtrToStringUni(version.sczVersion); |
20 | this.Prefix = version.chPrefix; | ||
20 | this.Major = version.dwMajor; | 21 | this.Major = version.dwMajor; |
21 | this.Minor = version.dwMinor; | 22 | this.Minor = version.dwMinor; |
22 | this.Patch = version.dwPatch; | 23 | this.Patch = version.dwPatch; |
@@ -39,6 +40,11 @@ namespace WixToolset.Mba.Core | |||
39 | public string Version { get; private set; } | 40 | public string Version { get; private set; } |
40 | 41 | ||
41 | /// <summary> | 42 | /// <summary> |
43 | /// Prefix character that was stripped from <c>Version</c>, or the null character if there was no prefix. | ||
44 | /// </summary> | ||
45 | public char Prefix { get; private set; } | ||
46 | |||
47 | /// <summary> | ||
42 | /// For version A.B.C.D, Major is A. It is 0 if not specified. | 48 | /// For version A.B.C.D, Major is A. It is 0 if not specified. |
43 | /// </summary> | 49 | /// </summary> |
44 | public uint Major { get; private set; } | 50 | public uint Major { get; private set; } |
diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs index 44142e3d..ceb1b12a 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/VerUtilFixture.cs | |||
@@ -49,6 +49,7 @@ namespace WixToolsetTest.Mba.Core | |||
49 | 49 | ||
50 | using var parsedVersion = VerUtil.VersionFromQword(qwVersion); | 50 | using var parsedVersion = VerUtil.VersionFromQword(qwVersion); |
51 | Assert.Equal("100.200.300.400", parsedVersion.Version); | 51 | Assert.Equal("100.200.300.400", parsedVersion.Version); |
52 | Assert.Equal('\0', parsedVersion.Prefix); | ||
52 | Assert.Equal(100u, parsedVersion.Major); | 53 | Assert.Equal(100u, parsedVersion.Major); |
53 | Assert.Equal(200u, parsedVersion.Minor); | 54 | Assert.Equal(200u, parsedVersion.Minor); |
54 | Assert.Equal(300u, parsedVersion.Patch); | 55 | Assert.Equal(300u, parsedVersion.Patch); |
@@ -65,6 +66,7 @@ namespace WixToolsetTest.Mba.Core | |||
65 | 66 | ||
66 | using var parsedVersion = VerUtil.ParseVersion(version, strict: false); | 67 | using var parsedVersion = VerUtil.ParseVersion(version, strict: false); |
67 | Assert.Equal(version, parsedVersion.Version); | 68 | Assert.Equal(version, parsedVersion.Version); |
69 | Assert.Equal('\0', parsedVersion.Prefix); | ||
68 | Assert.Equal(1u, parsedVersion.Major); | 70 | Assert.Equal(1u, parsedVersion.Major); |
69 | Assert.Equal(2u, parsedVersion.Minor); | 71 | Assert.Equal(2u, parsedVersion.Minor); |
70 | Assert.Equal(3u, parsedVersion.Patch); | 72 | Assert.Equal(3u, parsedVersion.Patch); |
diff --git a/src/burn/test/BurnUnitTest/RegistrationTest.cpp b/src/burn/test/BurnUnitTest/RegistrationTest.cpp index 9aadc2cc..883b9cc8 100644 --- a/src/burn/test/BurnUnitTest/RegistrationTest.cpp +++ b/src/burn/test/BurnUnitTest/RegistrationTest.cpp | |||
@@ -559,6 +559,7 @@ namespace Bootstrapper | |||
559 | L" <Variable Id='MyBurnVariable2' Type='string' Value='foo' Hidden='no' Persisted='yes' />" | 559 | L" <Variable Id='MyBurnVariable2' Type='string' Value='foo' Hidden='no' Persisted='yes' />" |
560 | L" <Variable Id='MyBurnVariable3' Type='version' Value='v1.1-alpha' Hidden='no' Persisted='yes' />" | 560 | L" <Variable Id='MyBurnVariable3' Type='version' Value='v1.1-alpha' Hidden='no' Persisted='yes' />" |
561 | L" <Variable Id='MyBurnVariable4' Type='string' Value='foo' Hidden='no' Persisted='no' />" | 561 | L" <Variable Id='MyBurnVariable4' Type='string' Value='foo' Hidden='no' Persisted='no' />" |
562 | L" <Variable Id='MyBurnVariable5' Type='version' Hidden='no' Persisted='yes' />" | ||
562 | L" <CommandLine Variables='upperCase' />" | 563 | L" <CommandLine Variables='upperCase' />" |
563 | L"</Bundle>"; | 564 | L"</Bundle>"; |
564 | 565 | ||
@@ -597,6 +598,7 @@ namespace Bootstrapper | |||
597 | VariableSetNumericHelper(&variables, L"MyBurnVariable1", 42); | 598 | VariableSetNumericHelper(&variables, L"MyBurnVariable1", 42); |
598 | VariableSetStringHelper(&variables, L"MyBurnVariable2", L"bar", FALSE); | 599 | VariableSetStringHelper(&variables, L"MyBurnVariable2", L"bar", FALSE); |
599 | VariableSetVersionHelper(&variables, L"MyBurnVariable3", L"v1.0-beta"); | 600 | VariableSetVersionHelper(&variables, L"MyBurnVariable3", L"v1.0-beta"); |
601 | VariableSetVersionHelper(&variables, L"MyBurnVariable5", L"vvv"); | ||
600 | 602 | ||
601 | hr = VariableSerialize(&variables, TRUE, &pbBuffer, &cbBuffer); | 603 | hr = VariableSerialize(&variables, TRUE, &pbBuffer, &cbBuffer); |
602 | TestThrowOnFailure(hr, "Failed to serialize variables."); | 604 | TestThrowOnFailure(hr, "Failed to serialize variables."); |
@@ -616,6 +618,7 @@ namespace Bootstrapper | |||
616 | this->ValidateVariableKey(L"MyBurnVariable1", gcnew String(L"42")); | 618 | this->ValidateVariableKey(L"MyBurnVariable1", gcnew String(L"42")); |
617 | this->ValidateVariableKey(L"MyBurnVariable2", gcnew String(L"bar")); | 619 | this->ValidateVariableKey(L"MyBurnVariable2", gcnew String(L"bar")); |
618 | this->ValidateVariableKey(L"MyBurnVariable3", gcnew String(L"1.0-beta")); | 620 | this->ValidateVariableKey(L"MyBurnVariable3", gcnew String(L"1.0-beta")); |
621 | this->ValidateVariableKey(L"MyBurnVariable5", gcnew String(L"vvv")); | ||
619 | this->ValidateVariableKeyEmpty(L"WixBundleForcedRestartPackage"); | 622 | this->ValidateVariableKeyEmpty(L"WixBundleForcedRestartPackage"); |
620 | 623 | ||
621 | hr = StrAlloc(&sczRelatedBundleId, MAX_GUID_CHARS + 1); | 624 | hr = StrAlloc(&sczRelatedBundleId, MAX_GUID_CHARS + 1); |
diff --git a/src/libs/dutil/WixToolset.DUtil/inc/verutil.h b/src/libs/dutil/WixToolset.DUtil/inc/verutil.h index 5247bb61..4fdaa522 100644 --- a/src/libs/dutil/WixToolset.DUtil/inc/verutil.h +++ b/src/libs/dutil/WixToolset.DUtil/inc/verutil.h | |||
@@ -19,6 +19,7 @@ typedef struct _VERUTIL_VERSION_RELEASE_LABEL | |||
19 | typedef struct _VERUTIL_VERSION | 19 | typedef struct _VERUTIL_VERSION |
20 | { | 20 | { |
21 | LPWSTR sczVersion; | 21 | LPWSTR sczVersion; |
22 | WCHAR chPrefix; | ||
22 | DWORD dwMajor; | 23 | DWORD dwMajor; |
23 | DWORD dwMinor; | 24 | DWORD dwMinor; |
24 | DWORD dwPatch; | 25 | DWORD dwPatch; |
diff --git a/src/libs/dutil/WixToolset.DUtil/verutil.cpp b/src/libs/dutil/WixToolset.DUtil/verutil.cpp index 8881d7bc..30b979b1 100644 --- a/src/libs/dutil/WixToolset.DUtil/verutil.cpp +++ b/src/libs/dutil/WixToolset.DUtil/verutil.cpp | |||
@@ -194,6 +194,7 @@ DAPI_(HRESULT) VerCopyVersion( | |||
194 | hr = StrAllocString(&pCopy->sczVersion, pSource->sczVersion, 0); | 194 | hr = StrAllocString(&pCopy->sczVersion, pSource->sczVersion, 0); |
195 | VerExitOnFailure(hr, "Failed to copy Verutil version string '%ls'.", pSource->sczVersion); | 195 | VerExitOnFailure(hr, "Failed to copy Verutil version string '%ls'.", pSource->sczVersion); |
196 | 196 | ||
197 | pCopy->chPrefix = pSource->chPrefix; | ||
197 | pCopy->dwMajor = pSource->dwMajor; | 198 | pCopy->dwMajor = pSource->dwMajor; |
198 | pCopy->dwMinor = pSource->dwMinor; | 199 | pCopy->dwMinor = pSource->dwMinor; |
199 | pCopy->dwPatch = pSource->dwPatch; | 200 | pCopy->dwPatch = pSource->dwPatch; |
@@ -251,6 +252,7 @@ DAPI_(HRESULT) VerParseVersion( | |||
251 | { | 252 | { |
252 | HRESULT hr = S_OK; | 253 | HRESULT hr = S_OK; |
253 | VERUTIL_VERSION* pVersion = NULL; | 254 | VERUTIL_VERSION* pVersion = NULL; |
255 | LPCWSTR wzString = NULL; | ||
254 | LPCWSTR wzEnd = NULL; | 256 | LPCWSTR wzEnd = NULL; |
255 | LPCWSTR wzPartBegin = NULL; | 257 | LPCWSTR wzPartBegin = NULL; |
256 | LPCWSTR wzPartEnd = NULL; | 258 | LPCWSTR wzPartEnd = NULL; |
@@ -277,22 +279,22 @@ DAPI_(HRESULT) VerParseVersion( | |||
277 | VerExitOnRootFailure(hr = E_INVALIDARG, "Version string is too long: %Iu", cchVersion); | 279 | VerExitOnRootFailure(hr = E_INVALIDARG, "Version string is too long: %Iu", cchVersion); |
278 | } | 280 | } |
279 | 281 | ||
280 | if (L'v' == *wzVersion || L'V' == *wzVersion) | ||
281 | { | ||
282 | ++wzVersion; | ||
283 | --cchVersion; | ||
284 | } | ||
285 | |||
286 | pVersion = reinterpret_cast<VERUTIL_VERSION*>(MemAlloc(sizeof(VERUTIL_VERSION), TRUE)); | 282 | pVersion = reinterpret_cast<VERUTIL_VERSION*>(MemAlloc(sizeof(VERUTIL_VERSION), TRUE)); |
287 | VerExitOnNull(pVersion, hr, E_OUTOFMEMORY, "Failed to allocate memory for Verutil version '%ls'.", wzVersion); | 283 | VerExitOnNull(pVersion, hr, E_OUTOFMEMORY, "Failed to allocate memory for Verutil version '%ls'.", wzVersion); |
288 | 284 | ||
289 | hr = StrAllocString(&pVersion->sczVersion, wzVersion, cchVersion); | 285 | wzString = wzVersion; |
290 | VerExitOnFailure(hr, "Failed to copy Verutil version string '%ls'.", wzVersion); | 286 | |
287 | if (L'v' == *wzString || L'V' == *wzString) | ||
288 | { | ||
289 | pVersion->chPrefix = *wzString; | ||
290 | ++wzString; | ||
291 | --cchVersion; | ||
292 | } | ||
291 | 293 | ||
292 | wzVersion = wzPartBegin = wzPartEnd = pVersion->sczVersion; | 294 | wzPartBegin = wzPartEnd = wzString; |
293 | 295 | ||
294 | // Save end pointer. | 296 | // Save end pointer. |
295 | wzEnd = wzVersion + cchVersion; | 297 | wzEnd = wzString + cchVersion; |
296 | 298 | ||
297 | // Parse version number | 299 | // Parse version number |
298 | while (wzPartBegin < wzEnd) | 300 | while (wzPartBegin < wzEnd) |
@@ -473,7 +475,7 @@ DAPI_(HRESULT) VerParseVersion( | |||
473 | pReleaseLabel->dwValue = uLabel; | 475 | pReleaseLabel->dwValue = uLabel; |
474 | } | 476 | } |
475 | 477 | ||
476 | pReleaseLabel->cchLabelOffset = wzPartBegin - pVersion->sczVersion; | 478 | pReleaseLabel->cchLabelOffset = wzPartBegin - wzString; |
477 | pReleaseLabel->cchLabel = cchLabel; | 479 | pReleaseLabel->cchLabel = cchLabel; |
478 | 480 | ||
479 | if (fTrailingDot) | 481 | if (fTrailingDot) |
@@ -507,9 +509,20 @@ DAPI_(HRESULT) VerParseVersion( | |||
507 | ExitFunction1(hr = E_INVALIDARG); | 509 | ExitFunction1(hr = E_INVALIDARG); |
508 | } | 510 | } |
509 | 511 | ||
510 | pVersion->cchMetadataOffset = min(wzPartBegin, wzEnd) - pVersion->sczVersion; | 512 | pVersion->cchMetadataOffset = min(wzPartBegin, wzEnd) - wzString; |
511 | pVersion->fInvalid = fInvalid; | 513 | pVersion->fInvalid = fInvalid; |
512 | 514 | ||
515 | // If the whole string was invalid, then don't clip off the prefix. | ||
516 | if (!pVersion->cchMetadataOffset && pVersion->chPrefix) | ||
517 | { | ||
518 | pVersion->chPrefix = '\0'; | ||
519 | wzString = wzVersion; | ||
520 | ++cchVersion; | ||
521 | } | ||
522 | |||
523 | hr = StrAllocString(&pVersion->sczVersion, wzString, cchVersion); | ||
524 | VerExitOnFailure(hr, "Failed to copy Verutil version string '%ls'.", wzVersion); | ||
525 | |||
513 | *ppVersion = pVersion; | 526 | *ppVersion = pVersion; |
514 | pVersion = NULL; | 527 | pVersion = NULL; |
515 | hr = S_OK; | 528 | hr = S_OK; |
diff --git a/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp b/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp index 8f24ad1a..c20b9887 100644 --- a/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp +++ b/src/libs/dutil/test/DUtilUnitTest/VerUtilTests.cpp | |||
@@ -34,6 +34,7 @@ namespace DutilTests | |||
34 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); | 34 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); |
35 | 35 | ||
36 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 36 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
37 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
37 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); | 38 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); |
38 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); | 39 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); |
39 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); | 40 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); |
@@ -43,6 +44,7 @@ namespace DutilTests | |||
43 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 44 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
44 | 45 | ||
45 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 46 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
47 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
46 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); | 48 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); |
47 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); | 49 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); |
48 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); | 50 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); |
@@ -52,6 +54,7 @@ namespace DutilTests | |||
52 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 54 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
53 | 55 | ||
54 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 56 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
57 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
55 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); | 58 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); |
56 | Assert::Equal<DWORD>(2, pVersion3->dwMinor); | 59 | Assert::Equal<DWORD>(2, pVersion3->dwMinor); |
57 | Assert::Equal<DWORD>(3, pVersion3->dwPatch); | 60 | Assert::Equal<DWORD>(3, pVersion3->dwPatch); |
@@ -89,6 +92,7 @@ namespace DutilTests | |||
89 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); | 92 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); |
90 | 93 | ||
91 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 94 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
95 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
92 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); | 96 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); |
93 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); | 97 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); |
94 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); | 98 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); |
@@ -109,6 +113,7 @@ namespace DutilTests | |||
109 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 113 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
110 | 114 | ||
111 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 115 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
116 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
112 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); | 117 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); |
113 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); | 118 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); |
114 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 119 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -170,6 +175,7 @@ namespace DutilTests | |||
170 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion6); | 175 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion6); |
171 | 176 | ||
172 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 177 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
178 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
173 | Assert::Equal<DWORD>(10, pVersion1->dwMajor); | 179 | Assert::Equal<DWORD>(10, pVersion1->dwMajor); |
174 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); | 180 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); |
175 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); | 181 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); |
@@ -179,6 +185,7 @@ namespace DutilTests | |||
179 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); | 185 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); |
180 | 186 | ||
181 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 187 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
188 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
182 | Assert::Equal<DWORD>(10, pVersion2->dwMajor); | 189 | Assert::Equal<DWORD>(10, pVersion2->dwMajor); |
183 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); | 190 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); |
184 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 191 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -188,6 +195,7 @@ namespace DutilTests | |||
188 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 195 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
189 | 196 | ||
190 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 197 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
198 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
191 | Assert::Equal<DWORD>(0, pVersion3->dwMajor); | 199 | Assert::Equal<DWORD>(0, pVersion3->dwMajor); |
192 | Assert::Equal<DWORD>(0, pVersion3->dwMinor); | 200 | Assert::Equal<DWORD>(0, pVersion3->dwMinor); |
193 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); | 201 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); |
@@ -197,6 +205,7 @@ namespace DutilTests | |||
197 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 205 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
198 | 206 | ||
199 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 207 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
208 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | ||
200 | Assert::Equal<DWORD>(0, pVersion4->dwMajor); | 209 | Assert::Equal<DWORD>(0, pVersion4->dwMajor); |
201 | Assert::Equal<DWORD>(0, pVersion4->dwMinor); | 210 | Assert::Equal<DWORD>(0, pVersion4->dwMinor); |
202 | Assert::Equal<DWORD>(0, pVersion4->dwPatch); | 211 | Assert::Equal<DWORD>(0, pVersion4->dwPatch); |
@@ -206,6 +215,7 @@ namespace DutilTests | |||
206 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); | 215 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); |
207 | 216 | ||
208 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | 217 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); |
218 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | ||
209 | Assert::Equal<DWORD>(10, pVersion5->dwMajor); | 219 | Assert::Equal<DWORD>(10, pVersion5->dwMajor); |
210 | Assert::Equal<DWORD>(0, pVersion5->dwMinor); | 220 | Assert::Equal<DWORD>(0, pVersion5->dwMinor); |
211 | Assert::Equal<DWORD>(0, pVersion5->dwPatch); | 221 | Assert::Equal<DWORD>(0, pVersion5->dwPatch); |
@@ -221,6 +231,7 @@ namespace DutilTests | |||
221 | Assert::Equal<BOOL>(FALSE, pVersion5->fInvalid); | 231 | Assert::Equal<BOOL>(FALSE, pVersion5->fInvalid); |
222 | 232 | ||
223 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); | 233 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); |
234 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); | ||
224 | Assert::Equal<DWORD>(10, pVersion6->dwMajor); | 235 | Assert::Equal<DWORD>(10, pVersion6->dwMajor); |
225 | Assert::Equal<DWORD>(0, pVersion6->dwMinor); | 236 | Assert::Equal<DWORD>(0, pVersion6->dwMinor); |
226 | Assert::Equal<DWORD>(0, pVersion6->dwPatch); | 237 | Assert::Equal<DWORD>(0, pVersion6->dwPatch); |
@@ -273,6 +284,7 @@ namespace DutilTests | |||
273 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); | 284 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); |
274 | 285 | ||
275 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 286 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
287 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
276 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); | 288 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); |
277 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); | 289 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); |
278 | Assert::Equal<DWORD>(1, pVersion1->dwPatch); | 290 | Assert::Equal<DWORD>(1, pVersion1->dwPatch); |
@@ -287,6 +299,7 @@ namespace DutilTests | |||
287 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 299 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
288 | 300 | ||
289 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 301 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
302 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
290 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); | 303 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); |
291 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); | 304 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); |
292 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 305 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -302,6 +315,7 @@ namespace DutilTests | |||
302 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 315 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
303 | 316 | ||
304 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 317 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
318 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
305 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); | 319 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); |
306 | Assert::Equal<DWORD>(0, pVersion3->dwMinor); | 320 | Assert::Equal<DWORD>(0, pVersion3->dwMinor); |
307 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); | 321 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); |
@@ -355,6 +369,7 @@ namespace DutilTests | |||
355 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion4); | 369 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion4); |
356 | 370 | ||
357 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 371 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
372 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
358 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); | 373 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); |
359 | Assert::Equal<DWORD>(1, pVersion1->dwMinor); | 374 | Assert::Equal<DWORD>(1, pVersion1->dwMinor); |
360 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); | 375 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); |
@@ -374,6 +389,7 @@ namespace DutilTests | |||
374 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 389 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
375 | 390 | ||
376 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 391 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
392 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
377 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); | 393 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); |
378 | Assert::Equal<DWORD>(1, pVersion2->dwMinor); | 394 | Assert::Equal<DWORD>(1, pVersion2->dwMinor); |
379 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 395 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -393,6 +409,7 @@ namespace DutilTests | |||
393 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 409 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
394 | 410 | ||
395 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 411 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
412 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
396 | Assert::Equal<DWORD>(0, pVersion3->dwMajor); | 413 | Assert::Equal<DWORD>(0, pVersion3->dwMajor); |
397 | Assert::Equal<DWORD>(1, pVersion3->dwMinor); | 414 | Assert::Equal<DWORD>(1, pVersion3->dwMinor); |
398 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); | 415 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); |
@@ -416,6 +433,7 @@ namespace DutilTests | |||
416 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 433 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
417 | 434 | ||
418 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 435 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
436 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | ||
419 | Assert::Equal<DWORD>(0, pVersion4->dwMajor); | 437 | Assert::Equal<DWORD>(0, pVersion4->dwMajor); |
420 | Assert::Equal<DWORD>(1, pVersion4->dwMinor); | 438 | Assert::Equal<DWORD>(1, pVersion4->dwMinor); |
421 | Assert::Equal<DWORD>(0, pVersion4->dwPatch); | 439 | Assert::Equal<DWORD>(0, pVersion4->dwPatch); |
@@ -473,6 +491,7 @@ namespace DutilTests | |||
473 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); | 491 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); |
474 | 492 | ||
475 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 493 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
494 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
476 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); | 495 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); |
477 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); | 496 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); |
478 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); | 497 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); |
@@ -482,6 +501,7 @@ namespace DutilTests | |||
482 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 501 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
483 | 502 | ||
484 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 503 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
504 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
485 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); | 505 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); |
486 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); | 506 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); |
487 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); | 507 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); |
@@ -491,6 +511,7 @@ namespace DutilTests | |||
491 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 511 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
492 | 512 | ||
493 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 513 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
514 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
494 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); | 515 | Assert::Equal<DWORD>(1, pVersion3->dwMajor); |
495 | Assert::Equal<DWORD>(2, pVersion3->dwMinor); | 516 | Assert::Equal<DWORD>(2, pVersion3->dwMinor); |
496 | Assert::Equal<DWORD>(3, pVersion3->dwPatch); | 517 | Assert::Equal<DWORD>(3, pVersion3->dwPatch); |
@@ -518,9 +539,13 @@ namespace DutilTests | |||
518 | VERUTIL_VERSION* pVersion1 = NULL; | 539 | VERUTIL_VERSION* pVersion1 = NULL; |
519 | VERUTIL_VERSION* pVersion2 = NULL; | 540 | VERUTIL_VERSION* pVersion2 = NULL; |
520 | VERUTIL_VERSION* pVersion3 = NULL; | 541 | VERUTIL_VERSION* pVersion3 = NULL; |
542 | VERUTIL_VERSION* pVersion4 = NULL; | ||
543 | VERUTIL_VERSION* pVersion5 = NULL; | ||
521 | LPCWSTR wzVersion1 = L"10.20.30.40"; | 544 | LPCWSTR wzVersion1 = L"10.20.30.40"; |
522 | LPCWSTR wzVersion2 = L"v10.20.30.40"; | 545 | LPCWSTR wzVersion2 = L"v10.20.30.40"; |
523 | LPCWSTR wzVersion3 = L"V10.20.30.40"; | 546 | LPCWSTR wzVersion3 = L"V10.20.30.40"; |
547 | LPCWSTR wzVersion4 = L"v10.20.30.40-abc"; | ||
548 | LPCWSTR wzVersion5 = L"vvv"; | ||
524 | 549 | ||
525 | try | 550 | try |
526 | { | 551 | { |
@@ -533,7 +558,14 @@ namespace DutilTests | |||
533 | hr = VerParseVersion(wzVersion3, 0, FALSE, &pVersion3); | 558 | hr = VerParseVersion(wzVersion3, 0, FALSE, &pVersion3); |
534 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); | 559 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion3); |
535 | 560 | ||
561 | hr = VerParseVersion(wzVersion4, 0, FALSE, &pVersion4); | ||
562 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion4); | ||
563 | |||
564 | hr = VerParseVersion(wzVersion5, 0, FALSE, &pVersion5); | ||
565 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion5); | ||
566 | |||
536 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 567 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
568 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
537 | Assert::Equal<DWORD>(10, pVersion1->dwMajor); | 569 | Assert::Equal<DWORD>(10, pVersion1->dwMajor); |
538 | Assert::Equal<DWORD>(20, pVersion1->dwMinor); | 570 | Assert::Equal<DWORD>(20, pVersion1->dwMinor); |
539 | Assert::Equal<DWORD>(30, pVersion1->dwPatch); | 571 | Assert::Equal<DWORD>(30, pVersion1->dwPatch); |
@@ -543,6 +575,7 @@ namespace DutilTests | |||
543 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 575 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
544 | 576 | ||
545 | NativeAssert::StringEqual(wzVersion1, pVersion2->sczVersion); | 577 | NativeAssert::StringEqual(wzVersion1, pVersion2->sczVersion); |
578 | Assert::Equal<WCHAR>(L'v', pVersion2->chPrefix); | ||
546 | Assert::Equal<DWORD>(10, pVersion2->dwMajor); | 579 | Assert::Equal<DWORD>(10, pVersion2->dwMajor); |
547 | Assert::Equal<DWORD>(20, pVersion2->dwMinor); | 580 | Assert::Equal<DWORD>(20, pVersion2->dwMinor); |
548 | Assert::Equal<DWORD>(30, pVersion2->dwPatch); | 581 | Assert::Equal<DWORD>(30, pVersion2->dwPatch); |
@@ -552,6 +585,7 @@ namespace DutilTests | |||
552 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); | 585 | Assert::Equal<BOOL>(FALSE, pVersion2->fInvalid); |
553 | 586 | ||
554 | NativeAssert::StringEqual(wzVersion1, pVersion3->sczVersion); | 587 | NativeAssert::StringEqual(wzVersion1, pVersion3->sczVersion); |
588 | Assert::Equal<WCHAR>(L'V', pVersion3->chPrefix); | ||
555 | Assert::Equal<DWORD>(10, pVersion3->dwMajor); | 589 | Assert::Equal<DWORD>(10, pVersion3->dwMajor); |
556 | Assert::Equal<DWORD>(20, pVersion3->dwMinor); | 590 | Assert::Equal<DWORD>(20, pVersion3->dwMinor); |
557 | Assert::Equal<DWORD>(30, pVersion3->dwPatch); | 591 | Assert::Equal<DWORD>(30, pVersion3->dwPatch); |
@@ -560,14 +594,42 @@ namespace DutilTests | |||
560 | Assert::Equal<DWORD>(11, pVersion3->cchMetadataOffset); | 594 | Assert::Equal<DWORD>(11, pVersion3->cchMetadataOffset); |
561 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); | 595 | Assert::Equal<BOOL>(FALSE, pVersion3->fInvalid); |
562 | 596 | ||
597 | NativeAssert::StringEqual(L"10.20.30.40-abc", pVersion4->sczVersion); | ||
598 | Assert::Equal<WCHAR>(L'v', pVersion4->chPrefix); | ||
599 | Assert::Equal<DWORD>(10, pVersion4->dwMajor); | ||
600 | Assert::Equal<DWORD>(20, pVersion4->dwMinor); | ||
601 | Assert::Equal<DWORD>(30, pVersion4->dwPatch); | ||
602 | Assert::Equal<DWORD>(40, pVersion4->dwRevision); | ||
603 | Assert::Equal<DWORD>(1, pVersion4->cReleaseLabels); | ||
604 | |||
605 | Assert::Equal<BOOL>(FALSE, pVersion4->rgReleaseLabels[0].fNumeric); | ||
606 | Assert::Equal<DWORD>(3, pVersion4->rgReleaseLabels[0].cchLabel); | ||
607 | Assert::Equal<DWORD>(12, pVersion4->rgReleaseLabels[0].cchLabelOffset); | ||
608 | |||
609 | Assert::Equal<DWORD>(15, pVersion4->cchMetadataOffset); | ||
610 | Assert::Equal<BOOL>(FALSE, pVersion4->fInvalid); | ||
611 | |||
612 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | ||
613 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | ||
614 | Assert::Equal<DWORD>(0, pVersion5->dwMajor); | ||
615 | Assert::Equal<DWORD>(0, pVersion5->dwMinor); | ||
616 | Assert::Equal<DWORD>(0, pVersion5->dwPatch); | ||
617 | Assert::Equal<DWORD>(0, pVersion5->dwRevision); | ||
618 | Assert::Equal<DWORD>(0, pVersion5->cReleaseLabels); | ||
619 | Assert::Equal<DWORD>(0, pVersion5->cchMetadataOffset); | ||
620 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); | ||
621 | |||
563 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); | 622 | TestVerutilCompareParsedVersions(pVersion1, pVersion2, 0); |
564 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 0); | 623 | TestVerutilCompareParsedVersions(pVersion1, pVersion3, 0); |
624 | TestVerutilCompareParsedVersions(pVersion1, pVersion4, 1); | ||
565 | } | 625 | } |
566 | finally | 626 | finally |
567 | { | 627 | { |
568 | ReleaseVerutilVersion(pVersion1); | 628 | ReleaseVerutilVersion(pVersion1); |
569 | ReleaseVerutilVersion(pVersion2); | 629 | ReleaseVerutilVersion(pVersion2); |
570 | ReleaseVerutilVersion(pVersion3); | 630 | ReleaseVerutilVersion(pVersion3); |
631 | ReleaseVerutilVersion(pVersion4); | ||
632 | ReleaseVerutilVersion(pVersion5); | ||
571 | } | 633 | } |
572 | } | 634 | } |
573 | 635 | ||
@@ -589,6 +651,7 @@ namespace DutilTests | |||
589 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); | 651 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); |
590 | 652 | ||
591 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 653 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
654 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
592 | Assert::Equal<DWORD>(4294967295, pVersion1->dwMajor); | 655 | Assert::Equal<DWORD>(4294967295, pVersion1->dwMajor); |
593 | Assert::Equal<DWORD>(4294967295, pVersion1->dwMinor); | 656 | Assert::Equal<DWORD>(4294967295, pVersion1->dwMinor); |
594 | Assert::Equal<DWORD>(4294967295, pVersion1->dwPatch); | 657 | Assert::Equal<DWORD>(4294967295, pVersion1->dwPatch); |
@@ -598,6 +661,7 @@ namespace DutilTests | |||
598 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 661 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
599 | 662 | ||
600 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 663 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
664 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
601 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); | 665 | Assert::Equal<DWORD>(0, pVersion2->dwMajor); |
602 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); | 666 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); |
603 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 667 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -633,6 +697,7 @@ namespace DutilTests | |||
633 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); | 697 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion2); |
634 | 698 | ||
635 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 699 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
700 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
636 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); | 701 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); |
637 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); | 702 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); |
638 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); | 703 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); |
@@ -642,6 +707,7 @@ namespace DutilTests | |||
642 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); | 707 | Assert::Equal<BOOL>(FALSE, pVersion1->fInvalid); |
643 | 708 | ||
644 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 709 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
710 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
645 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); | 711 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); |
646 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); | 712 | Assert::Equal<DWORD>(2, pVersion2->dwMinor); |
647 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); | 713 | Assert::Equal<DWORD>(3, pVersion2->dwPatch); |
@@ -674,6 +740,7 @@ namespace DutilTests | |||
674 | NativeAssert::Succeeded(hr, "VerParseVersion failed"); | 740 | NativeAssert::Succeeded(hr, "VerParseVersion failed"); |
675 | 741 | ||
676 | NativeAssert::StringEqual(wzVersion, pSource->sczVersion); | 742 | NativeAssert::StringEqual(wzVersion, pSource->sczVersion); |
743 | Assert::Equal<WCHAR>(L'\0', pSource->chPrefix); | ||
677 | Assert::Equal<DWORD>(1, pSource->dwMajor); | 744 | Assert::Equal<DWORD>(1, pSource->dwMajor); |
678 | Assert::Equal<DWORD>(2, pSource->dwMinor); | 745 | Assert::Equal<DWORD>(2, pSource->dwMinor); |
679 | Assert::Equal<DWORD>(3, pSource->dwPatch); | 746 | Assert::Equal<DWORD>(3, pSource->dwPatch); |
@@ -688,6 +755,7 @@ namespace DutilTests | |||
688 | 755 | ||
689 | Assert::False(pSource == pCopy); | 756 | Assert::False(pSource == pCopy); |
690 | Assert::False(pSource->sczVersion == pCopy->sczVersion); | 757 | Assert::False(pSource->sczVersion == pCopy->sczVersion); |
758 | Assert::Equal<WCHAR>(L'\0', pCopy->chPrefix); | ||
691 | 759 | ||
692 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); | 760 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); |
693 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); | 761 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); |
@@ -705,7 +773,7 @@ namespace DutilTests | |||
705 | void VerCopyVersionCopiesPrereleaseVersion() | 773 | void VerCopyVersionCopiesPrereleaseVersion() |
706 | { | 774 | { |
707 | HRESULT hr = S_OK; | 775 | HRESULT hr = S_OK; |
708 | LPCWSTR wzVersion = L"1.2.3.4-a.b.c.d.5.+abc123"; | 776 | LPCWSTR wzVersion = L"v1.2.3.4-a.b.c.d.5.+abc123"; |
709 | VERUTIL_VERSION* pSource = NULL; | 777 | VERUTIL_VERSION* pSource = NULL; |
710 | VERUTIL_VERSION* pCopy = NULL; | 778 | VERUTIL_VERSION* pCopy = NULL; |
711 | int nResult = 0; | 779 | int nResult = 0; |
@@ -715,7 +783,8 @@ namespace DutilTests | |||
715 | hr = VerParseVersion(wzVersion, 0, FALSE, &pSource); | 783 | hr = VerParseVersion(wzVersion, 0, FALSE, &pSource); |
716 | NativeAssert::Succeeded(hr, "VerParseVersion failed"); | 784 | NativeAssert::Succeeded(hr, "VerParseVersion failed"); |
717 | 785 | ||
718 | NativeAssert::StringEqual(wzVersion, pSource->sczVersion); | 786 | NativeAssert::StringEqual(L"1.2.3.4-a.b.c.d.5.+abc123", pSource->sczVersion); |
787 | Assert::Equal<WCHAR>(L'v', pSource->chPrefix); | ||
719 | Assert::Equal<DWORD>(1, pSource->dwMajor); | 788 | Assert::Equal<DWORD>(1, pSource->dwMajor); |
720 | Assert::Equal<DWORD>(2, pSource->dwMinor); | 789 | Assert::Equal<DWORD>(2, pSource->dwMinor); |
721 | Assert::Equal<DWORD>(3, pSource->dwPatch); | 790 | Assert::Equal<DWORD>(3, pSource->dwPatch); |
@@ -752,6 +821,7 @@ namespace DutilTests | |||
752 | Assert::False(pSource == pCopy); | 821 | Assert::False(pSource == pCopy); |
753 | Assert::False(pSource->sczVersion == pCopy->sczVersion); | 822 | Assert::False(pSource->sczVersion == pCopy->sczVersion); |
754 | Assert::False(pSource->rgReleaseLabels == pCopy->rgReleaseLabels); | 823 | Assert::False(pSource->rgReleaseLabels == pCopy->rgReleaseLabels); |
824 | Assert::Equal<WCHAR>(L'v', pCopy->chPrefix); | ||
755 | 825 | ||
756 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); | 826 | hr = VerCompareParsedVersions(pSource, pCopy, &nResult); |
757 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); | 827 | NativeAssert::Succeeded(hr, "VerCompareParsedVersions failed"); |
@@ -808,6 +878,7 @@ namespace DutilTests | |||
808 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion7); | 878 | NativeAssert::Succeeded(hr, "Failed to parse version '{0}'", wzVersion7); |
809 | 879 | ||
810 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); | 880 | NativeAssert::StringEqual(wzVersion1, pVersion1->sczVersion); |
881 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
811 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); | 882 | Assert::Equal<DWORD>(0, pVersion1->dwMajor); |
812 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); | 883 | Assert::Equal<DWORD>(0, pVersion1->dwMinor); |
813 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); | 884 | Assert::Equal<DWORD>(0, pVersion1->dwPatch); |
@@ -817,6 +888,7 @@ namespace DutilTests | |||
817 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); | 888 | Assert::Equal<BOOL>(TRUE, pVersion1->fInvalid); |
818 | 889 | ||
819 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); | 890 | NativeAssert::StringEqual(wzVersion2, pVersion2->sczVersion); |
891 | Assert::Equal<WCHAR>(L'\0', pVersion2->chPrefix); | ||
820 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); | 892 | Assert::Equal<DWORD>(1, pVersion2->dwMajor); |
821 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); | 893 | Assert::Equal<DWORD>(0, pVersion2->dwMinor); |
822 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); | 894 | Assert::Equal<DWORD>(0, pVersion2->dwPatch); |
@@ -826,6 +898,7 @@ namespace DutilTests | |||
826 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); | 898 | Assert::Equal<BOOL>(TRUE, pVersion2->fInvalid); |
827 | 899 | ||
828 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); | 900 | NativeAssert::StringEqual(wzVersion3, pVersion3->sczVersion); |
901 | Assert::Equal<WCHAR>(L'\0', pVersion3->chPrefix); | ||
829 | Assert::Equal<DWORD>(2, pVersion3->dwMajor); | 902 | Assert::Equal<DWORD>(2, pVersion3->dwMajor); |
830 | Assert::Equal<DWORD>(1, pVersion3->dwMinor); | 903 | Assert::Equal<DWORD>(1, pVersion3->dwMinor); |
831 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); | 904 | Assert::Equal<DWORD>(0, pVersion3->dwPatch); |
@@ -835,6 +908,7 @@ namespace DutilTests | |||
835 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); | 908 | Assert::Equal<BOOL>(TRUE, pVersion3->fInvalid); |
836 | 909 | ||
837 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); | 910 | NativeAssert::StringEqual(wzVersion4, pVersion4->sczVersion); |
911 | Assert::Equal<WCHAR>(L'\0', pVersion4->chPrefix); | ||
838 | Assert::Equal<DWORD>(3, pVersion4->dwMajor); | 912 | Assert::Equal<DWORD>(3, pVersion4->dwMajor); |
839 | Assert::Equal<DWORD>(2, pVersion4->dwMinor); | 913 | Assert::Equal<DWORD>(2, pVersion4->dwMinor); |
840 | Assert::Equal<DWORD>(1, pVersion4->dwPatch); | 914 | Assert::Equal<DWORD>(1, pVersion4->dwPatch); |
@@ -844,6 +918,7 @@ namespace DutilTests | |||
844 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); | 918 | Assert::Equal<BOOL>(TRUE, pVersion4->fInvalid); |
845 | 919 | ||
846 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); | 920 | NativeAssert::StringEqual(wzVersion5, pVersion5->sczVersion); |
921 | Assert::Equal<WCHAR>(L'\0', pVersion5->chPrefix); | ||
847 | Assert::Equal<DWORD>(4, pVersion5->dwMajor); | 922 | Assert::Equal<DWORD>(4, pVersion5->dwMajor); |
848 | Assert::Equal<DWORD>(3, pVersion5->dwMinor); | 923 | Assert::Equal<DWORD>(3, pVersion5->dwMinor); |
849 | Assert::Equal<DWORD>(2, pVersion5->dwPatch); | 924 | Assert::Equal<DWORD>(2, pVersion5->dwPatch); |
@@ -853,6 +928,7 @@ namespace DutilTests | |||
853 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); | 928 | Assert::Equal<BOOL>(TRUE, pVersion5->fInvalid); |
854 | 929 | ||
855 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); | 930 | NativeAssert::StringEqual(wzVersion6, pVersion6->sczVersion); |
931 | Assert::Equal<WCHAR>(L'\0', pVersion6->chPrefix); | ||
856 | Assert::Equal<DWORD>(5, pVersion6->dwMajor); | 932 | Assert::Equal<DWORD>(5, pVersion6->dwMajor); |
857 | Assert::Equal<DWORD>(0, pVersion6->dwMinor); | 933 | Assert::Equal<DWORD>(0, pVersion6->dwMinor); |
858 | Assert::Equal<DWORD>(0, pVersion6->dwPatch); | 934 | Assert::Equal<DWORD>(0, pVersion6->dwPatch); |
@@ -862,6 +938,7 @@ namespace DutilTests | |||
862 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); | 938 | Assert::Equal<BOOL>(TRUE, pVersion6->fInvalid); |
863 | 939 | ||
864 | NativeAssert::StringEqual(wzVersion7, pVersion7->sczVersion); | 940 | NativeAssert::StringEqual(wzVersion7, pVersion7->sczVersion); |
941 | Assert::Equal<WCHAR>(L'\0', pVersion7->chPrefix); | ||
865 | Assert::Equal<DWORD>(6, pVersion7->dwMajor); | 942 | Assert::Equal<DWORD>(6, pVersion7->dwMajor); |
866 | Assert::Equal<DWORD>(0, pVersion7->dwMinor); | 943 | Assert::Equal<DWORD>(0, pVersion7->dwMinor); |
867 | Assert::Equal<DWORD>(0, pVersion7->dwPatch); | 944 | Assert::Equal<DWORD>(0, pVersion7->dwPatch); |
@@ -899,6 +976,7 @@ namespace DutilTests | |||
899 | NativeAssert::Succeeded(hr, "VerVersionFromQword failed"); | 976 | NativeAssert::Succeeded(hr, "VerVersionFromQword failed"); |
900 | 977 | ||
901 | NativeAssert::StringEqual(L"1.2.3.4", pVersion1->sczVersion); | 978 | NativeAssert::StringEqual(L"1.2.3.4", pVersion1->sczVersion); |
979 | Assert::Equal<WCHAR>(L'\0', pVersion1->chPrefix); | ||
902 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); | 980 | Assert::Equal<DWORD>(1, pVersion1->dwMajor); |
903 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); | 981 | Assert::Equal<DWORD>(2, pVersion1->dwMinor); |
904 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); | 982 | Assert::Equal<DWORD>(3, pVersion1->dwPatch); |