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.
Diffstat (limited to '')
| -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); |
