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