diff options
author | Evan Martin <martine@danga.com> | 2011-08-24 22:49:41 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2011-08-24 22:52:22 (GMT) |
commit | 210ca80b06c57994851fcfdebf7f3d767c41427b (patch) | |
tree | cb0f93fd7136f00133aa6140c4c782ad64a9dd60 /src/util_test.cc | |
parent | b0dac493c41b228f0f725faf65590a1595e2245c (diff) | |
download | Ninja-210ca80b06c57994851fcfdebf7f3d767c41427b.zip Ninja-210ca80b06c57994851fcfdebf7f3d767c41427b.tar.gz Ninja-210ca80b06c57994851fcfdebf7f3d767c41427b.tar.bz2 |
semantic change: allow reaching into parent directories in paths
This allows generating build files in a subdirectory of your source tree.
- Change CanonicalizePath to accept this.
- CanonicalizePath no longer has an error condition, so change it to a void
function.
I profiled the result against Chrome and it might be ~100ms slower, but that
might just be Chrome's size working against me. In any case I think there
are lower-hanging performance fruit elsewhere.
Diffstat (limited to 'src/util_test.cc')
-rw-r--r-- | src/util_test.cc | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/util_test.cc b/src/util_test.cc index 87b614c..97a236f 100644 --- a/src/util_test.cc +++ b/src/util_test.cc @@ -18,46 +18,51 @@ TEST(CanonicalizePath, PathSamples) { std::string path = "foo.h"; - std::string err; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + CanonicalizePath(&path); EXPECT_EQ("foo.h", path); - path = "./foo.h"; err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + path = "./foo.h"; + CanonicalizePath(&path); EXPECT_EQ("foo.h", path); - path = "./foo/./bar.h"; err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + path = "./foo/./bar.h"; + CanonicalizePath(&path); EXPECT_EQ("foo/bar.h", path); - path = "./x/foo/../bar.h"; err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + path = "./x/foo/../bar.h"; + CanonicalizePath(&path); EXPECT_EQ("x/bar.h", path); - path = "./x/foo/../../bar.h"; err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + path = "./x/foo/../../bar.h"; + CanonicalizePath(&path); EXPECT_EQ("bar.h", path); - path = "foo//bar"; err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + path = "foo//bar"; + CanonicalizePath(&path); EXPECT_EQ("foo/bar", path); - path = "./x/../foo/../../bar.h"; err = ""; - EXPECT_FALSE(CanonicalizePath(&path, &err)); - EXPECT_EQ("can't canonicalize path './x/../foo/../../bar.h' that reaches " - "above its directory", err); + path = "foo//.//..///bar"; + CanonicalizePath(&path); + EXPECT_EQ("bar", path); + + path = "./x/../foo/../../bar.h"; + CanonicalizePath(&path); + EXPECT_EQ("../bar.h", path); +} + +TEST(CanonicalizePath, UpDir) { + std::string path, err; + path = "../../foo/bar.h"; + CanonicalizePath(&path); + EXPECT_EQ("../../foo/bar.h", path); + + path = "test/../../foo/bar.h"; + CanonicalizePath(&path); + EXPECT_EQ("../foo/bar.h", path); } TEST(CanonicalizePath, AbsolutePath) { string path = "/usr/include/stdio.h"; - string err = ""; - EXPECT_TRUE(CanonicalizePath(&path, &err)); - EXPECT_EQ("", err); + CanonicalizePath(&path); EXPECT_EQ("/usr/include/stdio.h", path); } |