diff options
author | Scott Graham <scottmg@chromium.org> | 2014-11-08 06:20:34 (GMT) |
---|---|---|
committer | Scott Graham <scottmg@chromium.org> | 2014-11-08 06:20:34 (GMT) |
commit | e24d31901fc79aa7348be46bef5dea8d0dce6c4b (patch) | |
tree | 6f5461e13d02a44c4ce9d7287688329a9ef52774 /src/util_test.cc | |
parent | 513f5bb1ed7392686c455cbe2989d143230a1d80 (diff) | |
download | Ninja-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.cc | 72 |
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) { |