Support: Add PathV2 implementation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120329 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/unittests/System/Path.cpp b/unittests/System/Path.cpp
index 2b0817f..daeb017 100644
--- a/unittests/System/Path.cpp
+++ b/unittests/System/Path.cpp
@@ -7,15 +7,85 @@
 //
 //===----------------------------------------------------------------------===//
 
-// For now, just test that the header file parses.
 #include "llvm/Support/PathV2.h"
 
 #include "gtest/gtest.h"
 
+using namespace llvm;
+
 namespace {
 
 TEST(System, Path) {
-  // TODO: Add tests!
+  SmallVector<StringRef, 40> paths;
+  paths.push_back("");
+  paths.push_back(".");
+  paths.push_back("..");
+  paths.push_back("foo");
+  paths.push_back("/");
+  paths.push_back("/foo");
+  paths.push_back("foo/");
+  paths.push_back("/foo/");
+  paths.push_back("foo/bar");
+  paths.push_back("/foo/bar");
+  paths.push_back("//net");
+  paths.push_back("//net/foo");
+  paths.push_back("///foo///");
+  paths.push_back("///foo///bar");
+  paths.push_back("/.");
+  paths.push_back("./");
+  paths.push_back("/..");
+  paths.push_back("../");
+  paths.push_back("foo/.");
+  paths.push_back("foo/..");
+  paths.push_back("foo/./");
+  paths.push_back("foo/./bar");
+  paths.push_back("foo/..");
+  paths.push_back("foo/../");
+  paths.push_back("foo/../bar");
+  paths.push_back("c:");
+  paths.push_back("c:/");
+  paths.push_back("c:foo");
+  paths.push_back("c:/foo");
+  paths.push_back("c:foo/");
+  paths.push_back("c:/foo/");
+  paths.push_back("c:/foo/bar");
+  paths.push_back("prn:");
+  paths.push_back("c:\\");
+  paths.push_back("c:foo");
+  paths.push_back("c:\\foo");
+  paths.push_back("c:foo\\");
+  paths.push_back("c:\\foo\\");
+  paths.push_back("c:\\foo/");
+  paths.push_back("c:/foo\\bar");
+
+  for (SmallVector<StringRef, 40>::const_iterator i = paths.begin(),
+                                                  e = paths.end();
+                                                  i != e;
+                                                  ++i) {
+    outs() << *i << " =>\n    Iteration: [";
+    for (sys::path::const_iterator ci = sys::path::begin(*i),
+                                   ce = sys::path::end(*i);
+                                   ci != ce;
+                                   ++ci) {
+      outs() << *ci << ',';
+    }
+    outs() << "]\n";
+
+    StringRef res;
+    SmallString<16> temp_store;
+    if (error_code ec = sys::path::root_path(*i, res)) ASSERT_FALSE(ec.message().c_str());
+    outs() << "    root_path: " << res << '\n';
+    if (error_code ec = sys::path::root_name(*i, res)) ASSERT_FALSE(ec.message().c_str());
+    outs() << "    root_name: " << res << '\n';
+    if (error_code ec = sys::path::root_directory(*i, res)) ASSERT_FALSE(ec.message().c_str());
+    outs() << "    root_directory: " << res << '\n';
+
+    temp_store = *i;
+    if (error_code ec = sys::path::make_absolute(temp_store)) ASSERT_FALSE(ec.message().c_str());
+    outs() << "    make_absolute: " << temp_store << '\n';
+
+    outs().flush();
+  }
 }
 
 } // anonymous namespace