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.



git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@181029 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/unittests/cpp11-migrate/CMakeLists.txt b/unittests/cpp11-migrate/CMakeLists.txt
index e669840..bb0bfb1 100644
--- a/unittests/cpp11-migrate/CMakeLists.txt
+++ b/unittests/cpp11-migrate/CMakeLists.txt
@@ -16,6 +16,3 @@
   clangBasic
   clangASTMatchers
   )
-
-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lit.local.cfg
-  ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
diff --git a/unittests/cpp11-migrate/Data/ExcludeData.in b/unittests/cpp11-migrate/Data/ExcludeData.in
deleted file mode 100644
index c2bce59..0000000
--- a/unittests/cpp11-migrate/Data/ExcludeData.in
+++ /dev/null
@@ -1,4 +0,0 @@
-a/af.cpp
-a/a2
-b/b2/b2f.cpp
-c/c2
diff --git a/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in b/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in
deleted file mode 100644
index 1c8bca2..0000000
--- a/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in
+++ /dev/null
@@ -1,4 +0,0 @@
-a/af.cpp

-a/a2

-b/b2/b2f.cpp

-c/c2

diff --git a/unittests/cpp11-migrate/Data/IncludeData.in b/unittests/cpp11-migrate/Data/IncludeData.in
deleted file mode 100644
index 7753bac..0000000
--- a/unittests/cpp11-migrate/Data/IncludeData.in
+++ /dev/null
@@ -1,3 +0,0 @@
-a
-b/b2
-c/c2
diff --git a/unittests/cpp11-migrate/Data/IncludeDataCRLF.in b/unittests/cpp11-migrate/Data/IncludeDataCRLF.in
deleted file mode 100644
index 9f004ef..0000000
--- a/unittests/cpp11-migrate/Data/IncludeDataCRLF.in
+++ /dev/null
@@ -1,3 +0,0 @@
-a

-b/b2

-c/c2

diff --git a/unittests/cpp11-migrate/IncludeExcludeTest.cpp b/unittests/cpp11-migrate/IncludeExcludeTest.cpp
index 4be92f7..aba8121 100644
--- a/unittests/cpp11-migrate/IncludeExcludeTest.cpp
+++ b/unittests/cpp11-migrate/IncludeExcludeTest.cpp
@@ -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 @@
   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 @@
   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());
 
diff --git a/unittests/cpp11-migrate/Makefile b/unittests/cpp11-migrate/Makefile
index 1ea8b93..4779c49 100644
--- a/unittests/cpp11-migrate/Makefile
+++ b/unittests/cpp11-migrate/Makefile
@@ -22,8 +22,3 @@
 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
diff --git a/unittests/cpp11-migrate/lit.local.cfg b/unittests/cpp11-migrate/lit.local.cfg
deleted file mode 100644
index ffb4ec2..0000000
--- a/unittests/cpp11-migrate/lit.local.cfg
+++ /dev/null
@@ -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'))