2828#include < cassert>
2929#include < sstream>
3030#include < algorithm>
31+ #ifdef _WIN32
3132#include < windows.h>
3233#include < unknwn.h>
34+ #endif
3335#include " dxc/dxcapi.h"
36+ #ifdef _WIN32
3437#include < atlbase.h>
3538#include < atlfile.h>
39+ #endif
3640
3741#include " dxc/Test/HLSLTestData.h"
3842#include " dxc/Test/HlslTestUtils.h"
4751using namespace std ;
4852using namespace hlsl_test ;
4953
54+ #ifdef _WIN32
5055class RewriterTest {
56+ #else
57+ class RewriterTest : public ::testing::Test {
58+ #endif
5159public:
5260 BEGIN_TEST_CLASS (RewriterTest)
5361 TEST_CLASS_PROPERTY (L" Parallel" , L" true" )
5462 TEST_METHOD_PROPERTY (L" Priority" , L" 0" )
5563 END_TEST_CLASS ()
5664
57- TEST_METHOD (RunArrayLength);
58- TEST_METHOD (RunAttributes);
59- TEST_METHOD (RunAnonymousStruct);
60- TEST_METHOD (RunCppErrors);
61- TEST_METHOD (RunForceExtern);
62- TEST_METHOD (RunIndexingOperator);
63- TEST_METHOD (RunIntrinsicExamples);
64- TEST_METHOD (RunMatrixAssignments);
65- TEST_METHOD (RunMatrixPackOrientation);
66- TEST_METHOD (RunMatrixSyntax);
67- TEST_METHOD (RunPackReg);
68- TEST_METHOD (RunScalarAssignments);
69- TEST_METHOD (RunShared);
70- TEST_METHOD (RunStructAssignments);
71- TEST_METHOD (RunTemplateChecks);
72- TEST_METHOD (RunTypemodsSyntax);
73- TEST_METHOD (RunVarmodsSyntax);
74- TEST_METHOD (RunVectorAssignments);
75- TEST_METHOD (RunVectorSyntaxMix);
76- TEST_METHOD (RunVectorSyntax);
77- TEST_METHOD (RunIncludes);
78- TEST_METHOD (RunSpirv);
79- TEST_METHOD (RunStructMethods);
80- TEST_METHOD (RunPredefines);
81- TEST_METHOD (RunWideOneByte);
82- TEST_METHOD (RunWideTwoByte);
83- TEST_METHOD (RunWideThreeByteBadChar);
84- TEST_METHOD (RunWideThreeByte);
85- TEST_METHOD (RunNonUnicode);
86- TEST_METHOD (RunEffect);
87- TEST_METHOD (RunSemanticDefines);
88- TEST_METHOD (RunNoFunctionBody);
89- TEST_METHOD (RunNoFunctionBodyInclude);
90- TEST_METHOD (RunNoStatic);
91- TEST_METHOD (RunKeepUserMacro);
92- TEST_METHOD (RunExtractUniforms);
93- TEST_METHOD (RunGlobalsUsedInMethod);
65+ TEST_CLASS_SETUP (InitSupport);
66+
67+ TEST_METHOD (RunArrayLength)
68+ TEST_METHOD (RunAttributes)
69+ TEST_METHOD (RunAnonymousStruct)
70+ TEST_METHOD (RunCppErrors)
71+ TEST_METHOD (RunForceExtern)
72+ TEST_METHOD (RunIndexingOperator)
73+ TEST_METHOD (RunIntrinsicExamples)
74+ TEST_METHOD (RunMatrixAssignments)
75+ TEST_METHOD (RunMatrixPackOrientation)
76+ TEST_METHOD (RunMatrixSyntax)
77+ TEST_METHOD (RunPackReg)
78+ TEST_METHOD (RunScalarAssignments)
79+ TEST_METHOD (RunShared)
80+ TEST_METHOD (RunStructAssignments)
81+ TEST_METHOD (RunTemplateChecks)
82+ TEST_METHOD (RunTypemodsSyntax)
83+ TEST_METHOD (RunVarmodsSyntax)
84+ TEST_METHOD (RunVectorAssignments)
85+ TEST_METHOD (RunVectorSyntaxMix)
86+ TEST_METHOD (RunVectorSyntax)
87+ TEST_METHOD (RunIncludes)
88+ TEST_METHOD (RunSpirv)
89+ TEST_METHOD (RunStructMethods)
90+ TEST_METHOD (RunPredefines)
91+ TEST_METHOD (RunWideOneByte)
92+ TEST_METHOD (RunWideTwoByte)
93+ TEST_METHOD (RunWideThreeByteBadChar)
94+ TEST_METHOD (RunWideThreeByte)
95+ TEST_METHOD (RunNonUnicode)
96+ TEST_METHOD (RunEffect)
97+ TEST_METHOD (RunSemanticDefines)
98+ TEST_METHOD (RunNoFunctionBody)
99+ TEST_METHOD (RunNoFunctionBodyInclude)
100+ TEST_METHOD (RunNoStatic)
101+ TEST_METHOD (RunKeepUserMacro)
102+ TEST_METHOD (RunExtractUniforms)
103+ TEST_METHOD (RunGlobalsUsedInMethod)
94104 TEST_METHOD (RunRewriterFails)
95105
96106 dxc::DxcDllSupport m_dllSupport;
@@ -141,13 +151,6 @@ class RewriterTest {
141151 }
142152
143153 HRESULT CreateRewriter (IDxcRewriter **pRewriter) {
144- if (!m_dllSupport.IsEnabled ()) {
145- VERIFY_SUCCEEDED (m_dllSupport.Initialize ());
146-
147- CComPtr<IDxcLibrary> library;
148- VERIFY_SUCCEEDED (m_dllSupport.CreateInstance (CLSID_DxcLibrary, &library));
149- VERIFY_SUCCEEDED (library->CreateIncludeHandler (&m_pIncludeHandler));
150- }
151154 return m_dllSupport.CreateInstance (CLSID_DxcRewriter, pRewriter);
152155 }
153156
@@ -168,33 +171,21 @@ class RewriterTest {
168171 }
169172
170173 struct FileWithBlob {
171- CAtlFile file;
172- CAtlFileMapping<char > mapping;
173174 CComPtr<IDxcBlobEncoding> BlobEncoding;
174175
175176 FileWithBlob (dxc::DxcDllSupport &support, LPCWSTR path) {
176- IFT (file.Create (path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING));
177- IFT (mapping.MapFile (file));
178177 CComPtr<IDxcLibrary> library;
179178 IFT (support.CreateInstance (CLSID_DxcLibrary, &library));
180- IFT (library-> CreateBlobWithEncodingFromPinned (
181- mapping. GetData (), mapping. GetMappingSize (), CP_UTF8 , &BlobEncoding));
179+ UINT32 codePage = CP_UTF8;
180+ IFT (library-> CreateBlobFromFile (path, &codePage , &BlobEncoding));
182181 }
183182 };
184183
185184 bool CompareGold (std::string &firstPass, LPCWSTR goldPath) {
186- HANDLE goldHandle =
187- CreateFileW (goldPath, GENERIC_READ, 0 , 0 , OPEN_EXISTING, 0 , 0 );
188- VERIFY_ARE_NOT_EQUAL (goldHandle, INVALID_HANDLE_VALUE);
189- CHandle checkedGoldHandle (goldHandle);
190-
191- DWORD gFileSize = GetFileSize (goldHandle, NULL );
192- CComHeapPtr<char > gReadBuff ;
193- VERIFY_IS_TRUE (gReadBuff .AllocateBytes (gFileSize ));
194- DWORD gnumActualRead;
195- VERIFY_WIN32_BOOL_SUCCEEDED (ReadFile (checkedGoldHandle, gReadBuff .m_pData ,
196- gFileSize , &gnumActualRead, NULL ));
197- std::string gold = std::string ((LPSTR)gReadBuff , gnumActualRead);
185+ FileWithBlob goldBlob (m_dllSupport, goldPath);
186+ std::string gold =
187+ std::string ((LPSTR)goldBlob.BlobEncoding ->GetBufferPointer (),
188+ goldBlob.BlobEncoding ->GetBufferSize ());
198189 gold.erase (std::remove (gold.begin (), gold.end (), ' \r ' ), gold.end ());
199190
200191 // Kept because useful for debugging
@@ -265,9 +256,16 @@ class RewriterTest {
265256 TestFileName = TestFileName.substr (index1 + 1 , index2 - (index1 + 1 ));
266257
267258 wchar_t TempPath[MAX_PATH];
259+ #ifdef _WIN32
268260 DWORD length = GetTempPathW (MAX_PATH, TempPath);
269261 VERIFY_WIN32_BOOL_SUCCEEDED (length != 0 );
270-
262+ #else
263+ const char *TempDir = std::getenv (" TMPDIR" );
264+ if (TempDir == nullptr ) {
265+ TempDir = " /tmp" ;
266+ }
267+ mbstowcs (TempPath, TempDir, strlen (TempDir) + 1 );
268+ #endif
271269 std::wstring PrintName (TempPath);
272270 PrintName += TestFileName;
273271 PrintName += L" _rewrite_test_pass.txt" ;
@@ -314,6 +312,16 @@ class RewriterTest {
314312 }
315313};
316314
315+ bool RewriterTest::InitSupport () {
316+ if (!m_dllSupport.IsEnabled ()) {
317+ VERIFY_SUCCEEDED (m_dllSupport.Initialize ());
318+ CComPtr<IDxcLibrary> library;
319+ VERIFY_SUCCEEDED (m_dllSupport.CreateInstance (CLSID_DxcLibrary, &library));
320+ VERIFY_SUCCEEDED (library->CreateIncludeHandler (&m_pIncludeHandler));
321+ }
322+ return true ;
323+ }
324+
317325TEST_F (RewriterTest, RunArrayLength) {
318326 CheckVerifiesHLSL (L" rewriter\\ array-length-rw.hlsl" ,
319327 L" rewriter\\ correct_rewrites\\ array-length-rw_gold.hlsl" );
@@ -561,7 +569,12 @@ TEST_F(RewriterTest, RunWideThreeByte) {
561569 0 ); // const added by default
562570}
563571
572+ #ifdef _WIN32
564573TEST_F (RewriterTest, RunNonUnicode) {
574+ #else
575+ // Need to enable ANSI Greek support.
576+ TEST_F (RewriterTest, DISABLED_RunNonUnicode) {
577+ #endif
565578 CComPtr<IDxcRewriter> pRewriter;
566579 VERIFY_SUCCEEDED (CreateRewriter (&pRewriter));
567580 CComPtr<IDxcOperationResult> pRewriteResult;
0 commit comments