diff options
Diffstat (limited to 'unittests/Support/Path.cpp')
-rw-r--r-- | unittests/Support/Path.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/unittests/Support/Path.cpp b/unittests/Support/Path.cpp new file mode 100644 index 0000000000..8be45de76b --- /dev/null +++ b/unittests/Support/Path.cpp @@ -0,0 +1,91 @@ +//===- llvm/unittest/Support/Path.cpp - Path tests ------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Support/PathV2.h" + +#include "gtest/gtest.h" + +using namespace llvm; + +namespace { + +TEST(Support, Path) { + 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 |