Skip to content

Commit 245fd12

Browse files
authored
[Test] enable rewriter test for linux (microsoft#5908)
Added InitSupport to setup m_dllSupport and m_pIncludeHandler. Work around GetTempPathW and GetFileSize. RewriterTest.RunNonUnicode is disabled for dependent on Greek language support. This is for microsoft#5877
1 parent a333d3b commit 245fd12

File tree

3 files changed

+79
-66
lines changed

3 files changed

+79
-66
lines changed

tools/clang/test/HLSL/rewriter/includes.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "toinclude.hlsl"
22
#include "..\toinclude2.hlsl"
3-
#include "\for_includes_test\toinclude3.hlsl"
3+
#include "for_includes_test\toinclude3.hlsl"
44

55
int func1(int b){
66
return includedFunc(b);
@@ -12,4 +12,4 @@ int func2(int d){
1212

1313
int func3(int f){
1414
return includedFunc3(f);
15-
}
15+
}

tools/clang/unittests/HLSL/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ else (WIN32)
5656
set(HLSL_IGNORE_SOURCES
5757
MSFileSysTest.cpp
5858
PixDiaTest.cpp
59-
RewriterTest.cpp
6059
)
6160

6261
add_clang_unittest(ClangHLSLTests
@@ -73,6 +72,7 @@ add_clang_unittest(ClangHLSLTests
7372
Objects.cpp
7473
OptimizerTest.cpp
7574
OptionsTest.cpp
75+
RewriterTest.cpp
7676
PixTest.cpp
7777
PixTestUtils.cpp
7878
SystemValueTest.cpp

tools/clang/unittests/HLSL/RewriterTest.cpp

Lines changed: 76 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,15 @@
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"
@@ -47,50 +51,56 @@
4751
using namespace std;
4852
using namespace hlsl_test;
4953

54+
#ifdef _WIN32
5055
class RewriterTest {
56+
#else
57+
class RewriterTest : public ::testing::Test {
58+
#endif
5159
public:
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+
317325
TEST_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
564573
TEST_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

Comments
 (0)