| OLD | NEW |
| (Empty) |
| 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 * Use of this source code is governed by a BSD-style license that can be | |
| 3 * found in the LICENSE file. | |
| 4 */ | |
| 5 | |
| 6 #include <fcntl.h> | |
| 7 #include "nacl_mounts/kernel_proxy.h" | |
| 8 #include "nacl_mounts/path.h" | |
| 9 | |
| 10 #include "gtest/gtest.h" | |
| 11 | |
| 12 TEST(PathTest, SanityChecks) { | |
| 13 // can we construct and delete? | |
| 14 Path ph1("."); | |
| 15 Path *ph2 = new Path("."); | |
| 16 delete ph2; | |
| 17 | |
| 18 Path p1("."); | |
| 19 EXPECT_FALSE(p1.IsAbsolute()); | |
| 20 EXPECT_EQ(".", p1.Join()); | |
| 21 Path p2("/"); | |
| 22 EXPECT_TRUE(p2.IsAbsolute()); | |
| 23 EXPECT_EQ("/", p2.Join()); | |
| 24 } | |
| 25 | |
| 26 TEST(PathTest, Assignment) { | |
| 27 Path empty; | |
| 28 Path dot("."); | |
| 29 Path root("/"); | |
| 30 Path abs_str("/abs/from/string"); | |
| 31 Path rel_str("rel/from/string"); | |
| 32 Path self_str("./rel/from/string"); | |
| 33 | |
| 34 EXPECT_EQ(0, empty.Size()); | |
| 35 EXPECT_FALSE(empty.IsAbsolute()); | |
| 36 EXPECT_EQ(std::string(""), empty.Join()); | |
| 37 | |
| 38 EXPECT_EQ(1, dot.Size()); | |
| 39 EXPECT_FALSE(dot.IsAbsolute()); | |
| 40 EXPECT_EQ(std::string("."), dot.Join()); | |
| 41 | |
| 42 EXPECT_EQ(1, root.Size()); | |
| 43 EXPECT_TRUE(root.IsAbsolute()); | |
| 44 EXPECT_EQ(std::string("/"), root.Join()); | |
| 45 | |
| 46 EXPECT_EQ(4, abs_str.Size()); | |
| 47 EXPECT_TRUE(abs_str.IsAbsolute()); | |
| 48 EXPECT_EQ(std::string("/abs/from/string"), abs_str.Join()); | |
| 49 | |
| 50 EXPECT_EQ(3, rel_str.Size()); | |
| 51 EXPECT_FALSE(rel_str.IsAbsolute()); | |
| 52 EXPECT_EQ(std::string("rel/from/string"), rel_str.Join()); | |
| 53 | |
| 54 EXPECT_EQ(3, self_str.Size()); | |
| 55 EXPECT_FALSE(self_str.IsAbsolute()); | |
| 56 EXPECT_EQ(std::string("rel/from/string"), self_str.Join()); | |
| 57 | |
| 58 empty = ""; | |
| 59 dot = "."; | |
| 60 root = "/"; | |
| 61 abs_str = "/abs/from/assign"; | |
| 62 rel_str = "rel/from/assign"; | |
| 63 self_str = "./rel/from/assign"; | |
| 64 | |
| 65 EXPECT_EQ(1, empty.Size()); | |
| 66 EXPECT_FALSE(empty.IsAbsolute()); | |
| 67 EXPECT_EQ(std::string("."), empty.Join()); | |
| 68 | |
| 69 EXPECT_EQ(1, dot.Size()); | |
| 70 EXPECT_FALSE(dot.IsAbsolute()); | |
| 71 EXPECT_EQ(std::string("."), dot.Join()); | |
| 72 | |
| 73 EXPECT_EQ(1, root.Size()); | |
| 74 EXPECT_TRUE(root.IsAbsolute()); | |
| 75 EXPECT_EQ(std::string("/"), root.Join()); | |
| 76 | |
| 77 EXPECT_EQ(4, abs_str.Size()); | |
| 78 EXPECT_TRUE(abs_str.IsAbsolute()); | |
| 79 EXPECT_EQ(std::string("/abs/from/assign"), abs_str.Join()); | |
| 80 | |
| 81 EXPECT_EQ(3, rel_str.Size()); | |
| 82 EXPECT_FALSE(rel_str.IsAbsolute()); | |
| 83 EXPECT_EQ(std::string("rel/from/assign"), rel_str.Join()); | |
| 84 | |
| 85 EXPECT_EQ(3, self_str.Size()); | |
| 86 EXPECT_FALSE(self_str.IsAbsolute()); | |
| 87 EXPECT_EQ(std::string("rel/from/assign"), self_str.Join()); | |
| 88 | |
| 89 Path cpy_str; | |
| 90 cpy_str = empty; | |
| 91 EXPECT_EQ(1, cpy_str.Size()); | |
| 92 EXPECT_FALSE(cpy_str.IsAbsolute()); | |
| 93 EXPECT_EQ(std::string("."), cpy_str.Join()); | |
| 94 | |
| 95 cpy_str = dot; | |
| 96 EXPECT_EQ(1, cpy_str.Size()); | |
| 97 EXPECT_FALSE(cpy_str.IsAbsolute()); | |
| 98 EXPECT_EQ(std::string("."), cpy_str.Join()); | |
| 99 | |
| 100 cpy_str = root; | |
| 101 EXPECT_EQ(1, cpy_str.Size()); | |
| 102 EXPECT_TRUE(cpy_str.IsAbsolute()); | |
| 103 EXPECT_EQ(std::string("/"), cpy_str.Join()); | |
| 104 | |
| 105 cpy_str = abs_str; | |
| 106 EXPECT_EQ(4, cpy_str.Size()); | |
| 107 EXPECT_TRUE(cpy_str.IsAbsolute()); | |
| 108 EXPECT_EQ(std::string("/abs/from/assign"), cpy_str.Join()); | |
| 109 | |
| 110 cpy_str = rel_str; | |
| 111 EXPECT_EQ(3, cpy_str.Size()); | |
| 112 EXPECT_FALSE(cpy_str.IsAbsolute()); | |
| 113 EXPECT_EQ(std::string("rel/from/assign"), cpy_str.Join()); | |
| 114 | |
| 115 cpy_str = self_str; | |
| 116 EXPECT_EQ(3, cpy_str.Size()); | |
| 117 EXPECT_FALSE(cpy_str.IsAbsolute()); | |
| 118 EXPECT_EQ(std::string("rel/from/assign"), cpy_str.Join()); | |
| 119 } | |
| 120 | |
| 121 | |
| 122 TEST(PathTest, Collapse) { | |
| 123 StringArray_t path_components; | |
| 124 | |
| 125 Path p1("/simple/splitter/test"); | |
| 126 path_components = p1.Split(); | |
| 127 EXPECT_EQ("/", path_components[0]); | |
| 128 EXPECT_EQ("/", p1.Part(0)); | |
| 129 | |
| 130 EXPECT_EQ("simple", path_components[1]); | |
| 131 EXPECT_EQ("simple", p1.Part(1)); | |
| 132 | |
| 133 EXPECT_EQ("splitter",path_components[2]); | |
| 134 EXPECT_EQ("splitter",p1.Part(2)); | |
| 135 | |
| 136 EXPECT_EQ("test", path_components[3]); | |
| 137 EXPECT_EQ("test", p1.Part(3)); | |
| 138 | |
| 139 Path p2("///simple//splitter///test/"); | |
| 140 path_components = p2.Split(); | |
| 141 EXPECT_EQ(4, static_cast<int>(path_components.size())); | |
| 142 EXPECT_EQ(4, static_cast<int>(p2.Size())); | |
| 143 EXPECT_EQ("/", path_components[0]); | |
| 144 EXPECT_EQ("simple", path_components[1]); | |
| 145 EXPECT_EQ("splitter", path_components[2]); | |
| 146 EXPECT_EQ("test", path_components[3]); | |
| 147 | |
| 148 Path p3("sim/ple//spli/tter/te/st/"); | |
| 149 path_components = p3.Split(); | |
| 150 EXPECT_EQ(6, static_cast<int>(path_components.size())); | |
| 151 EXPECT_FALSE(p3.IsAbsolute()); | |
| 152 EXPECT_EQ("sim", path_components[0]); | |
| 153 EXPECT_EQ("ple", path_components[1]); | |
| 154 EXPECT_EQ("spli", path_components[2]); | |
| 155 EXPECT_EQ("tter", path_components[3]); | |
| 156 EXPECT_EQ("te", path_components[4]); | |
| 157 EXPECT_EQ("st", path_components[5]); | |
| 158 | |
| 159 Path p4(""); | |
| 160 path_components = p4.Split(); | |
| 161 EXPECT_EQ(1, static_cast<int>(path_components.size())); | |
| 162 | |
| 163 Path p5("/"); | |
| 164 path_components = p5.Split(); | |
| 165 EXPECT_EQ(1, static_cast<int>(path_components.size())); | |
| 166 } | |
| 167 | |
| 168 TEST(PathTest, AppendAndJoin) { | |
| 169 Path ph1("/usr/local/hi/there"); | |
| 170 | |
| 171 EXPECT_EQ("/usr/local/hi/there", ph1.Join()); | |
| 172 ph1 = ph1.Append(".."); | |
| 173 EXPECT_EQ("/usr/local/hi", ph1.Join()); | |
| 174 ph1 = ph1.Append(".././././hi/there/../.././././"); | |
| 175 EXPECT_EQ("/usr/local", ph1.Join()); | |
| 176 ph1 = ph1.Append("../../../../../../../../././../"); | |
| 177 EXPECT_EQ("/", ph1.Join()); | |
| 178 ph1 = ph1.Append("usr/lib/../bin/.././etc/../local/../share"); | |
| 179 EXPECT_EQ("/usr/share", ph1.Join()); | |
| 180 | |
| 181 Path ph2("./"); | |
| 182 EXPECT_EQ(".", ph2.Join()); | |
| 183 | |
| 184 Path ph3("/"); | |
| 185 EXPECT_EQ("/", ph3.Join()); | |
| 186 ph3 = ph3.Append(""); | |
| 187 EXPECT_EQ("/", ph3.Join()); | |
| 188 ph3 = ph3.Append("USR/local/SHARE"); | |
| 189 EXPECT_EQ("/USR/local/SHARE", ph3.Join()); | |
| 190 ph3 = ph3.Append("///////////////////////////////"); | |
| 191 EXPECT_EQ("/USR/local/SHARE", ph3.Join()); | |
| 192 | |
| 193 Path ph4(".."); | |
| 194 EXPECT_EQ("..", ph4.Join()); | |
| 195 ph4 = ph4.Append("/node1/node3/../../node1/./"); | |
| 196 EXPECT_EQ("../node1", ph4.Join()); | |
| 197 ph4 = ph4.Append("node4/../../node1/./node5"); | |
| 198 EXPECT_EQ("../node1/node5", ph4.Join()); | |
| 199 } | |
| 200 | |
| 201 | |
| 202 TEST(PathTest, Invalid) { | |
| 203 Path rooted("/usr/local"); | |
| 204 Path current("./usr/local"); | |
| 205 Path relative("usr/local"); | |
| 206 | |
| 207 Path test; | |
| 208 | |
| 209 test = rooted; | |
| 210 test.Append("../.."); | |
| 211 EXPECT_EQ("/", test.Join()); | |
| 212 | |
| 213 test = rooted; | |
| 214 test.Append("../../.."); | |
| 215 EXPECT_EQ("/", test.Join()); | |
| 216 | |
| 217 test = rooted; | |
| 218 test.Append("../../../foo"); | |
| 219 EXPECT_EQ("/foo", test.Join()); | |
| 220 | |
| 221 test = current; | |
| 222 test.Append("../.."); | |
| 223 EXPECT_EQ(".", test.Join()); | |
| 224 | |
| 225 test = current; | |
| 226 test.Append("../../.."); | |
| 227 EXPECT_EQ("..", test.Join()); | |
| 228 | |
| 229 test = current; | |
| 230 test.Append("../../../foo"); | |
| 231 EXPECT_EQ("../foo", test.Join()); | |
| 232 | |
| 233 test = relative; | |
| 234 test.Append("../.."); | |
| 235 EXPECT_EQ(".", test.Join()); | |
| 236 | |
| 237 test = relative; | |
| 238 test.Append("../../.."); | |
| 239 EXPECT_EQ("..", test.Join()); | |
| 240 | |
| 241 test = relative; | |
| 242 test.Append("../../../foo"); | |
| 243 EXPECT_EQ("../foo", test.Join()); | |
| 244 } | |
| 245 | |
| 246 TEST(PathTest, Range) { | |
| 247 Path p("/an/absolute/path"); | |
| 248 | |
| 249 // p's parts should be ["/", "an", "absolute", "path"]. | |
| 250 EXPECT_EQ("/an/absolute/path", p.Range(0, 4)); | |
| 251 EXPECT_EQ("an/absolute/path", p.Range(1, 4)); | |
| 252 EXPECT_EQ("absolute/path", p.Range(2, 4)); | |
| 253 EXPECT_EQ("path", p.Range(3, 4)); | |
| 254 | |
| 255 EXPECT_EQ("/an/absolute", p.Range(0, 3)); | |
| 256 EXPECT_EQ("an/absolute", p.Range(1, 3)); | |
| 257 EXPECT_EQ("absolute", p.Range(2, 3)); | |
| 258 } | |
| OLD | NEW |