summaryrefslogtreecommitdiffstats
path: root/src/util_test.cc
diff options
context:
space:
mode:
authorScott Graham <scottmg@chromium.org>2014-11-08 06:20:34 (GMT)
committerScott Graham <scottmg@chromium.org>2014-11-08 06:20:34 (GMT)
commite24d31901fc79aa7348be46bef5dea8d0dce6c4b (patch)
tree6f5461e13d02a44c4ce9d7287688329a9ef52774 /src/util_test.cc
parent513f5bb1ed7392686c455cbe2989d143230a1d80 (diff)
downloadNinja-e24d31901fc79aa7348be46bef5dea8d0dce6c4b.zip
Ninja-e24d31901fc79aa7348be46bef5dea8d0dce6c4b.tar.gz
Ninja-e24d31901fc79aa7348be46bef5dea8d0dce6c4b.tar.bz2
track back->forward conversions in a bitmask
Diffstat (limited to 'src/util_test.cc')
-rw-r--r--src/util_test.cc72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/util_test.cc b/src/util_test.cc
index e82f227..36f212e 100644
--- a/src/util_test.cc
+++ b/src/util_test.cc
@@ -148,6 +148,78 @@ TEST(CanonicalizePath, PathSamplesWindows) {
EXPECT_TRUE(CanonicalizePath(&path, &err));
EXPECT_EQ("", path);
}
+
+TEST(CanonicalizePath, SlashTracking) {
+ string path;
+ string err;
+ unsigned int slash_bits;
+
+ path = "foo.h"; err = "";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("foo.h", path);
+ EXPECT_EQ(0, slash_bits);
+
+ path = "a\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/foo.h", path);
+ EXPECT_EQ(1, slash_bits);
+
+ path = "a/bcd/efh\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/bcd/efh/foo.h", path);
+ EXPECT_EQ(4, slash_bits);
+
+ path = "a\\bcd/efh\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/bcd/efh/foo.h", path);
+ EXPECT_EQ(5, slash_bits);
+
+ path = "a\\bcd\\efh\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/bcd/efh/foo.h", path);
+ EXPECT_EQ(7, slash_bits);
+
+ path = "a/bcd/efh/foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/bcd/efh/foo.h", path);
+ EXPECT_EQ(0, slash_bits);
+
+ path = "a\\./efh\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/efh/foo.h", path);
+ EXPECT_EQ(3, slash_bits);
+
+ path = "a\\../efh\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("efh/foo.h", path);
+ EXPECT_EQ(1, slash_bits);
+
+ path = "a\\b\\c\\d\\e\\f\\g\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/b/c/d/e/f/g/foo.h", path);
+ EXPECT_EQ(127, slash_bits);
+
+ path = "a\\b\\c\\..\\..\\..\\g\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("g/foo.h", path);
+ EXPECT_EQ(1, slash_bits);
+
+ path = "a\\b/c\\../../..\\g\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("g/foo.h", path);
+ EXPECT_EQ(1, slash_bits);
+
+ path = "a\\b/c\\./../..\\g\\foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/g/foo.h", path);
+ EXPECT_EQ(3, slash_bits);
+
+ path = "a\\b/c\\./../..\\g/foo.h";
+ EXPECT_TRUE(CanonicalizePath(&path, &err, &slash_bits));
+ EXPECT_EQ("a/g/foo.h", path);
+ EXPECT_EQ(1, slash_bits);
+}
+
#endif
TEST(CanonicalizePath, EmptyResult) {