<div dir="ltr">I'd be interested whether we can find a simpler solution than the DATADIR magic :)<div><br></div><div style>In this specific case, where the test is not actually run with lit // RUN lines, but just a simple unit test, why not have the test data created from the unit test so it stays self contained?</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 2, 2013 at 9:02 PM, Edwin Vane <span dir="ltr"><<a href="mailto:edwin.vane@intel.com" target="_blank">edwin.vane@intel.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: revane<br>
Date: Thu May  2 14:02:02 2013<br>
New Revision: 180939<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=180939&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=180939&view=rev</a><br>
Log:<br>
Add support to read include/exclude paths from file<br>
<br>
Files containing the list of paths to be included and excluded can now be<br>
specified through -include-from=<filename> and -exclude-from=<filename> command<br>
line options in cpp11-migrate.<br>
<br>
Added support for data files for cpp11-migrate unittests. The Cpp11MigrateTests<br>
executable just requires a DATADIR environment variable to be set which<br>
specifies the directory where data files are stored. This is handled<br>
automatically when using LIT.<br>
<br>
Author: Jack Yang <<a href="mailto:jack.yang@intel.com">jack.yang@intel.com</a>>, Edwin Vane <<a href="mailto:edwin.vane@intel.com">edwin.vane@intel.com</a>><br>
<br>
Added:<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg<br>
Modified:<br>
    clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp<br>
    clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h<br>
    clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp<br>
    clang-tools-extra/trunk/test/Unit/lit.cfg<br>
    clang-tools-extra/trunk/test/Unit/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp<br>
    clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile<br>
<br>
Modified: clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp (original)<br>
+++ clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.cpp Thu May  2 14:02:02 2013<br>
@@ -16,7 +16,9 @@<br>
 #include "IncludeExcludeInfo.h"<br>
 #include "llvm/Support/CommandLine.h"<br>
 #include "llvm/Support/FileSystem.h"<br>
+#include "llvm/Support/MemoryBuffer.h"<br>
 #include "llvm/Support/Path.h"<br>
+#include "llvm/Support/raw_ostream.h"<br>
<br>
 using namespace llvm;<br>
<br>
@@ -46,25 +48,59 @@ bool fileHasPathPrefix(StringRef File, S<br>
   return true;<br>
 }<br>
<br>
-/// \brief Helper function to parse a string of comma seperated paths into<br>
+/// \brief Helper function to tokenize a string of paths and populate<br>
 /// the vector.<br>
-void parseCLInput(StringRef Line, std::vector<std::string> &List) {<br>
+error_code parseCLInput(StringRef Line, std::vector<std::string> &List,<br>
+                        StringRef Separator) {<br>
   SmallVector<StringRef, 32> Tokens;<br>
-  Line.split(Tokens, ",", /*MaxSplit=*/-1, /*KeepEmpty=*/false);<br>
+  Line.split(Tokens, Separator, /*MaxSplit=*/ -1, /*KeepEmpty=*/ false);<br>
   for (SmallVectorImpl<StringRef>::iterator I = Tokens.begin(),<br>
                                             E = Tokens.end();<br>
        I != E; ++I) {<br>
     // Convert each path to its absolute path.<br>
-    SmallString<64> AbsolutePath = *I;<br>
-    sys::fs::make_absolute(AbsolutePath);<br>
+    SmallString<64> AbsolutePath = I->rtrim();<br>
+    if (error_code Err = sys::fs::make_absolute(AbsolutePath))<br>
+      return Err;<br>
     List.push_back(std::string(AbsolutePath.str()));<br>
   }<br>
+  return error_code::success();<br>
 }<br>
 } // end anonymous namespace<br>
