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