aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-07-12 17:07:55 +1000
committerSean Hall <r.sean.hall@gmail.com>2020-07-12 17:16:16 +1000
commitdc558da002794cc07013e8376f3c55c73391aa0e (patch)
treefaba96f981f1ea0c6888b387cf43cc78d0bc2927
parentaeddc77fc021f11f68a4c1a093eabf9776866b80 (diff)
downloadwix-dc558da002794cc07013e8376f3c55c73391aa0e.tar.gz
wix-dc558da002794cc07013e8376f3c55c73391aa0e.tar.bz2
wix-dc558da002794cc07013e8376f3c55c73391aa0e.zip
Update Dutil_TraceErrorSource to filter based on the report level.
-rw-r--r--src/dutil/dutil.cpp6
-rw-r--r--src/dutil/inc/dutil.h13
-rw-r--r--src/dutil/inc/dutilsources.h10
-rw-r--r--src/test/DUtilUnitTest/DUtilTests.cpp35
-rw-r--r--src/test/DUtilUnitTest/DUtilUnitTest.vcxproj4
-rw-r--r--src/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters9
-rw-r--r--src/test/DUtilUnitTest/DictUtilTest.cpp4
-rw-r--r--src/test/DUtilUnitTest/FileUtilTest.cpp3
-rw-r--r--src/test/DUtilUnitTest/IniUtilTest.cpp3
-rw-r--r--src/test/DUtilUnitTest/MemUtilTest.cpp16
-rw-r--r--src/test/DUtilUnitTest/StrUtilTest.cpp16
-rw-r--r--src/test/DUtilUnitTest/UriUtilTest.cpp4
-rw-r--r--src/test/DUtilUnitTest/error.cpp26
-rw-r--r--src/test/DUtilUnitTest/error.h16
-rw-r--r--src/test/DUtilUnitTest/precomp.h1
15 files changed, 142 insertions, 24 deletions
diff --git a/src/dutil/dutil.cpp b/src/dutil/dutil.cpp
index a32de516..99ce1bc6 100644
--- a/src/dutil/dutil.cpp
+++ b/src/dutil/dutil.cpp
@@ -408,6 +408,12 @@ DAPIV_(void) Dutil_TraceErrorSource(
408 ... 408 ...
409 ) 409 )
410{ 410{
411 // if this is NOT an error report and we're not logging at this level, bail
412 if (REPORT_ERROR != rl && Dutil_rlCurrentTrace < rl)
413 {
414 return;
415 }
416
411 if (DUTIL_SOURCE_UNKNOWN != source && vpfnTraceErrorCallback) 417 if (DUTIL_SOURCE_UNKNOWN != source && vpfnTraceErrorCallback)
412 { 418 {
413 va_list args; 419 va_list args;
diff --git a/src/dutil/inc/dutil.h b/src/dutil/inc/dutil.h
index 6b57b48a..15d45d21 100644
--- a/src/dutil/inc/dutil.h
+++ b/src/dutil/inc/dutil.h
@@ -10,17 +10,6 @@
10#define DAPIV_(type) EXTERN_C type DAPIV 10#define DAPIV_(type) EXTERN_C type DAPIV
11 11
12 12
13// enums
14typedef enum REPORT_LEVEL
15{
16 REPORT_NONE, // turns off report (only valid for XXXSetLevel())
17 REPORT_WARNING, // written if want only warnings or reporting is on in general
18 REPORT_STANDARD, // written if reporting is on
19 REPORT_VERBOSE, // written only if verbose reporting is on
20 REPORT_DEBUG, // reporting useful when debugging code
21 REPORT_ERROR, // always gets reported, but can never be specified
22} REPORT_LEVEL;
23
24// asserts and traces 13// asserts and traces
25typedef BOOL (DAPI *DUTIL_ASSERTDISPLAYFUNCTION)(__in_z LPCSTR sz); 14typedef BOOL (DAPI *DUTIL_ASSERTDISPLAYFUNCTION)(__in_z LPCSTR sz);
26 15
@@ -29,7 +18,7 @@ typedef void (CALLBACK *DUTIL_CALLBACK_TRACEERROR)(
29 __in int iLine, 18 __in int iLine,
30 __in REPORT_LEVEL rl, 19 __in REPORT_LEVEL rl,
31 __in UINT source, 20 __in UINT source,
32 __in HRESULT hr, 21 __in HRESULT hrError,
33 __in_z __format_string LPCSTR szFormat, 22 __in_z __format_string LPCSTR szFormat,
34 __in va_list args 23 __in va_list args
35 ); 24 );
diff --git a/src/dutil/inc/dutilsources.h b/src/dutil/inc/dutilsources.h
index bf3da16f..b03013ca 100644
--- a/src/dutil/inc/dutilsources.h
+++ b/src/dutil/inc/dutilsources.h
@@ -63,3 +63,13 @@ typedef enum DUTIL_SOURCE
63 63
64 DUTIL_SOURCE_EXTERNAL = 256, 64 DUTIL_SOURCE_EXTERNAL = 256,
65} DUTIL_SOURCE; 65} DUTIL_SOURCE;
66
67typedef enum REPORT_LEVEL
68{
69 REPORT_NONE, // turns off report (only valid for XXXSetLevel())
70 REPORT_WARNING, // written if want only warnings or reporting is on in general
71 REPORT_STANDARD, // written if reporting is on
72 REPORT_VERBOSE, // written only if verbose reporting is on
73 REPORT_DEBUG, // reporting useful when debugging code
74 REPORT_ERROR, // always gets reported, but can never be specified
75} REPORT_LEVEL;
diff --git a/src/test/DUtilUnitTest/DUtilTests.cpp b/src/test/DUtilUnitTest/DUtilTests.cpp
new file mode 100644
index 00000000..55e81d46
--- /dev/null
+++ b/src/test/DUtilUnitTest/DUtilTests.cpp
@@ -0,0 +1,35 @@
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
5using namespace System;
6using namespace Xunit;
7using namespace WixBuildTools::TestSupport;
8
9namespace DutilTests
10{
11 public ref class DUtil
12 {
13 public:
14 [Fact]
15 void DUtilTraceErrorSourceFiltersOnTraceLevel()
16 {
17 DutilInitialize(&DutilTestTraceError);
18
19 CallDutilTraceErrorSource();
20
21 Dutil_TraceSetLevel(REPORT_DEBUG, FALSE);
22
23 Action^ action = gcnew Action(this, &DUtil::CallDutilTraceErrorSource);
24 Assert::Throws<Exception^>(action);
25
26 DutilUninitialize();
27 }
28
29 private:
30 void CallDutilTraceErrorSource()
31 {
32 Dutil_TraceErrorSource(__FILE__, __LINE__, REPORT_DEBUG, DUTIL_SOURCE_EXTERNAL, E_FAIL, "Error message");
33 }
34 };
35}
diff --git a/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj b/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj
index b023d74f..c0974780 100644
--- a/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj
+++ b/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj
@@ -36,6 +36,8 @@
36 <ClCompile Include="AssemblyInfo.cpp" /> 36 <ClCompile Include="AssemblyInfo.cpp" />
37 <ClCompile Include="DictUtilTest.cpp" /> 37 <ClCompile Include="DictUtilTest.cpp" />
38 <ClCompile Include="DirUtilTests.cpp" /> 38 <ClCompile Include="DirUtilTests.cpp" />
39 <ClCompile Include="DUtilTests.cpp" />
40 <ClCompile Include="error.cpp" />
39 <ClCompile Include="FileUtilTest.cpp" /> 41 <ClCompile Include="FileUtilTest.cpp" />
40 <ClCompile Include="GuidUtilTest.cpp" /> 42 <ClCompile Include="GuidUtilTest.cpp" />
41 <ClCompile Include="IniUtilTest.cpp" /> 43 <ClCompile Include="IniUtilTest.cpp" />
@@ -92,4 +94,4 @@
92 <Error Condition="!Exists('..\..\..\packages\xunit.core.2.4.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.core.2.4.1\build\xunit.core.targets'))" /> 94 <Error Condition="!Exists('..\..\..\packages\xunit.core.2.4.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.core.2.4.1\build\xunit.core.targets'))" />
93 <Error Condition="!Exists('..\..\..\packages\xunit.runner.visualstudio.2.4.1\build\net20\xunit.runner.visualstudio.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.runner.visualstudio.2.4.1\build\net20\xunit.runner.visualstudio.props'))" /> 95 <Error Condition="!Exists('..\..\..\packages\xunit.runner.visualstudio.2.4.1\build\net20\xunit.runner.visualstudio.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\xunit.runner.visualstudio.2.4.1\build\net20\xunit.runner.visualstudio.props'))" />
94 </Target> 96 </Target>
95</Project> 97</Project> \ No newline at end of file
diff --git a/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters b/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters
index 783e18c7..2456558f 100644
--- a/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters
+++ b/src/test/DUtilUnitTest/DUtilUnitTest.vcxproj.filters
@@ -24,6 +24,12 @@
24 <ClCompile Include="DirUtilTests.cpp"> 24 <ClCompile Include="DirUtilTests.cpp">
25 <Filter>Source Files</Filter> 25 <Filter>Source Files</Filter>
26 </ClCompile> 26 </ClCompile>
27 <ClCompile Include="DUtilTests.cpp">
28 <Filter>Source Files</Filter>
29 </ClCompile>
30 <ClCompile Include="error.cpp">
31 <Filter>Source Files</Filter>
32 </ClCompile>
27 <ClCompile Include="FileUtilTest.cpp"> 33 <ClCompile Include="FileUtilTest.cpp">
28 <Filter>Source Files</Filter> 34 <Filter>Source Files</Filter>
29 </ClCompile> 35 </ClCompile>
@@ -42,6 +48,9 @@
42 <ClCompile Include="PathUtilTest.cpp"> 48 <ClCompile Include="PathUtilTest.cpp">
43 <Filter>Source Files</Filter> 49 <Filter>Source Files</Filter>
44 </ClCompile> 50 </ClCompile>
51 <ClCompile Include="precomp.cpp">
52 <Filter>Source Files</Filter>
53 </ClCompile>
45 <ClCompile Include="StrUtilTest.cpp"> 54 <ClCompile Include="StrUtilTest.cpp">
46 <Filter>Source Files</Filter> 55 <Filter>Source Files</Filter>
47 </ClCompile> 56 </ClCompile>
diff --git a/src/test/DUtilUnitTest/DictUtilTest.cpp b/src/test/DUtilUnitTest/DictUtilTest.cpp
index 4e9d3907..4b4777d7 100644
--- a/src/test/DUtilUnitTest/DictUtilTest.cpp
+++ b/src/test/DUtilUnitTest/DictUtilTest.cpp
@@ -22,6 +22,8 @@ namespace DutilTests
22 [Fact] 22 [Fact]
23 void DictUtilTest() 23 void DictUtilTest()
24 { 24 {
25 DutilInitialize(&DutilTestTraceError);
26
25 EmbeddedKeyTestHelper(DICT_FLAG_NONE, numIterations); 27 EmbeddedKeyTestHelper(DICT_FLAG_NONE, numIterations);
26 28
27 EmbeddedKeyTestHelper(DICT_FLAG_CASEINSENSITIVE, numIterations); 29 EmbeddedKeyTestHelper(DICT_FLAG_CASEINSENSITIVE, numIterations);
@@ -29,6 +31,8 @@ namespace DutilTests
29 StringListTestHelper(DICT_FLAG_NONE, numIterations); 31 StringListTestHelper(DICT_FLAG_NONE, numIterations);
30 32
31 StringListTestHelper(DICT_FLAG_CASEINSENSITIVE, numIterations); 33 StringListTestHelper(DICT_FLAG_CASEINSENSITIVE, numIterations);
34
35 DutilUninitialize();
32 } 36 }
33 37
34 private: 38 private:
diff --git a/src/test/DUtilUnitTest/FileUtilTest.cpp b/src/test/DUtilUnitTest/FileUtilTest.cpp
index 9bd1d0c0..0087a1d5 100644
--- a/src/test/DUtilUnitTest/FileUtilTest.cpp
+++ b/src/test/DUtilUnitTest/FileUtilTest.cpp
@@ -18,6 +18,8 @@ namespace DutilTests
18 LPWSTR sczTempDir = NULL; 18 LPWSTR sczTempDir = NULL;
19 LPWSTR sczFileDir = NULL; 19 LPWSTR sczFileDir = NULL;
20 20
21 DutilInitialize(&DutilTestTraceError);
22
21 try 23 try
22 { 24 {
23 hr = PathExpand(&sczTempDir, L"%TEMP%\\FileUtilTest\\", PATH_EXPAND_ENVIRONMENT); 25 hr = PathExpand(&sczTempDir, L"%TEMP%\\FileUtilTest\\", PATH_EXPAND_ENVIRONMENT);
@@ -43,6 +45,7 @@ namespace DutilTests
43 { 45 {
44 ReleaseStr(sczTempDir); 46 ReleaseStr(sczTempDir);
45 ReleaseStr(sczFileDir); 47 ReleaseStr(sczFileDir);
48 DutilUninitialize();
46 } 49 }
47 } 50 }
48 51
diff --git a/src/test/DUtilUnitTest/IniUtilTest.cpp b/src/test/DUtilUnitTest/IniUtilTest.cpp
index 2edd56ab..946f19c5 100644
--- a/src/test/DUtilUnitTest/IniUtilTest.cpp
+++ b/src/test/DUtilUnitTest/IniUtilTest.cpp
@@ -24,6 +24,8 @@ namespace DutilTests
24 LPWSTR wzIniContents = L" PlainValue = \t Blah \r\n;CommentHere\r\n[Section1]\r\n ;Another Comment With = Equal Sign\r\nSection1ValueA=Foo\r\n\r\nSection1ValueB=Bar\r\n[Section2]\r\nSection2ValueA=Cha\r\nArray[0]=Arr\r\n"; 24 LPWSTR wzIniContents = L" PlainValue = \t Blah \r\n;CommentHere\r\n[Section1]\r\n ;Another Comment With = Equal Sign\r\nSection1ValueA=Foo\r\n\r\nSection1ValueB=Bar\r\n[Section2]\r\nSection2ValueA=Cha\r\nArray[0]=Arr\r\n";
25 LPWSTR wzScriptContents = L"setf ~PlainValue Blah\r\n;CommentHere\r\n\r\nsetf ~Section1\\Section1ValueA Foo\r\n\r\nsetf ~Section1\\Section1ValueB Bar\r\nsetf ~Section2\\Section2ValueA Cha\r\nsetf ~Section2\\Array[0] Arr\r\n"; 25 LPWSTR wzScriptContents = L"setf ~PlainValue Blah\r\n;CommentHere\r\n\r\nsetf ~Section1\\Section1ValueA Foo\r\n\r\nsetf ~Section1\\Section1ValueB Bar\r\nsetf ~Section2\\Section2ValueA Cha\r\nsetf ~Section2\\Array[0] Arr\r\n";
26 26
27 DutilInitialize(&DutilTestTraceError);
28
27 try 29 try
28 { 30 {
29 hr = PathExpand(&sczTempIniFilePath, L"%TEMP%\\IniUtilTest\\Test.ini", PATH_EXPAND_ENVIRONMENT); 31 hr = PathExpand(&sczTempIniFilePath, L"%TEMP%\\IniUtilTest\\Test.ini", PATH_EXPAND_ENVIRONMENT);
@@ -58,6 +60,7 @@ namespace DutilTests
58 { 60 {
59 ReleaseStr(sczTempIniFilePath); 61 ReleaseStr(sczTempIniFilePath);
60 ReleaseStr(sczTempIniFileDir); 62 ReleaseStr(sczTempIniFileDir);
63 DutilUninitialize();
61 } 64 }
62 } 65 }
63 66
diff --git a/src/test/DUtilUnitTest/MemUtilTest.cpp b/src/test/DUtilUnitTest/MemUtilTest.cpp
index 2621da6d..09692bfb 100644
--- a/src/test/DUtilUnitTest/MemUtilTest.cpp
+++ b/src/test/DUtilUnitTest/MemUtilTest.cpp
@@ -27,6 +27,8 @@ namespace DutilTests
27 ArrayValue *rgValues = NULL; 27 ArrayValue *rgValues = NULL;
28 DWORD cValues = 0; 28 DWORD cValues = 0;
29 29
30 DutilInitialize(&DutilTestTraceError);
31
30 try 32 try
31 { 33 {
32 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), cValues + 1, sizeof(ArrayValue), 5); 34 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), cValues + 1, sizeof(ArrayValue), 5);
@@ -101,7 +103,7 @@ namespace DutilTests
101 } 103 }
102 104
103 LExit: 105 LExit:
104 return; 106 DutilUninitialize();
105 } 107 }
106 108
107 [Fact] 109 [Fact]
@@ -111,6 +113,8 @@ namespace DutilTests
111 ArrayValue *rgValues = NULL; 113 ArrayValue *rgValues = NULL;
112 DWORD cValues = 0; 114 DWORD cValues = 0;
113 115
116 DutilInitialize(&DutilTestTraceError);
117
114 try 118 try
115 { 119 {
116 hr = MemInsertIntoArray(reinterpret_cast<LPVOID*>(&rgValues), 0, 1, cValues + 1, sizeof(ArrayValue), 5); 120 hr = MemInsertIntoArray(reinterpret_cast<LPVOID*>(&rgValues), 0, 1, cValues + 1, sizeof(ArrayValue), 5);
@@ -180,6 +184,7 @@ namespace DutilTests
180 finally 184 finally
181 { 185 {
182 ReleaseMem(rgValues); 186 ReleaseMem(rgValues);
187 DutilUninitialize();
183 } 188 }
184 } 189 }
185 190
@@ -190,6 +195,8 @@ namespace DutilTests
190 ArrayValue *rgValues = NULL; 195 ArrayValue *rgValues = NULL;
191 DWORD cValues = 0; 196 DWORD cValues = 0;
192 197
198 DutilInitialize(&DutilTestTraceError);
199
193 try 200 try
194 { 201 {
195 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10); 202 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10);
@@ -252,6 +259,7 @@ namespace DutilTests
252 finally 259 finally
253 { 260 {
254 ReleaseMem(rgValues); 261 ReleaseMem(rgValues);
262 DutilUninitialize();
255 } 263 }
256 } 264 }
257 265
@@ -262,6 +270,8 @@ namespace DutilTests
262 ArrayValue *rgValues = NULL; 270 ArrayValue *rgValues = NULL;
263 DWORD cValues = 0; 271 DWORD cValues = 0;
264 272
273 DutilInitialize(&DutilTestTraceError);
274
265 try 275 try
266 { 276 {
267 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10); 277 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10);
@@ -326,6 +336,7 @@ namespace DutilTests
326 finally 336 finally
327 { 337 {
328 ReleaseMem(rgValues); 338 ReleaseMem(rgValues);
339 DutilUninitialize();
329 } 340 }
330 } 341 }
331 342
@@ -336,6 +347,8 @@ namespace DutilTests
336 ArrayValue *rgValues = NULL; 347 ArrayValue *rgValues = NULL;
337 DWORD cValues = 0; 348 DWORD cValues = 0;
338 349
350 DutilInitialize(&DutilTestTraceError);
351
339 try 352 try
340 { 353 {
341 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10); 354 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&rgValues), 10, sizeof(ArrayValue), 10);
@@ -424,6 +437,7 @@ namespace DutilTests
424 finally 437 finally
425 { 438 {
426 ReleaseMem(rgValues); 439 ReleaseMem(rgValues);
440 DutilUninitialize();
427 } 441 }
428 } 442 }
429 443
diff --git a/src/test/DUtilUnitTest/StrUtilTest.cpp b/src/test/DUtilUnitTest/StrUtilTest.cpp
index 7c35b7c0..94fee280 100644
--- a/src/test/DUtilUnitTest/StrUtilTest.cpp
+++ b/src/test/DUtilUnitTest/StrUtilTest.cpp
@@ -86,6 +86,8 @@ namespace DutilTests
86 HRESULT hr = S_OK; 86 HRESULT hr = S_OK;
87 LPWSTR sczOutput = NULL; 87 LPWSTR sczOutput = NULL;
88 88
89 DutilInitialize(&DutilTestTraceError);
90
89 try 91 try
90 { 92 {
91 hr = StrTrimWhitespace(&sczOutput, wzInput); 93 hr = StrTrimWhitespace(&sczOutput, wzInput);
@@ -103,7 +105,7 @@ namespace DutilTests
103 } 105 }
104 106
105 LExit: 107 LExit:
106 return; 108 DutilUninitialize();
107 } 109 }
108 110
109 void TestTrimAnsi(LPCSTR szInput, LPCSTR szExpectedResult) 111 void TestTrimAnsi(LPCSTR szInput, LPCSTR szExpectedResult)
@@ -111,6 +113,8 @@ namespace DutilTests
111 HRESULT hr = S_OK; 113 HRESULT hr = S_OK;
112 LPSTR sczOutput = NULL; 114 LPSTR sczOutput = NULL;
113 115
116 DutilInitialize(&DutilTestTraceError);
117
114 try 118 try
115 { 119 {
116 hr = StrAnsiTrimWhitespace(&sczOutput, szInput); 120 hr = StrAnsiTrimWhitespace(&sczOutput, szInput);
@@ -128,7 +132,7 @@ namespace DutilTests
128 } 132 }
129 133
130 LExit: 134 LExit:
131 return; 135 DutilUninitialize();
132 } 136 }
133 137
134 void TestStrAllocStringAnsi(LPCSTR szSource, DWORD cchSource, LPCWSTR wzExpectedResult) 138 void TestStrAllocStringAnsi(LPCSTR szSource, DWORD cchSource, LPCWSTR wzExpectedResult)
@@ -136,6 +140,8 @@ namespace DutilTests
136 HRESULT hr = S_OK; 140 HRESULT hr = S_OK;
137 LPWSTR sczOutput = NULL; 141 LPWSTR sczOutput = NULL;
138 142
143 DutilInitialize(&DutilTestTraceError);
144
139 try 145 try
140 { 146 {
141 hr = StrAllocStringAnsi(&sczOutput, szSource, cchSource, CP_UTF8); 147 hr = StrAllocStringAnsi(&sczOutput, szSource, cchSource, CP_UTF8);
@@ -153,7 +159,7 @@ namespace DutilTests
153 } 159 }
154 160
155 LExit: 161 LExit:
156 return; 162 DutilUninitialize();
157 } 163 }
158 164
159 void TestStrAnsiAllocString(LPWSTR wzSource, DWORD cchSource, LPCSTR szExpectedResult) 165 void TestStrAnsiAllocString(LPWSTR wzSource, DWORD cchSource, LPCSTR szExpectedResult)
@@ -161,6 +167,8 @@ namespace DutilTests
161 HRESULT hr = S_OK; 167 HRESULT hr = S_OK;
162 LPSTR sczOutput = NULL; 168 LPSTR sczOutput = NULL;
163 169
170 DutilInitialize(&DutilTestTraceError);
171
164 try 172 try
165 { 173 {
166 hr = StrAnsiAllocString(&sczOutput, wzSource, cchSource, CP_UTF8); 174 hr = StrAnsiAllocString(&sczOutput, wzSource, cchSource, CP_UTF8);
@@ -178,7 +186,7 @@ namespace DutilTests
178 } 186 }
179 187
180 LExit: 188 LExit:
181 return; 189 DutilUninitialize();
182 } 190 }
183 }; 191 };
184} 192}
diff --git a/src/test/DUtilUnitTest/UriUtilTest.cpp b/src/test/DUtilUnitTest/UriUtilTest.cpp
index 220b3ff5..b3bf87a2 100644
--- a/src/test/DUtilUnitTest/UriUtilTest.cpp
+++ b/src/test/DUtilUnitTest/UriUtilTest.cpp
@@ -17,6 +17,8 @@ namespace CfgTests
17 { 17 {
18 HRESULT hr = S_OK; 18 HRESULT hr = S_OK;
19 19
20 DutilInitialize(&DutilTestTraceError);
21
20 LPCWSTR uri = L"https://localhost/"; 22 LPCWSTR uri = L"https://localhost/";
21 URI_PROTOCOL uriProtocol = URI_PROTOCOL::URI_PROTOCOL_UNKNOWN; 23 URI_PROTOCOL uriProtocol = URI_PROTOCOL::URI_PROTOCOL_UNKNOWN;
22 hr = UriProtocol(uri, &uriProtocol); 24 hr = UriProtocol(uri, &uriProtocol);
@@ -90,7 +92,7 @@ namespace CfgTests
90 Assert::Equal((int)URI_PROTOCOL::URI_PROTOCOL_FTP, (int)uriProtocol); 92 Assert::Equal((int)URI_PROTOCOL::URI_PROTOCOL_FTP, (int)uriProtocol);
91 93
92 LExit: 94 LExit:
93 ; 95 DutilUninitialize();
94 } 96 }
95 }; 97 };
96} 98}
diff --git a/src/test/DUtilUnitTest/error.cpp b/src/test/DUtilUnitTest/error.cpp
new file mode 100644
index 00000000..e51971c3
--- /dev/null
+++ b/src/test/DUtilUnitTest/error.cpp
@@ -0,0 +1,26 @@
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
5const int ERROR_STRING_BUFFER = 1024;
6
7static char szMsg[ERROR_STRING_BUFFER];
8static WCHAR wzMsg[ERROR_STRING_BUFFER];
9
10void CALLBACK DutilTestTraceError(
11 __in_z LPCSTR /*szFile*/,
12 __in int /*iLine*/,
13 __in REPORT_LEVEL /*rl*/,
14 __in UINT source,
15 __in HRESULT hrError,
16 __in_z __format_string LPCSTR szFormat,
17 __in va_list args
18 )
19{
20 if (DUTIL_SOURCE_EXTERNAL == source)
21 {
22 ::StringCchPrintfA(szMsg, countof(szMsg), szFormat, args);
23 MultiByteToWideChar(CP_ACP, 0, szMsg, -1, wzMsg, countof(wzMsg));
24 throw gcnew System::Exception(System::String::Format("hr = 0x{0:X8}, message = {1}", hrError, gcnew System::String(wzMsg)));
25 }
26}
diff --git a/src/test/DUtilUnitTest/error.h b/src/test/DUtilUnitTest/error.h
index a52db56d..b973acaf 100644
--- a/src/test/DUtilUnitTest/error.h
+++ b/src/test/DUtilUnitTest/error.h
@@ -1,8 +1,14 @@
1#pragma once
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// 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
3const int ERROR_STRING_BUFFER = 1024; 4#define DUTIL_SOURCE_DEFAULT DUTIL_SOURCE_EXTERNAL
4 5
5static char szMsg[ERROR_STRING_BUFFER]; 6void CALLBACK DutilTestTraceError(
6static WCHAR wzMsg[ERROR_STRING_BUFFER]; 7 __in_z LPCSTR szFile,
7 8 __in int iLine,
8#define ExitTrace(x, f, ...) { HRESULT hrTemp = x; hr = ::StringCchPrintfA(szMsg, countof(szMsg), f, __VA_ARGS__); MultiByteToWideChar(CP_ACP, 0, szMsg, -1, wzMsg, countof(wzMsg)); throw gcnew System::Exception(System::String::Format("hr = 0x{0:X8}, message = {1}", hrTemp, gcnew System::String(wzMsg))); } 9 __in REPORT_LEVEL rl,
10 __in UINT source,
11 __in HRESULT hrError,
12 __in_z __format_string LPCSTR szFormat,
13 __in va_list args
14 );
diff --git a/src/test/DUtilUnitTest/precomp.h b/src/test/DUtilUnitTest/precomp.h
index 15dfcd1a..284668fe 100644
--- a/src/test/DUtilUnitTest/precomp.h
+++ b/src/test/DUtilUnitTest/precomp.h
@@ -7,6 +7,7 @@
7#include <ShlObj.h> 7#include <ShlObj.h>
8 8
9// Include error.h before dutil.h 9// Include error.h before dutil.h
10#include <dutilsources.h>
10#include "error.h" 11#include "error.h"
11#include <dutil.h> 12#include <dutil.h>
12 13