ソースを参照

Support directory paths with hcttest file-check. (#1838)

The ShaderCompatSuite and Unroll tests randomly supported being used to batch run file-check on directories. This change rather updates hcttest file-check to support directories as well as individual files.
Tristan Labelle 6 年 前
コミット
0e7cd88756
2 ファイル変更34 行追加45 行削除
  1. 28 29
      tools/clang/unittests/HLSL/CompilerTest.cpp
  2. 6 16
      utils/hct/hcttest.cmd

+ 28 - 29
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -957,7 +957,7 @@ public:
   TEST_METHOD(Unroll)
   TEST_METHOD(Unroll)
   TEST_METHOD(QuickTest)
   TEST_METHOD(QuickTest)
   TEST_METHOD(QuickLlTest)
   TEST_METHOD(QuickLlTest)
-  BEGIN_TEST_METHOD(SingleFileCheckTest)
+  BEGIN_TEST_METHOD(ManualFileCheckTest)
     TEST_METHOD_PROPERTY(L"Ignore", L"true")
     TEST_METHOD_PROPERTY(L"Ignore", L"true")
   END_TEST_METHOD()
   END_TEST_METHOD()
 
 
@@ -6016,29 +6016,11 @@ TEST_F(CompilerTest, SubobjectCodeGenErrors) {
 }
 }
 
 
 TEST_F(CompilerTest, Unroll) {
 TEST_F(CompilerTest, Unroll) {
-  using namespace WEX::TestExecution;
-  std::wstring suitePath = L"..\\CodeGenHLSL\\unroll";
-
-  WEX::Common::String value;
-  if (!DXC_FAILED(RuntimeParameters::TryGetValue(L"SuitePath", value)))
-  {
-    suitePath = value;
-  }
-
-  CodeGenTestCheckBatchDir(suitePath);
+  CodeGenTestCheckBatchDir(L"..\\CodeGenHLSL\\unroll");
 }
 }
 
 
 TEST_F(CompilerTest, ShaderCompatSuite) {
 TEST_F(CompilerTest, ShaderCompatSuite) {
-  using namespace WEX::TestExecution;
-  std::wstring suitePath = L"..\\CodeGenHLSL\\shader-compat-suite";
-
-  WEX::Common::String value;
-  if (!DXC_FAILED(RuntimeParameters::TryGetValue(L"SuitePath", value)))
-  {
-    suitePath = value;
-  }
-
-  CodeGenTestCheckBatchDir(suitePath);
+  CodeGenTestCheckBatchDir(L"..\\CodeGenHLSL\\shader-compat-suite");
 }
 }
 
 
 TEST_F(CompilerTest, QuickTest) {
 TEST_F(CompilerTest, QuickTest) {
@@ -6050,19 +6032,36 @@ TEST_F(CompilerTest, QuickLlTest) {
 }
 }
 
 
 #ifdef _WIN32
 #ifdef _WIN32
-TEST_F(CompilerTest, SingleFileCheckTest) {
+TEST_F(CompilerTest, ManualFileCheckTest) {
 #else
 #else
-TEST_F(CompilerTest, DISABLED_SingleFileCheckTest) {
+TEST_F(CompilerTest, DISABLED_ManualFileCheckTest) {
 #endif
 #endif
   using namespace llvm;
   using namespace llvm;
   using namespace WEX::TestExecution;
   using namespace WEX::TestExecution;
+
   WEX::Common::String value;
   WEX::Common::String value;
-  VERIFY_SUCCEEDED(RuntimeParameters::TryGetValue(L"InputFile", value));
-  std::wstring filename = value;
-  CW2A pUtf8Filename(filename.c_str());
-  if (!llvm::sys::path::is_absolute(pUtf8Filename.m_psz)) {
-    filename = hlsl_test::GetPathToHlslDataFile(filename.c_str());
+  VERIFY_SUCCEEDED(RuntimeParameters::TryGetValue(L"InputPath", value));
+
+  std::wstring path = value;
+  if (!llvm::sys::path::is_absolute(CW2A(path.c_str()).m_psz)) {
+    path = hlsl_test::GetPathToHlslDataFile(path.c_str());
+  }
+
+  bool isDirectory;
+  {
+    // Temporarily setup the filesystem for testing whether the path is a directory.
+    // If it is, CodeGenTestCheckBatchDir will create its own instance.
+    llvm::sys::fs::MSFileSystem *msfPtr;
+    VERIFY_SUCCEEDED(CreateMSFileSystemForDisk(&msfPtr));
+    std::unique_ptr<llvm::sys::fs::MSFileSystem> msf(msfPtr);
+    llvm::sys::fs::AutoPerThreadSystem pts(msf.get());
+    IFTLLVM(pts.error_code());
+    isDirectory = llvm::sys::fs::is_directory(CW2A(path.c_str()).m_psz);
   }
   }
 
 
-  CodeGenTestCheckBatch(filename.c_str(), 0);
+  if (isDirectory) {
+    CodeGenTestCheckBatchDir(path);
+  } else {
+    CodeGenTestCheckBatch(path.c_str(), 0);
+  }
 }
 }

+ 6 - 16
utils/hct/hcttest.cmd

@@ -19,8 +19,8 @@ set TEST_CLANG_FILTER= /select: "@Priority<1"
 set TEST_EXEC_FILTER=ExecutionTest::*
 set TEST_EXEC_FILTER=ExecutionTest::*
 set LOG_FILTER=/logOutput:LowWithConsoleBuffering
 set LOG_FILTER=/logOutput:LowWithConsoleBuffering
 set TEST_COMPAT_SUITE=0
 set TEST_COMPAT_SUITE=0
-set COMPAT_SUIT_PATH=
-set TEST_SINGLE_FILE_CHECK=0
+set MANUAL_FILE_CHECK_PATH=
+set TEST_MANUAL_FILE_CHECK=0
 set SINGLE_FILE_CHECK_NAME=0
 set SINGLE_FILE_CHECK_NAME=0
 
 
 rem Begin SPIRV change
 rem Begin SPIRV change
@@ -78,15 +78,10 @@ if "%1"=="-clean" (
   set TEST_CLANG=1
   set TEST_CLANG=1
   set TEST_CLANG_FILTER= /name:%2
   set TEST_CLANG_FILTER= /name:%2
   shift /1
   shift /1
-) else if "%1"=="compat-suite" (
-  set TEST_ALL=0
-  set TEST_COMPAT_SUITE=1
-  set COMPAT_SUIT_PATH= /p:"SuitePath=%~2"
-  shift /1
 ) else if "%1"=="file-check" (
 ) else if "%1"=="file-check" (
   set TEST_ALL=0
   set TEST_ALL=0
-  set TEST_SINGLE_FILE_CHECK=1
-  set COMPAT_SUIT_PATH= /p:"InputFile=%~2"
+  set TEST_MANUAL_FILE_CHECK=1
+  set MANUAL_FILE_CHECK_PATH=%~2
   shift /1
   shift /1
 ) else if "%1"=="v" (
 ) else if "%1"=="v" (
   set TEST_ALL=0
   set TEST_ALL=0
@@ -281,13 +276,8 @@ if exist "%HCT_EXTRAS%\hcttest-after.cmd" (
   set RES_HCTTEST_AFTER=!ERRORLEVEL!
   set RES_HCTTEST_AFTER=!ERRORLEVEL!
 )
 )
 
 
-if "%TEST_SINGLE_FILE_CHECK%"=="1" (
-  call :runte clang-hlsl-tests.dll /p:"HlslDataDir=%HLSL_SRC_DIR%\tools\clang\test\HLSL" /name:CompilerTest::SingleFileCheckTest /runIgnoredTests %COMPAT_SUIT_PATH%
-  set RES_EXEC=!ERRORLEVEL!
-)
-
-if "%TEST_COMPAT_SUITE%"=="1" (
-  call :runte clang-hlsl-tests.dll /p:"HlslDataDir=%HLSL_SRC_DIR%\tools\clang\test\HLSL" /name:CompilerTest::ShaderCompatSuite %COMPAT_SUIT_PATH%
+if "%TEST_MANUAL_FILE_CHECK%"=="1" (
+  call :runte clang-hlsl-tests.dll /p:"HlslDataDir=%HLSL_SRC_DIR%\tools\clang\test\HLSL" /name:CompilerTest::ManualFileCheckTest /runIgnoredTests /p:"InputPath=%MANUAL_FILE_CHECK_PATH%"
   set RES_EXEC=!ERRORLEVEL!
   set RES_EXEC=!ERRORLEVEL!
 )
 )