[clang-tools-extra] r181029 - Generate input files from within unit test

Edwin Vane edwin.vane at intel.com
Fri May 3 09:30:56 PDT 2013


Author: revane
Date: Fri May  3 11:30:55 2013
New Revision: 181029

URL: http://llvm.org/viewvc/llvm-project?rev=181029&view=rev
Log:
Generate input files from within unit test

It is preferable for a unit test to be responsible for creating its own input
data instead of relying on checked-in data files. Now the IncludeExcludeTest
for cpp11-migrate does this.

- Removed old data files.
- Updated build system and lit files to remove references to old data files.


Removed:
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/
    clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg
Modified:
    clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt
    clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp
    clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile

Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt?rev=181029&r1=181028&r2=181029&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt Fri May  3 11:30:55 2013
@@ -16,6 +16,3 @@ target_link_libraries(Cpp11MigrateTests
   clangBasic
   clangASTMatchers
   )
-
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lit.local.cfg
-  ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)

Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp?rev=181029&r1=181028&r2=181029&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp Fri May  3 11:30:55 2013
@@ -1,6 +1,7 @@
 #include "Core/IncludeExcludeInfo.h"
 #include "gtest/gtest.h"
 #include "llvm/Support/Path.h"
+#include <fstream>
 
 TEST(IncludeExcludeTest, ParseString) {
   IncludeExcludeInfo IEManager;
@@ -29,30 +30,49 @@ TEST(IncludeExcludeTest, ParseString) {
   EXPECT_FALSE(IEManager.isFileIncluded("c/c2/c3/f.cpp"));
 }
 
-// The IncludeExcludeTest suite requires data files. The location of these
-// files must be provided in the 'DATADIR' environment variable.
-class IncludeExcludeFileTest : public ::testing::Test {
-public:
-  virtual void SetUp() {
-    DataDir = getenv("DATADIR");
-    if (DataDir == 0) {
-      FAIL()
-          << "IncludeExcludeFileTest requires the DATADIR environment variable "
-             "to be set.";
+// Utility for creating and filling files with data for IncludeExcludeFileTest
+// tests.
+struct InputFiles {
+
+  // This function uses fatal assertions. The caller is responsible for making
+  // sure fatal assertions propagate.
+  void CreateFiles(bool UnixMode) {
+    IncludeDataPath = llvm::sys::Path::GetTemporaryDirectory();
+    ExcludeDataPath = IncludeDataPath;
+
+    ASSERT_FALSE(IncludeDataPath.createTemporaryFileOnDisk());
+    std::ofstream IncludeDataFile(IncludeDataPath.c_str());
+    ASSERT_TRUE(IncludeDataFile.good());
+    for (unsigned i = 0; i < sizeof(IncludeData)/sizeof(char*); ++i) {
+      IncludeDataFile << IncludeData[i] << (UnixMode ? "\n" : "\r\n");
+    }
+
+    ASSERT_FALSE(ExcludeDataPath.createTemporaryFileOnDisk());
+    std::ofstream ExcludeDataFile(ExcludeDataPath.c_str());
+    ASSERT_TRUE(ExcludeDataFile.good());
+    for (unsigned i = 0; i < sizeof(ExcludeData)/sizeof(char*); ++i) {
+      ExcludeDataFile << ExcludeData[i] << (UnixMode ? "\n" : "\r\n");;
     }
   }
 
-  const char *DataDir;
+  static const char *IncludeData[3];
+  static const char *ExcludeData[4];
+
+  llvm::sys::Path IncludeDataPath;
+  llvm::sys::Path ExcludeDataPath;
 };
 
-TEST_F(IncludeExcludeFileTest, UNIXFile) {
-  llvm::SmallString<128> IncludeData(DataDir);
-  llvm::SmallString<128> ExcludeData(IncludeData);
-  llvm::sys::path::append(IncludeData, "IncludeData.in");
-  llvm::sys::path::append(ExcludeData, "ExcludeData.in");
+const char *InputFiles::IncludeData[3] = { "a", "b/b2", "c/c2" };
+const char *InputFiles::ExcludeData[4] = { "a/af.cpp", "a/a2", "b/b2/b2f.cpp",
+                                           "c/c2" };
+
+TEST(IncludeExcludeFileTest, UNIXFile) {
+  InputFiles UnixFiles;
+  ASSERT_NO_FATAL_FAILURE(UnixFiles.CreateFiles(/* UnixMode= */true));
 
   IncludeExcludeInfo IEManager;
-  llvm::error_code Err = IEManager.readListFromFile(IncludeData, ExcludeData);
+  llvm::error_code Err = IEManager.readListFromFile(
+      UnixFiles.IncludeDataPath.c_str(), UnixFiles.ExcludeDataPath.c_str());
 
   ASSERT_EQ(Err, llvm::error_code::success());
 
@@ -61,14 +81,13 @@ TEST_F(IncludeExcludeFileTest, UNIXFile)
   EXPECT_FALSE(IEManager.isFileIncluded("a/af.cpp"));
 }
 
-TEST_F(IncludeExcludeFileTest, DOSFile) {
-  llvm::SmallString<128> IncludeData(DataDir);
-  llvm::SmallString<128> ExcludeData(IncludeData);
-  llvm::sys::path::append(IncludeData, "IncludeDataCRLF.in");
-  llvm::sys::path::append(ExcludeData, "ExcludeDataCRLF.in");
+TEST(IncludeExcludeFileTest, DOSFile) {
+  InputFiles DOSFiles;
+  ASSERT_NO_FATAL_FAILURE(DOSFiles.CreateFiles(/* UnixMode= */false));
 
   IncludeExcludeInfo IEManager;
-  llvm::error_code Err = IEManager.readListFromFile(IncludeData, ExcludeData);
+  llvm::error_code Err = IEManager.readListFromFile(
+      DOSFiles.IncludeDataPath.c_str(), DOSFiles.ExcludeDataPath.c_str());
 
   ASSERT_EQ(Err, llvm::error_code::success());
 

Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile?rev=181029&r1=181028&r2=181029&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile (original)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile Fri May  3 11:30:55 2013
@@ -22,8 +22,3 @@ include $(CLANG_LEVEL)/Makefile
 MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1
 CPP.Flags += -I$(PROJ_SRC_DIR)/../../cpp11-migrate
 include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
-
-$(PROJ_OBJ_DIR)/lit.local.cfg: $(PROJ_SRC_DIR)/lit.local.cfg
-	@cp $< $@
-
-all:: $(PROJ_OBJ_DIR)/lit.local.cfg

Removed: clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg?rev=181028&view=auto
==============================================================================
--- clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg (original)
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg (removed)
@@ -1,4 +0,0 @@
-# Some tests require access to data files which are stored in the 'Data'
-# subdirectory. This environment variable indicates where to find those files.
-config.environment['DATADIR'] = os.path.normpath(os.path.join(config.extra_tools_src_dir,
-                                                              'cpp11-migrate', 'Data'))





More information about the cfe-commits mailing list