1*3ef91c55SMichael J. Spencer //===- llvm/unittest/Support/Path.cpp - Path tests ------------------------===//
2*3ef91c55SMichael J. Spencer //
3*3ef91c55SMichael J. Spencer //                     The LLVM Compiler Infrastructure
4*3ef91c55SMichael J. Spencer //
5*3ef91c55SMichael J. Spencer // This file is distributed under the University of Illinois Open Source
6*3ef91c55SMichael J. Spencer // License. See LICENSE.TXT for details.
7*3ef91c55SMichael J. Spencer //
8*3ef91c55SMichael J. Spencer //===----------------------------------------------------------------------===//
9*3ef91c55SMichael J. Spencer 
10*3ef91c55SMichael J. Spencer #include "llvm/Support/PathV2.h"
11*3ef91c55SMichael J. Spencer 
12*3ef91c55SMichael J. Spencer #include "gtest/gtest.h"
13*3ef91c55SMichael J. Spencer 
14*3ef91c55SMichael J. Spencer using namespace llvm;
15*3ef91c55SMichael J. Spencer 
16*3ef91c55SMichael J. Spencer namespace {
17*3ef91c55SMichael J. Spencer 
18*3ef91c55SMichael J. Spencer TEST(Support, Path) {
19*3ef91c55SMichael J. Spencer   SmallVector<StringRef, 40> paths;
20*3ef91c55SMichael J. Spencer   paths.push_back("");
21*3ef91c55SMichael J. Spencer   paths.push_back(".");
22*3ef91c55SMichael J. Spencer   paths.push_back("..");
23*3ef91c55SMichael J. Spencer   paths.push_back("foo");
24*3ef91c55SMichael J. Spencer   paths.push_back("/");
25*3ef91c55SMichael J. Spencer   paths.push_back("/foo");
26*3ef91c55SMichael J. Spencer   paths.push_back("foo/");
27*3ef91c55SMichael J. Spencer   paths.push_back("/foo/");
28*3ef91c55SMichael J. Spencer   paths.push_back("foo/bar");
29*3ef91c55SMichael J. Spencer   paths.push_back("/foo/bar");
30*3ef91c55SMichael J. Spencer   paths.push_back("//net");
31*3ef91c55SMichael J. Spencer   paths.push_back("//net/foo");
32*3ef91c55SMichael J. Spencer   paths.push_back("///foo///");
33*3ef91c55SMichael J. Spencer   paths.push_back("///foo///bar");
34*3ef91c55SMichael J. Spencer   paths.push_back("/.");
35*3ef91c55SMichael J. Spencer   paths.push_back("./");
36*3ef91c55SMichael J. Spencer   paths.push_back("/..");
37*3ef91c55SMichael J. Spencer   paths.push_back("../");
38*3ef91c55SMichael J. Spencer   paths.push_back("foo/.");
39*3ef91c55SMichael J. Spencer   paths.push_back("foo/..");
40*3ef91c55SMichael J. Spencer   paths.push_back("foo/./");
41*3ef91c55SMichael J. Spencer   paths.push_back("foo/./bar");
42*3ef91c55SMichael J. Spencer   paths.push_back("foo/..");
43*3ef91c55SMichael J. Spencer   paths.push_back("foo/../");
44*3ef91c55SMichael J. Spencer   paths.push_back("foo/../bar");
45*3ef91c55SMichael J. Spencer   paths.push_back("c:");
46*3ef91c55SMichael J. Spencer   paths.push_back("c:/");
47*3ef91c55SMichael J. Spencer   paths.push_back("c:foo");
48*3ef91c55SMichael J. Spencer   paths.push_back("c:/foo");
49*3ef91c55SMichael J. Spencer   paths.push_back("c:foo/");
50*3ef91c55SMichael J. Spencer   paths.push_back("c:/foo/");
51*3ef91c55SMichael J. Spencer   paths.push_back("c:/foo/bar");
52*3ef91c55SMichael J. Spencer   paths.push_back("prn:");
53*3ef91c55SMichael J. Spencer   paths.push_back("c:\\");
54*3ef91c55SMichael J. Spencer   paths.push_back("c:foo");
55*3ef91c55SMichael J. Spencer   paths.push_back("c:\\foo");
56*3ef91c55SMichael J. Spencer   paths.push_back("c:foo\\");
57*3ef91c55SMichael J. Spencer   paths.push_back("c:\\foo\\");
58*3ef91c55SMichael J. Spencer   paths.push_back("c:\\foo/");
59*3ef91c55SMichael J. Spencer   paths.push_back("c:/foo\\bar");
60*3ef91c55SMichael J. Spencer 
61*3ef91c55SMichael J. Spencer   for (SmallVector<StringRef, 40>::const_iterator i = paths.begin(),
62*3ef91c55SMichael J. Spencer                                                   e = paths.end();
63*3ef91c55SMichael J. Spencer                                                   i != e;
64*3ef91c55SMichael J. Spencer                                                   ++i) {
65*3ef91c55SMichael J. Spencer     outs() << *i << " =>\n    Iteration: [";
66*3ef91c55SMichael J. Spencer     for (sys::path::const_iterator ci = sys::path::begin(*i),
67*3ef91c55SMichael J. Spencer                                    ce = sys::path::end(*i);
68*3ef91c55SMichael J. Spencer                                    ci != ce;
69*3ef91c55SMichael J. Spencer                                    ++ci) {
70*3ef91c55SMichael J. Spencer       outs() << *ci << ',';
71*3ef91c55SMichael J. Spencer     }
72*3ef91c55SMichael J. Spencer     outs() << "]\n";
73*3ef91c55SMichael J. Spencer 
74*3ef91c55SMichael J. Spencer     StringRef res;
75*3ef91c55SMichael J. Spencer     SmallString<16> temp_store;
76*3ef91c55SMichael J. Spencer     if (error_code ec = sys::path::root_path(*i, res)) ASSERT_FALSE(ec.message().c_str());
77*3ef91c55SMichael J. Spencer     outs() << "    root_path: " << res << '\n';
78*3ef91c55SMichael J. Spencer     if (error_code ec = sys::path::root_name(*i, res)) ASSERT_FALSE(ec.message().c_str());
79*3ef91c55SMichael J. Spencer     outs() << "    root_name: " << res << '\n';
80*3ef91c55SMichael J. Spencer     if (error_code ec = sys::path::root_directory(*i, res)) ASSERT_FALSE(ec.message().c_str());
81*3ef91c55SMichael J. Spencer     outs() << "    root_directory: " << res << '\n';
82*3ef91c55SMichael J. Spencer 
83*3ef91c55SMichael J. Spencer     temp_store = *i;
84*3ef91c55SMichael J. Spencer     if (error_code ec = sys::path::make_absolute(temp_store)) ASSERT_FALSE(ec.message().c_str());
85*3ef91c55SMichael J. Spencer     outs() << "    make_absolute: " << temp_store << '\n';
86*3ef91c55SMichael J. Spencer 
87*3ef91c55SMichael J. Spencer     outs().flush();
88*3ef91c55SMichael J. Spencer   }
89*3ef91c55SMichael J. Spencer }
90*3ef91c55SMichael J. Spencer 
91*3ef91c55SMichael J. Spencer } // anonymous namespace
92