Path.cpp revision 5265f22f4558f376dece4744b3fe2ae1c637d223
1//===- llvm/unittest/Support/Path.cpp - Path tests ------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "llvm/Support/PathV2.h" 11 12#include "gtest/gtest.h" 13 14using namespace llvm; 15 16namespace { 17 18TEST(Support, Path) { 19 SmallVector<StringRef, 40> paths; 20 paths.push_back(""); 21 paths.push_back("."); 22 paths.push_back(".."); 23 paths.push_back("foo"); 24 paths.push_back("/"); 25 paths.push_back("/foo"); 26 paths.push_back("foo/"); 27 paths.push_back("/foo/"); 28 paths.push_back("foo/bar"); 29 paths.push_back("/foo/bar"); 30 paths.push_back("//net"); 31 paths.push_back("//net/foo"); 32 paths.push_back("///foo///"); 33 paths.push_back("///foo///bar"); 34 paths.push_back("/."); 35 paths.push_back("./"); 36 paths.push_back("/.."); 37 paths.push_back("../"); 38 paths.push_back("foo/."); 39 paths.push_back("foo/.."); 40 paths.push_back("foo/./"); 41 paths.push_back("foo/./bar"); 42 paths.push_back("foo/.."); 43 paths.push_back("foo/../"); 44 paths.push_back("foo/../bar"); 45 paths.push_back("c:"); 46 paths.push_back("c:/"); 47 paths.push_back("c:foo"); 48 paths.push_back("c:/foo"); 49 paths.push_back("c:foo/"); 50 paths.push_back("c:/foo/"); 51 paths.push_back("c:/foo/bar"); 52 paths.push_back("prn:"); 53 paths.push_back("c:\\"); 54 paths.push_back("c:foo"); 55 paths.push_back("c:\\foo"); 56 paths.push_back("c:foo\\"); 57 paths.push_back("c:\\foo\\"); 58 paths.push_back("c:\\foo/"); 59 paths.push_back("c:/foo\\bar"); 60 61 for (SmallVector<StringRef, 40>::const_iterator i = paths.begin(), 62 e = paths.end(); 63 i != e; 64 ++i) { 65 outs() << *i << " =>\n Iteration: ["; 66 for (sys::path::const_iterator ci = sys::path::begin(*i), 67 ce = sys::path::end(*i); 68 ci != ce; 69 ++ci) { 70 outs() << *ci << ','; 71 } 72 outs() << "]\n"; 73 74 outs() << " Reverse Iteration: ["; 75 for (sys::path::reverse_iterator ci = sys::path::rbegin(*i), 76 ce = sys::path::rend(*i); 77 ci != ce; 78 ++ci) { 79 outs() << *ci << ','; 80 } 81 outs() << "]\n"; 82 83 StringRef res; 84 SmallString<16> temp_store; 85 if (error_code ec = sys::path::root_path(*i, res)) 86 ASSERT_FALSE(ec.message().c_str()); 87 outs() << " root_path: " << res << '\n'; 88 if (error_code ec = sys::path::root_name(*i, res)) 89 ASSERT_FALSE(ec.message().c_str()); 90 outs() << " root_name: " << res << '\n'; 91 if (error_code ec = sys::path::root_directory(*i, res)) 92 ASSERT_FALSE(ec.message().c_str()); 93 outs() << " root_directory: " << res << '\n'; 94 if (error_code ec = sys::path::parent_path(*i, res)) 95 ASSERT_FALSE(ec.message().c_str()); 96 outs() << " parent_path: " << res << '\n'; 97 if (error_code ec = sys::path::filename(*i, res)) 98 ASSERT_FALSE(ec.message().c_str()); 99 outs() << " filename: " << res << '\n'; 100 if (error_code ec = sys::path::stem(*i, res)) 101 ASSERT_FALSE(ec.message().c_str()); 102 outs() << " stem: " << res << '\n'; 103 if (error_code ec = sys::path::extension(*i, res)) 104 ASSERT_FALSE(ec.message().c_str()); 105 outs() << " stem: " << res << '\n'; 106 107 temp_store = *i; 108 if (error_code ec = sys::path::make_absolute(temp_store)) 109 ASSERT_FALSE(ec.message().c_str()); 110 outs() << " make_absolute: " << temp_store << '\n'; 111 temp_store = *i; 112 if (error_code ec = sys::path::remove_filename(temp_store)) 113 ASSERT_FALSE(ec.message().c_str()); 114 outs() << " remove_filename: " << temp_store << '\n'; 115 temp_store = *i; 116 if (error_code ec = sys::path::replace_extension(temp_store, "ext")) 117 ASSERT_FALSE(ec.message().c_str()); 118 outs() << " replace_extension: " << temp_store << '\n'; 119 StringRef stem, ext; 120 if (error_code ec = sys::path::stem( 121 StringRef(temp_store.begin(), temp_store.size()), stem)) 122 ASSERT_FALSE(ec.message().c_str()); 123 outs() << " stem: " << stem << '\n'; 124 if (error_code ec = sys::path::extension( 125 StringRef(temp_store.begin(), temp_store.size()), ext)) 126 ASSERT_FALSE(ec.message().c_str()); 127 outs() << " extension: " << ext << '\n'; 128 EXPECT_EQ(*(--sys::path::end( 129 StringRef(temp_store.begin(), temp_store.size()))), (stem + ext).str()); 130 if (error_code ec = sys::path::native(*i, temp_store)) 131 ASSERT_FALSE(ec.message().c_str()); 132 outs() << " native: " << temp_store << '\n'; 133 134 outs().flush(); 135 } 136} 137 138} // anonymous namespace 139