13ef91c55SMichael J. Spencer //===- llvm/unittest/Support/Path.cpp - Path tests ------------------------===//
23ef91c55SMichael J. Spencer //
33ef91c55SMichael J. Spencer //                     The LLVM Compiler Infrastructure
43ef91c55SMichael J. Spencer //
53ef91c55SMichael J. Spencer // This file is distributed under the University of Illinois Open Source
63ef91c55SMichael J. Spencer // License. See LICENSE.TXT for details.
73ef91c55SMichael J. Spencer //
83ef91c55SMichael J. Spencer //===----------------------------------------------------------------------===//
93ef91c55SMichael J. Spencer 
103ef91c55SMichael J. Spencer #include "llvm/Support/PathV2.h"
113ef91c55SMichael J. Spencer 
123ef91c55SMichael J. Spencer #include "gtest/gtest.h"
133ef91c55SMichael J. Spencer 
143ef91c55SMichael J. Spencer using namespace llvm;
153ef91c55SMichael J. Spencer 
163ef91c55SMichael J. Spencer namespace {
173ef91c55SMichael J. Spencer 
183ef91c55SMichael J. Spencer TEST(Support, Path) {
193ef91c55SMichael J. Spencer   SmallVector<StringRef, 40> paths;
203ef91c55SMichael J. Spencer   paths.push_back("");
213ef91c55SMichael J. Spencer   paths.push_back(".");
223ef91c55SMichael J. Spencer   paths.push_back("..");
233ef91c55SMichael J. Spencer   paths.push_back("foo");
243ef91c55SMichael J. Spencer   paths.push_back("/");
253ef91c55SMichael J. Spencer   paths.push_back("/foo");
263ef91c55SMichael J. Spencer   paths.push_back("foo/");
273ef91c55SMichael J. Spencer   paths.push_back("/foo/");
283ef91c55SMichael J. Spencer   paths.push_back("foo/bar");
293ef91c55SMichael J. Spencer   paths.push_back("/foo/bar");
303ef91c55SMichael J. Spencer   paths.push_back("//net");
313ef91c55SMichael J. Spencer   paths.push_back("//net/foo");
323ef91c55SMichael J. Spencer   paths.push_back("///foo///");
333ef91c55SMichael J. Spencer   paths.push_back("///foo///bar");
343ef91c55SMichael J. Spencer   paths.push_back("/.");
353ef91c55SMichael J. Spencer   paths.push_back("./");
363ef91c55SMichael J. Spencer   paths.push_back("/..");
373ef91c55SMichael J. Spencer   paths.push_back("../");
383ef91c55SMichael J. Spencer   paths.push_back("foo/.");
393ef91c55SMichael J. Spencer   paths.push_back("foo/..");
403ef91c55SMichael J. Spencer   paths.push_back("foo/./");
413ef91c55SMichael J. Spencer   paths.push_back("foo/./bar");
423ef91c55SMichael J. Spencer   paths.push_back("foo/..");
433ef91c55SMichael J. Spencer   paths.push_back("foo/../");
443ef91c55SMichael J. Spencer   paths.push_back("foo/../bar");
453ef91c55SMichael J. Spencer   paths.push_back("c:");
463ef91c55SMichael J. Spencer   paths.push_back("c:/");
473ef91c55SMichael J. Spencer   paths.push_back("c:foo");
483ef91c55SMichael J. Spencer   paths.push_back("c:/foo");
493ef91c55SMichael J. Spencer   paths.push_back("c:foo/");
503ef91c55SMichael J. Spencer   paths.push_back("c:/foo/");
513ef91c55SMichael J. Spencer   paths.push_back("c:/foo/bar");
523ef91c55SMichael J. Spencer   paths.push_back("prn:");
533ef91c55SMichael J. Spencer   paths.push_back("c:\\");
543ef91c55SMichael J. Spencer   paths.push_back("c:foo");
553ef91c55SMichael J. Spencer   paths.push_back("c:\\foo");
563ef91c55SMichael J. Spencer   paths.push_back("c:foo\\");
573ef91c55SMichael J. Spencer   paths.push_back("c:\\foo\\");
583ef91c55SMichael J. Spencer   paths.push_back("c:\\foo/");
593ef91c55SMichael J. Spencer   paths.push_back("c:/foo\\bar");
603ef91c55SMichael J. Spencer 
613ef91c55SMichael J. Spencer   for (SmallVector<StringRef, 40>::const_iterator i = paths.begin(),
623ef91c55SMichael J. Spencer                                                   e = paths.end();
633ef91c55SMichael J. Spencer                                                   i != e;
643ef91c55SMichael J. Spencer                                                   ++i) {
653ef91c55SMichael J. Spencer     outs() << *i << " =>\n    Iteration: [";
663ef91c55SMichael J. Spencer     for (sys::path::const_iterator ci = sys::path::begin(*i),
673ef91c55SMichael J. Spencer                                    ce = sys::path::end(*i);
683ef91c55SMichael J. Spencer                                    ci != ce;
693ef91c55SMichael J. Spencer                                    ++ci) {
703ef91c55SMichael J. Spencer       outs() << *ci << ',';
713ef91c55SMichael J. Spencer     }
723ef91c55SMichael J. Spencer     outs() << "]\n";
733ef91c55SMichael J. Spencer 
743ef91c55SMichael J. Spencer     StringRef res;
753ef91c55SMichael J. Spencer     SmallString<16> temp_store;
76*b775d0b3SMichael J. Spencer     if (error_code ec = sys::path::root_path(*i, res))
77*b775d0b3SMichael J. Spencer       ASSERT_FALSE(ec.message().c_str());
783ef91c55SMichael J. Spencer     outs() << "    root_path: " << res << '\n';
79*b775d0b3SMichael J. Spencer     if (error_code ec = sys::path::root_name(*i, res))
80*b775d0b3SMichael J. Spencer       ASSERT_FALSE(ec.message().c_str());
813ef91c55SMichael J. Spencer     outs() << "    root_name: " << res << '\n';
82*b775d0b3SMichael J. Spencer     if (error_code ec = sys::path::root_directory(*i, res))
83*b775d0b3SMichael J. Spencer       ASSERT_FALSE(ec.message().c_str());
843ef91c55SMichael J. Spencer     outs() << "    root_directory: " << res << '\n';
853ef91c55SMichael J. Spencer 
863ef91c55SMichael J. Spencer     temp_store = *i;
87*b775d0b3SMichael J. Spencer     if (error_code ec = sys::path::make_absolute(temp_store))
88*b775d0b3SMichael J. Spencer       ASSERT_FALSE(ec.message().c_str());
893ef91c55SMichael J. Spencer     outs() << "    make_absolute: " << temp_store << '\n';
903ef91c55SMichael J. Spencer 
913ef91c55SMichael J. Spencer     outs().flush();
923ef91c55SMichael J. Spencer   }
933ef91c55SMichael J. Spencer }
943ef91c55SMichael J. Spencer 
953ef91c55SMichael J. Spencer } // anonymous namespace
96