summaryrefslogtreecommitdiffstats
path: root/src/util_test.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2011-08-24 22:49:41 (GMT)
committerEvan Martin <martine@danga.com>2011-08-24 22:52:22 (GMT)
commit210ca80b06c57994851fcfdebf7f3d767c41427b (patch)
treecb0f93fd7136f00133aa6140c4c782ad64a9dd60 /src/util_test.cc
parentb0dac493c41b228f0f725faf65590a1595e2245c (diff)
downloadNinja-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.cc55
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);
}