diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-07-17 21:28:38 +1000 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-07-17 21:52:36 +1000 |
| commit | e845e7c68ae792ab2ccd4ca2f054700dde624375 (patch) | |
| tree | 27aa4807d2e397bc977a6fcf8231f7a5fe569084 | |
| parent | ed36894d8b4da2f28972811f39d5e3685964e413 (diff) | |
| download | wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.gz wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.tar.bz2 wix-e845e7c68ae792ab2ccd4ca2f054700dde624375.zip | |
Add VariantTest.
| -rw-r--r-- | src/test/BurnUnitTest/BurnTestFixture.h | 4 | ||||
| -rw-r--r-- | src/test/BurnUnitTest/BurnUnitTest.vcxproj | 1 | ||||
| -rw-r--r-- | src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters | 11 | ||||
| -rw-r--r-- | src/test/BurnUnitTest/VariantTest.cpp | 197 |
4 files changed, 209 insertions, 4 deletions
diff --git a/src/test/BurnUnitTest/BurnTestFixture.h b/src/test/BurnUnitTest/BurnTestFixture.h index f158c192..6b041641 100644 --- a/src/test/BurnUnitTest/BurnTestFixture.h +++ b/src/test/BurnUnitTest/BurnTestFixture.h | |||
| @@ -26,6 +26,9 @@ namespace Bootstrapper | |||
| 26 | hr = RegInitialize(); | 26 | hr = RegInitialize(); |
| 27 | TestThrowOnFailure(hr, L"Failed to initialize Regutil."); | 27 | TestThrowOnFailure(hr, L"Failed to initialize Regutil."); |
| 28 | 28 | ||
| 29 | hr = CrypInitialize(); | ||
| 30 | TestThrowOnFailure(hr, L"Failed to initialize Cryputil."); | ||
| 31 | |||
| 29 | PlatformInitialize(); | 32 | PlatformInitialize(); |
| 30 | 33 | ||
| 31 | this->testDirectory = WixBuildTools::TestSupport::TestData::Get(); | 34 | this->testDirectory = WixBuildTools::TestSupport::TestData::Get(); |
| @@ -38,6 +41,7 @@ namespace Bootstrapper | |||
| 38 | 41 | ||
| 39 | ~BurnTestFixture() | 42 | ~BurnTestFixture() |
| 40 | { | 43 | { |
| 44 | CrypUninitialize(); | ||
| 41 | XmlUninitialize(); | 45 | XmlUninitialize(); |
| 42 | RegUninitialize(); | 46 | RegUninitialize(); |
| 43 | LogUninitialize(FALSE); | 47 | LogUninitialize(FALSE); |
diff --git a/src/test/BurnUnitTest/BurnUnitTest.vcxproj b/src/test/BurnUnitTest/BurnUnitTest.vcxproj index 93b3e562..3f3c7b4f 100644 --- a/src/test/BurnUnitTest/BurnUnitTest.vcxproj +++ b/src/test/BurnUnitTest/BurnUnitTest.vcxproj | |||
| @@ -46,6 +46,7 @@ | |||
| 46 | <ClCompile Include="SearchTest.cpp" /> | 46 | <ClCompile Include="SearchTest.cpp" /> |
| 47 | <ClCompile Include="VariableHelpers.cpp" /> | 47 | <ClCompile Include="VariableHelpers.cpp" /> |
| 48 | <ClCompile Include="VariableTest.cpp" /> | 48 | <ClCompile Include="VariableTest.cpp" /> |
| 49 | <ClCompile Include="VariantTest.cpp" /> | ||
| 49 | </ItemGroup> | 50 | </ItemGroup> |
| 50 | <ItemGroup> | 51 | <ItemGroup> |
| 51 | <ClInclude Include="BurnTestException.h" /> | 52 | <ClInclude Include="BurnTestException.h" /> |
diff --git a/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters b/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters index bee5d15e..14261ba0 100644 --- a/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters +++ b/src/test/BurnUnitTest/BurnUnitTest.vcxproj.filters | |||
| @@ -18,6 +18,9 @@ | |||
| 18 | <ClCompile Include="AssemblyInfo.cpp"> | 18 | <ClCompile Include="AssemblyInfo.cpp"> |
| 19 | <Filter>Source Files</Filter> | 19 | <Filter>Source Files</Filter> |
| 20 | </ClCompile> | 20 | </ClCompile> |
| 21 | <ClCompile Include="CacheTest.cpp"> | ||
| 22 | <Filter>Source Files</Filter> | ||
| 23 | </ClCompile> | ||
| 21 | <ClCompile Include="ElevationTest.cpp"> | 24 | <ClCompile Include="ElevationTest.cpp"> |
| 22 | <Filter>Source Files</Filter> | 25 | <Filter>Source Files</Filter> |
| 23 | </ClCompile> | 26 | </ClCompile> |
| @@ -27,6 +30,9 @@ | |||
| 27 | <ClCompile Include="ManifestTest.cpp"> | 30 | <ClCompile Include="ManifestTest.cpp"> |
| 28 | <Filter>Source Files</Filter> | 31 | <Filter>Source Files</Filter> |
| 29 | </ClCompile> | 32 | </ClCompile> |
| 33 | <ClCompile Include="precomp.cpp"> | ||
| 34 | <Filter>Source Files</Filter> | ||
| 35 | </ClCompile> | ||
| 30 | <ClCompile Include="RegistrationTest.cpp"> | 36 | <ClCompile Include="RegistrationTest.cpp"> |
| 31 | <Filter>Source Files</Filter> | 37 | <Filter>Source Files</Filter> |
| 32 | </ClCompile> | 38 | </ClCompile> |
| @@ -39,10 +45,7 @@ | |||
| 39 | <ClCompile Include="VariableTest.cpp"> | 45 | <ClCompile Include="VariableTest.cpp"> |
| 40 | <Filter>Source Files</Filter> | 46 | <Filter>Source Files</Filter> |
| 41 | </ClCompile> | 47 | </ClCompile> |
| 42 | <ClCompile Include="CacheTest.cpp"> | 48 | <ClCompile Include="VariantTest.cpp"> |
| 43 | <Filter>Source Files</Filter> | ||
| 44 | </ClCompile> | ||
| 45 | <ClCompile Include="$(WixRoot)src\common\precomp.cpp"> | ||
| 46 | <Filter>Source Files</Filter> | 49 | <Filter>Source Files</Filter> |
| 47 | </ClCompile> | 50 | </ClCompile> |
| 48 | </ItemGroup> | 51 | </ItemGroup> |
diff --git a/src/test/BurnUnitTest/VariantTest.cpp b/src/test/BurnUnitTest/VariantTest.cpp new file mode 100644 index 00000000..dd679f08 --- /dev/null +++ b/src/test/BurnUnitTest/VariantTest.cpp | |||
| @@ -0,0 +1,197 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | #include "precomp.h" | ||
| 4 | |||
| 5 | namespace Microsoft | ||
| 6 | { | ||
| 7 | namespace Tools | ||
| 8 | { | ||
| 9 | namespace WindowsInstallerXml | ||
| 10 | { | ||
| 11 | namespace Test | ||
| 12 | { | ||
| 13 | namespace Bootstrapper | ||
| 14 | { | ||
| 15 | using namespace System; | ||
| 16 | using namespace Xunit; | ||
| 17 | |||
| 18 | public ref class VariantTest : BurnUnitTest | ||
| 19 | { | ||
| 20 | public: | ||
| 21 | VariantTest(BurnTestFixture^ fixture) : BurnUnitTest(fixture) | ||
| 22 | { | ||
| 23 | } | ||
| 24 | |||
| 25 | [Fact] | ||
| 26 | void VariantBasicTest() | ||
| 27 | { | ||
| 28 | BURN_VARIANT expectedVariants[8]; | ||
| 29 | BURN_VARIANT actualVariants[8]; | ||
| 30 | for (DWORD i = 0; i < 8; i++) | ||
| 31 | { | ||
| 32 | BVariantUninitialize(expectedVariants + i); | ||
| 33 | BVariantUninitialize(actualVariants + i); | ||
| 34 | } | ||
| 35 | |||
| 36 | try | ||
| 37 | { | ||
| 38 | InitNumericValue(expectedVariants + 0, 2, FALSE, L"PROP1", actualVariants + 0); | ||
| 39 | InitStringValue(expectedVariants + 1, L"VAL2", FALSE, L"PROP2", actualVariants + 1); | ||
| 40 | InitVersionValue(expectedVariants + 2, MAKEQWORDVERSION(1, 1, 0, 0), FALSE, L"PROP3", actualVariants + 2); | ||
| 41 | InitNoneValue(expectedVariants + 3, FALSE, L"PROP4", actualVariants + 3); | ||
| 42 | InitNoneValue(expectedVariants + 4, TRUE, L"PROP5", actualVariants + 4); | ||
| 43 | InitVersionValue(expectedVariants + 5, MAKEQWORDVERSION(1, 1, 1, 0), TRUE, L"PROP6", actualVariants + 5); | ||
| 44 | InitStringValue(expectedVariants + 6, L"7", TRUE, L"PROP7", actualVariants + 6); | ||
| 45 | InitNumericValue(expectedVariants + 7, 11, TRUE, L"PROP8", actualVariants + 7); | ||
| 46 | |||
| 47 | VerifyNumericValue(expectedVariants + 0, actualVariants + 0); | ||
| 48 | VerifyStringValue(expectedVariants + 1, actualVariants + 1); | ||
| 49 | VerifyVersionValue(expectedVariants + 2, actualVariants + 2); | ||
| 50 | VerifyNoneValue(expectedVariants + 3, actualVariants + 3); | ||
| 51 | VerifyNoneValue(expectedVariants + 4, actualVariants + 4); | ||
| 52 | VerifyVersionValue(expectedVariants + 5, actualVariants + 5); | ||
| 53 | VerifyStringValue(expectedVariants + 6, actualVariants + 6); | ||
| 54 | VerifyNumericValue(expectedVariants + 7, actualVariants + 7); | ||
| 55 | } | ||
| 56 | finally | ||
| 57 | { | ||
| 58 | for (DWORD i = 0; i < 8; i++) | ||
| 59 | { | ||
| 60 | BVariantUninitialize(expectedVariants + i); | ||
| 61 | BVariantUninitialize(actualVariants + i); | ||
| 62 | } | ||
| 63 | } | ||
| 64 | } | ||
| 65 | |||
| 66 | private: | ||
| 67 | void InitNoneValue(BURN_VARIANT* pValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) | ||
| 68 | { | ||
| 69 | HRESULT hr = S_OK; | ||
| 70 | pValue->Type = BURN_VARIANT_TYPE_NONE; | ||
| 71 | |||
| 72 | hr = BVariantCopy(pValue, pActualValue); | ||
| 73 | NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); | ||
| 74 | |||
| 75 | if (fHidden) | ||
| 76 | { | ||
| 77 | hr = BVariantSetEncryption(pActualValue, TRUE); | ||
| 78 | NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); | ||
| 79 | |||
| 80 | NativeAssert::True(pActualValue->fEncryptValue); | ||
| 81 | } | ||
| 82 | } | ||
| 83 | |||
| 84 | void InitNumericValue(BURN_VARIANT* pValue, LONGLONG llValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) | ||
| 85 | { | ||
| 86 | HRESULT hr = S_OK; | ||
| 87 | pValue->Type = BURN_VARIANT_TYPE_NUMERIC; | ||
| 88 | pValue->llValue = llValue; | ||
| 89 | |||
| 90 | hr = BVariantCopy(pValue, pActualValue); | ||
| 91 | NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); | ||
| 92 | |||
| 93 | if (fHidden) | ||
| 94 | { | ||
| 95 | hr = BVariantSetEncryption(pActualValue, TRUE); | ||
| 96 | NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); | ||
| 97 | |||
| 98 | NativeAssert::True(pActualValue->fEncryptValue); | ||
| 99 | } | ||
| 100 | } | ||
| 101 | |||
| 102 | void InitStringValue(BURN_VARIANT* pValue, LPWSTR wzValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) | ||
| 103 | { | ||
| 104 | HRESULT hr = S_OK; | ||
| 105 | pValue->Type = BURN_VARIANT_TYPE_STRING; | ||
| 106 | |||
| 107 | hr = StrAllocString(&pValue->sczValue, wzValue, 0); | ||
| 108 | NativeAssert::Succeeded(hr, "Failed to alloc string: {0}", wzValue); | ||
| 109 | |||
| 110 | hr = BVariantCopy(pValue, pActualValue); | ||
| 111 | NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); | ||
| 112 | |||
| 113 | if (fHidden) | ||
| 114 | { | ||
| 115 | hr = BVariantSetEncryption(pActualValue, TRUE); | ||
| 116 | NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); | ||
| 117 | |||
| 118 | NativeAssert::True(pActualValue->fEncryptValue); | ||
| 119 | } | ||
| 120 | } | ||
| 121 | |||
| 122 | void InitVersionValue(BURN_VARIANT* pValue, DWORD64 qwValue, BOOL fHidden, LPCWSTR wz, BURN_VARIANT* pActualValue) | ||
| 123 | { | ||
| 124 | HRESULT hr = S_OK; | ||
| 125 | pValue->Type = BURN_VARIANT_TYPE_VERSION; | ||
| 126 | pValue->qwValue = qwValue; | ||
| 127 | |||
| 128 | hr = BVariantCopy(pValue, pActualValue); | ||
| 129 | NativeAssert::Succeeded(hr, "Failed to copy variant {0}", wz); | ||
| 130 | |||
| 131 | if (fHidden) | ||
| 132 | { | ||
| 133 | hr = BVariantSetEncryption(pActualValue, TRUE); | ||
| 134 | NativeAssert::Succeeded(hr, "Failed to encrypt variant {0}", wz); | ||
| 135 | |||
| 136 | NativeAssert::True(pActualValue->fEncryptValue); | ||
| 137 | } | ||
| 138 | } | ||
| 139 | |||
| 140 | void VerifyNumericValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue) | ||
| 141 | { | ||
| 142 | HRESULT hr = S_OK; | ||
| 143 | LONGLONG llValue = 0; | ||
| 144 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pExpectedValue->Type); | ||
| 145 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NUMERIC, pActualValue->Type); | ||
| 146 | |||
| 147 | hr = BVariantGetNumeric(pActualValue, &llValue); | ||
| 148 | NativeAssert::Succeeded(hr, "Failed to get numeric value"); | ||
| 149 | |||
| 150 | NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, llValue); | ||
| 151 | } | ||
| 152 | |||
| 153 | void VerifyNoneValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue) | ||
| 154 | { | ||
| 155 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pExpectedValue->Type); | ||
| 156 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_NONE, pActualValue->Type); | ||
| 157 | NativeAssert::Equal<LONGLONG>(pExpectedValue->llValue, pActualValue->llValue); | ||
| 158 | } | ||
| 159 | |||
| 160 | void VerifyStringValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue) | ||
| 161 | { | ||
| 162 | HRESULT hr = S_OK; | ||
| 163 | LPWSTR sczValue = NULL; | ||
| 164 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pExpectedValue->Type); | ||
| 165 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_STRING, pActualValue->Type); | ||
| 166 | |||
| 167 | try | ||
| 168 | { | ||
| 169 | hr = BVariantGetString(pActualValue, &sczValue); | ||
| 170 | NativeAssert::Succeeded(hr, "Failed to get numeric value"); | ||
| 171 | |||
| 172 | NativeAssert::StringEqual(pExpectedValue->sczValue, sczValue); | ||
| 173 | } | ||
| 174 | finally | ||
| 175 | { | ||
| 176 | ReleaseStr(sczValue); | ||
| 177 | } | ||
| 178 | } | ||
| 179 | |||
| 180 | void VerifyVersionValue(BURN_VARIANT* pExpectedValue, BURN_VARIANT* pActualValue) | ||
| 181 | { | ||
| 182 | HRESULT hr = S_OK; | ||
| 183 | DWORD64 qwValue = 0; | ||
| 184 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pExpectedValue->Type); | ||
| 185 | NativeAssert::Equal<DWORD>(BURN_VARIANT_TYPE_VERSION, pActualValue->Type); | ||
| 186 | |||
| 187 | hr = BVariantGetVersion(pActualValue, &qwValue); | ||
| 188 | NativeAssert::Succeeded(hr, "Failed to get numeric value"); | ||
| 189 | |||
| 190 | NativeAssert::Equal<DWORD64>(pExpectedValue->qwValue, qwValue); | ||
| 191 | } | ||
| 192 | }; | ||
| 193 | } | ||
| 194 | } | ||
| 195 | } | ||
| 196 | } | ||
| 197 | } | ||