<br>
-IncludeExcludeInfo::IncludeExcludeInfo(StringRef Include, StringRef Exclude) {<br>
-  parseCLInput(Include, IncludeList);<br>
-  parseCLInput(Exclude, ExcludeList);<br>
+error_code IncludeExcludeInfo::readListFromString(StringRef IncludeString,<br>
+                                                  StringRef ExcludeString) {<br>
+  if (error_code Err = parseCLInput(IncludeString, IncludeList,<br>
+                                    /*Separator=*/ ","))<br>
+    return Err;<br>
+  if (error_code Err = parseCLInput(ExcludeString, ExcludeList,<br>
+                                    /*Separator=*/ ","))<br>
+    return Err;<br>
+  return error_code::success();<br>
+}<br>
+<br>
+error_code IncludeExcludeInfo::readListFromFile(StringRef IncludeListFile,<br>
+                                                StringRef ExcludeListFile) {<br>
+  if (!IncludeListFile.empty()) {<br>
+    OwningPtr<MemoryBuffer> FileBuf;<br>
+    if (error_code Err = MemoryBuffer::getFile(IncludeListFile, FileBuf)) {<br>
+      errs() << "Unable to read from include file.\n";<br>
+      return Err;<br>
+    }<br>
+    if (error_code Err = parseCLInput(FileBuf->getBuffer(), IncludeList,<br>
+                                      /*Separator=*/ "\n"))<br>
+      return Err;<br>
+  }<br>
+  if (!ExcludeListFile.empty()) {<br>
+    OwningPtr<MemoryBuffer> FileBuf;<br>
+    if (error_code Err = MemoryBuffer::getFile(ExcludeListFile, FileBuf)) {<br>
+      errs() << "Unable to read from exclude file.\n";<br>
+      return Err;<br>
+    }<br>
+    if (error_code Err = parseCLInput(FileBuf->getBuffer(), ExcludeList,<br>
+                                      /*Separator=*/ "\n"))<br>
+      return Err;<br>
+  }<br>
+  return error_code::success();<br>
 }<br>
<br>
 bool IncludeExcludeInfo::isFileIncluded(StringRef FilePath) {<br>
<br>
Modified: clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h (original)<br>
+++ clang-tools-extra/trunk/cpp11-migrate/Core/IncludeExcludeInfo.h Thu May  2 14:02:02 2013<br>
@@ -16,18 +16,30 @@<br>
 #define LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_INCLUDEEXCLUDEINFO_H<br>
<br>
 #include "llvm/ADT/StringRef.h"<br>
+#include "llvm/Support/system_error.h"<br>
 #include <vector><br>
<br>
 /// \brief Class encapsulating the handling of include and exclude paths<br>
 /// provided by the user through command line options.<br>
 class IncludeExcludeInfo {<br>
 public:<br>
-  /// \brief Determine if the given file is safe to transform.<br>
+  /// \brief Read and parse a comma-seperated lists of paths from<br>
+  /// \a IncludeString and \a ExcludeString.<br>
   ///<br>
-  /// \a Include and \a Exclude must be formatted as a comma-seperated list.<br>
-  IncludeExcludeInfo(llvm::StringRef Include, llvm::StringRef Exclude);<br>
+  /// Returns error_code::success() on successful parse of the strings or<br>
+  /// an error_code indicating the encountered error.<br>
+  llvm::error_code readListFromString(llvm::StringRef IncludeString,<br>
+                                      llvm::StringRef ExcludeString);<br>
<br>
-  /// \brief Determine if the given filepath is in the list of include paths but<br>
+  /// \brief Read and parse the lists of paths from \a IncludeListFile<br>
+  /// and \a ExcludeListFile. Each file should contain one path per line.<br>
+  ///<br>
+  /// Returns error_code::success() on successful read and parse of both files<br>
+  /// or an error_code indicating the encountered error.<br>
+  llvm::error_code readListFromFile(llvm::StringRef IncludeListFile,<br>
+                                    llvm::StringRef ExcludeListFile);<br>
+<br>
+  /// \brief Determine if the given path is in the list of include paths but<br>
   /// not in the list of exclude paths.<br>
   bool isFileIncluded(llvm::StringRef FilePath);<br>
<br>
<br>
Modified: clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp (original)<br>
+++ clang-tools-extra/trunk/cpp11-migrate/tool/Cpp11Migrate.cpp Thu May  2 14:02:02 2013<br>
@@ -54,12 +54,20 @@ SummaryMode("summary", cl::desc("Print t<br>
 // options are implemented in the tool.<br>
 static cl::opt<std::string><br>
 IncludePaths("include", cl::Hidden,<br>
-             cl::desc("Comma seperated list of filepaths to consider to be "<br>
+             cl::desc("Comma seperated list of paths to consider to be "<br>
                       "transformed"));<br>
 static cl::opt<std::string><br>
 ExcludePaths("exclude", cl::Hidden,<br>
-             cl::desc("Comma seperated list of filepaths that can not "<br>
+             cl::desc("Comma seperated list of paths that can not "<br>
                       "be transformed"));<br>
+static cl::opt<std::string><br>
+IncludeFromFile("include-from", cl::Hidden, cl::value_desc("filename"),<br>
+                cl::desc("File containing a list of paths to consider to "<br>
+                         "be transformed"));<br>
+static cl::opt<std::string><br>
+ExcludeFromFile("exclude-from", cl::Hidden, cl::value_desc("filename"),<br>
+                cl::desc("File containing a list of paths that can not be "<br>
+                         "transforms"));<br>
<br>
 class EndSyntaxArgumentsAdjuster : public ArgumentsAdjuster {<br>
   CommandLineArguments Adjust(const CommandLineArguments &Args) {<br>
<br>
Modified: clang-tools-extra/trunk/test/Unit/lit.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/Unit/lit.cfg?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/Unit/lit.cfg?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/test/Unit/lit.cfg (original)<br>
+++ clang-tools-extra/trunk/test/Unit/lit.cfg Thu May  2 14:02:02 2013<br>
@@ -7,7 +7,7 @@ config.suffixes = [] # Seems not to matt<br>
 # test binaries are built.<br>
 extra_tools_obj_dir = getattr(config, 'extra_tools_obj_dir', None)<br>
 if extra_tools_obj_dir is not None:<br>
-  config.test_source_root = os.path.join(extra_tools_obj_dir, 'unittests')<br>
+  config.test_source_root = extra_tools_obj_dir<br>
   config.test_exec_root = config.test_source_root<br>
<br>
 # All GoogleTests are named to have 'Tests' as their suffix. The '.' option is<br>
<br>
Modified: clang-tools-extra/trunk/test/Unit/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/Unit/lit.site.cfg.in?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/Unit/lit.site.cfg.in?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/test/Unit/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a> (original)<br>
+++ clang-tools-extra/trunk/test/Unit/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a> Thu May  2 14:02:02 2013<br>
@@ -1,6 +1,13 @@<br>
 ## Autogenerated by LLVM/Clang configuration.<br>
 # Do not edit!<br>
-config.extra_tools_obj_dir = "@CLANG_TOOLS_BINARY_DIR@"<br>
+config.extra_tools_obj_dir = "@CLANG_TOOLS_BINARY_DIR@/unittests"<br>
+config.extra_tools_src_dir = "@CLANG_TOOLS_SOURCE_DIR@/unittests"<br>
 config.target_triple = "@TARGET_TRIPLE@"<br>
<br>
+# Make sure any custom vars defined above that are required in lit.local.cfg<br>
+# files are made available.<br>
+def on_clone(parent, clone, path):<br>
+  clone.extra_tools_src_dir = parent.extra_tools_src_dir<br>
+<br>
+config.on_clone = on_clone<br>
 lit.load_config(config, "@CLANG_TOOLS_SOURCE_DIR@/test/Unit/lit.cfg")<br>
<br>
Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt (original)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/CMakeLists.txt Thu May  2 14:02:02 2013<br>
@@ -17,3 +17,5 @@ target_link_libraries(Cpp11MigrateTests<br>
   clangASTMatchers<br>
   )<br>
<br>
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lit.local.cfg<br>
+  ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)<br>
<br>
Added: clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in?rev=180939&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in?rev=180939&view=auto</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in (added)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeData.in Thu May  2 14:02:02 2013<br>
@@ -0,0 +1,4 @@<br>
+a/af.cpp<br>
+a/a2<br>
+b/b2/b2f.cpp<br>
+c/c2<br>
<br>
Added: clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in?rev=180939&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in?rev=180939&view=auto</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in (added)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Data/ExcludeDataCRLF.in Thu May  2 14:02:02 2013<br>
@@ -0,0 +1,4 @@<br>
+a/af.cpp<br>
+a/a2<br>
+b/b2/b2f.cpp<br>
+c/c2<br>
<br>
Added: clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in?rev=180939&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in?rev=180939&view=auto</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in (added)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeData.in Thu May  2 14:02:02 2013<br>
@@ -0,0 +1,3 @@<br>
+a<br>
+b/b2<br>
+c/c2<br>
<br>
Added: clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in?rev=180939&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in?rev=180939&view=auto</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in (added)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Data/IncludeDataCRLF.in Thu May  2 14:02:02 2013<br>
@@ -0,0 +1,3 @@<br>
+a<br>
+b/b2<br>
+c/c2<br>
<br>
Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp (original)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/IncludeExcludeTest.cpp Thu May  2 14:02:02 2013<br>
@@ -1,24 +1,25 @@<br>
 #include "Core/IncludeExcludeInfo.h"<br>
 #include "gtest/gtest.h"<br>
+#include "llvm/Support/Path.h"<br>
<br>
-IncludeExcludeInfo IEManager(/*include=*/ "a,b/b2,c/c2/c3",<br>
-                             /*exclude=*/ "a/af.cpp,a/a2,b/b2/b2f.cpp,c/c2/c3");<br>
+TEST(IncludeExcludeTest, ParseString) {<br>
+  IncludeExcludeInfo IEManager;<br>
+  llvm::error_code Err = IEManager.readListFromString(<br>
+      /*include=*/ "a,b/b2,c/c2",<br>
+      /*exclude=*/ "a/af.cpp,a/a2,b/b2/b2f.cpp,c/c2");<br>
+<br>
+  ASSERT_EQ(Err, llvm::error_code::success());<br>
<br>
-TEST(IncludeExcludeTest, NoMatchOnIncludeList) {<br>
   // If the file does not appear on the include list then it is not safe to<br>
   // transform. Files are not safe to transform by default.<br>
   EXPECT_FALSE(IEManager.isFileIncluded("f.cpp"));<br>
   EXPECT_FALSE(IEManager.isFileIncluded("b/dir/f.cpp"));<br>
-}<br>
<br>
-TEST(IncludeExcludeTest, MatchOnIncludeList) {<br>
   // If the file appears on only the include list then it is safe to transform.<br>
   EXPECT_TRUE(IEManager.isFileIncluded("a/f.cpp"));<br>
   EXPECT_TRUE(IEManager.isFileIncluded("a/dir/f.cpp"));<br>
   EXPECT_TRUE(IEManager.isFileIncluded("b/b2/f.cpp"));<br>
-}<br>
<br>
-TEST(IncludeExcludeTest, MatchOnBothLists) {<br>
   // If the file appears on both the include or exclude list then it is not<br>
   // safe to transform.<br>
   EXPECT_FALSE(IEManager.isFileIncluded("a/af.cpp"));<br>
@@ -27,3 +28,51 @@ TEST(IncludeExcludeTest, MatchOnBothList<br>
   EXPECT_FALSE(IEManager.isFileIncluded("b/b2/b2f.cpp"));<br>
   EXPECT_FALSE(IEManager.isFileIncluded("c/c2/c3/f.cpp"));<br>
 }<br>
+<br>
+// The IncludeExcludeTest suite requires data files. The location of these<br>
+// files must be provided in the 'DATADIR' environment variable.<br>
+class IncludeExcludeFileTest : public ::testing::Test {<br>
+public:<br>
+  virtual void SetUp() {<br>
+    DataDir = getenv("DATADIR");<br>
+    if (DataDir == 0) {<br>
+      FAIL()<br>
+          << "IncludeExcludeFileTest requires the DATADIR environment variable "<br>
+             "to be set.";<br>
+    }<br>
+  }<br>
+<br>
+  const char *DataDir;<br>
+};<br>
+<br>
+TEST_F(IncludeExcludeFileTest, UNIXFile) {<br>
+  llvm::SmallString<128> IncludeData(DataDir);<br>
+  llvm::SmallString<128> ExcludeData(IncludeData);<br>
+  llvm::sys::path::append(IncludeData, "IncludeData.in");<br>
+  llvm::sys::path::append(ExcludeData, "ExcludeData.in");<br>
+<br>
+  IncludeExcludeInfo IEManager;<br>
+  llvm::error_code Err = IEManager.readListFromFile(IncludeData, ExcludeData);<br>
+<br>
+  ASSERT_EQ(Err, llvm::error_code::success());<br>
+<br>
+  EXPECT_FALSE(IEManager.isFileIncluded("f.cpp"));<br>
+  EXPECT_TRUE(IEManager.isFileIncluded("a/f.cpp"));<br>
+  EXPECT_FALSE(IEManager.isFileIncluded("a/af.cpp"));<br>
+}<br>
+<br>
+TEST_F(IncludeExcludeFileTest, DOSFile) {<br>
+  llvm::SmallString<128> IncludeData(DataDir);<br>
+  llvm::SmallString<128> ExcludeData(IncludeData);<br>
+  llvm::sys::path::append(IncludeData, "IncludeDataCRLF.in");<br>
+  llvm::sys::path::append(ExcludeData, "ExcludeDataCRLF.in");<br>
+<br>
+  IncludeExcludeInfo IEManager;<br>
+  llvm::error_code Err = IEManager.readListFromFile(IncludeData, ExcludeData);<br>
+<br>
+  ASSERT_EQ(Err, llvm::error_code::success());<br>
+<br>
+  EXPECT_FALSE(IEManager.isFileIncluded("f.cpp"));<br>
+  EXPECT_TRUE(IEManager.isFileIncluded("a/f.cpp"));<br>
+  EXPECT_FALSE(IEManager.isFileIncluded("a/af.cpp"));<br>
+}<br>
<br>
Modified: clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile?rev=180939&r1=180938&r2=180939&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile?rev=180939&r1=180938&r2=180939&view=diff</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile (original)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/Makefile Thu May  2 14:02:02 2013<br>
@@ -22,3 +22,8 @@ include $(CLANG_LEVEL)/Makefile<br>
 MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1<br>
 CPP.Flags += -I$(PROJ_SRC_DIR)/../../cpp11-migrate<br>
 include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest<br>
+<br>
+$(PROJ_OBJ_DIR)/lit.local.cfg: $(PROJ_SRC_DIR)/lit.local.cfg<br>
+       @cp $< $@<br>
+<br>
+all:: $(PROJ_OBJ_DIR)/lit.local.cfg<br>
<br>
Added: clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg?rev=180939&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg?rev=180939&view=auto</a><br>

==============================================================================<br>
--- clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg (added)<br>
+++ clang-tools-extra/trunk/unittests/cpp11-migrate/lit.local.cfg Thu May  2 14:02:02 2013<br>
@@ -0,0 +1,4 @@<br>
+# Some tests require access to data files which are stored in the 'Data'<br>
+# subdirectory. This environment variable indicates where to find those files.<br>
+config.environment['DATADIR'] = os.path.normpath(os.path.join(config.extra_tools_src_dir,<br>
+                                                              'cpp11-migrate', 'Data'))<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>