1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <fcntl.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gtest/gtest.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/kernel_proxy.h" 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "nacl_io/path.h" 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing namespace nacl_io; 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PathTest, SanityChecks) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can we construct and delete? 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path ph1("."); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path *ph2 = new Path("."); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete ph2; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p1("."); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p1.IsAbsolute()); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".", p1.Join()); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p2("/"); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(p2.IsAbsolute()); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", p2.Join()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PathTest, Assignment) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path empty; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path dot("."); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path root("/"); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path abs_str("/abs/from/string"); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path rel_str("rel/from/string"); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path self_str("./rel/from/string"); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, empty.Size()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(empty.IsAbsolute()); 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("", empty.Join()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, dot.Size()); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dot.IsAbsolute()); 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(".", dot.Join()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, root.Size()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(root.IsAbsolute()); 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/", root.Join()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, abs_str.Size()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(abs_str.IsAbsolute()); 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/abs/from/string", abs_str.Join()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, rel_str.Size()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rel_str.IsAbsolute()); 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/string", rel_str.Join()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, self_str.Size()); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(self_str.IsAbsolute()); 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/string", self_str.Join()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) empty = ""; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dot = "."; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) root = "/"; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) abs_str = "/abs/from/assign"; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rel_str = "rel/from/assign"; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self_str = "./rel/from/assign"; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, empty.Size()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(empty.IsAbsolute()); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(".", empty.Join()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, dot.Size()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(dot.IsAbsolute()); 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(".", dot.Join()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, root.Size()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(root.IsAbsolute()); 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/", root.Join()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, abs_str.Size()); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(abs_str.IsAbsolute()); 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/abs/from/assign", abs_str.Join()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, rel_str.Size()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rel_str.IsAbsolute()); 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/assign", rel_str.Join()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, self_str.Size()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(self_str.IsAbsolute()); 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/assign", self_str.Join()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path cpy_str; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = empty; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, cpy_str.Size()); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cpy_str.IsAbsolute()); 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(".", cpy_str.Join()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = dot; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, cpy_str.Size()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cpy_str.IsAbsolute()); 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(".", cpy_str.Join()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = root; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, cpy_str.Size()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cpy_str.IsAbsolute()); 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/", cpy_str.Join()); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = abs_str; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, cpy_str.Size()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cpy_str.IsAbsolute()); 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/abs/from/assign", cpy_str.Join()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = rel_str; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, cpy_str.Size()); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cpy_str.IsAbsolute()); 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/assign", cpy_str.Join()); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cpy_str = self_str; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, cpy_str.Size()); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cpy_str.IsAbsolute()); 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("rel/from/assign", cpy_str.Join()); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PathTest, Collapse) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringArray_t path_components; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p1("/simple/splitter/test"); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_components = p1.Split(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", path_components[0]); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", p1.Part(0)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("simple", path_components[1]); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("simple", p1.Part(1)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("splitter",path_components[2]); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("splitter",p1.Part(2)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("test", path_components[3]); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("test", p1.Part(3)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p2("///simple//splitter///test/"); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_components = p2.Split(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, static_cast<int>(path_components.size())); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, static_cast<int>(p2.Size())); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", path_components[0]); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("simple", path_components[1]); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("splitter", path_components[2]); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("test", path_components[3]); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p3("sim/ple//spli/tter/te/st/"); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_components = p3.Split(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(6, static_cast<int>(path_components.size())); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(p3.IsAbsolute()); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("sim", path_components[0]); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("ple", path_components[1]); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("spli", path_components[2]); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("tter", path_components[3]); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("te", path_components[4]); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("st", path_components[5]); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p4(""); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_components = p4.Split(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, static_cast<int>(path_components.size())); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path p5("/"); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path_components = p5.Split(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, static_cast<int>(path_components.size())); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PathTest, AppendAndJoin) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path ph1("/usr/local/hi/there"); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/usr/local/hi/there", ph1.Join()); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph1 = ph1.Append(".."); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/usr/local/hi", ph1.Join()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph1 = ph1.Append(".././././hi/there/../.././././"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/usr/local", ph1.Join()); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph1 = ph1.Append("../../../../../../../../././../"); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", ph1.Join()); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph1 = ph1.Append("usr/lib/../bin/.././etc/../local/../share"); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/usr/share", ph1.Join()); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path ph2("./"); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".", ph2.Join()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path ph3("/"); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", ph3.Join()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph3 = ph3.Append(""); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", ph3.Join()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph3 = ph3.Append("USR/local/SHARE"); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/USR/local/SHARE", ph3.Join()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph3 = ph3.Append("///////////////////////////////"); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/USR/local/SHARE", ph3.Join()); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path ph4(".."); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("..", ph4.Join()); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph4 = ph4.Append("/node1/node3/../../node1/./"); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("../node1", ph4.Join()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ph4 = ph4.Append("node4/../../node1/./node5"); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("../node1/node5", ph4.Join()); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(PathTest, Invalid) { 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Path absolute("/usr/local"); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path current("./usr/local"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path relative("usr/local"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Path test; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test = absolute; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../.."); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", test.Join()); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test = absolute; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../.."); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/", test.Join()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) test = absolute; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../../foo"); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("/foo", test.Join()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = current; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../.."); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".", test.Join()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = current; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../.."); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("..", test.Join()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = current; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../../foo"); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("../foo", test.Join()); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = relative; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../.."); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(".", test.Join()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = relative; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../.."); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("..", test.Join()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test = relative; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test.Append("../../../foo"); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("../foo", test.Join()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(PathTest, Range) { 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Path p("/an/absolute/path"); 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // p's parts should be ["/", "an", "absolute", "path"]. 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("/an/absolute/path", p.Range(0, 4)); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("an/absolute/path", p.Range(1, 4)); 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("absolute/path", p.Range(2, 4)); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("path", p.Range(3, 4)); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("/an/absolute", p.Range(0, 3)); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("an/absolute", p.Range(1, 3)); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ("absolute", p.Range(2, 3)); 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(PathTest, PrependRelative) { 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Path p("foo/bar"); 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) p.Prepend("prefix"); 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("prefix/foo/bar", p.Join()); 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST(PathTest, PrependAbsolute) { 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Path p("/foo/bar"); 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) p.Prepend("/prefix"); 270f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("/prefix/foo/bar", p.Join()); 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 272