Ninja
|
00001 // Copyright 2012 Google Inc. All Rights Reserved. 00002 // 00003 // Licensed under the Apache License, Version 2.0 (the "License"); 00004 // you may not use this file except in compliance with the License. 00005 // You may obtain a copy of the License at 00006 // 00007 // http://www.apache.org/licenses/LICENSE-2.0 00008 // 00009 // Unless required by applicable law or agreed to in writing, software 00010 // distributed under the License is distributed on an "AS IS" BASIS, 00011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00012 // See the License for the specific language governing permissions and 00013 // limitations under the License. 00014 00015 #include "includes_normalize.h" 00016 00017 #include <gtest/gtest.h> 00018 00019 #include "test.h" 00020 #include "util.h" 00021 00022 TEST(IncludesNormalize, Simple) { 00023 EXPECT_EQ("b", IncludesNormalize::Normalize("a\\..\\b", NULL)); 00024 EXPECT_EQ("b", IncludesNormalize::Normalize("a\\../b", NULL)); 00025 EXPECT_EQ("a\\b", IncludesNormalize::Normalize("a\\.\\b", NULL)); 00026 EXPECT_EQ("a\\b", IncludesNormalize::Normalize("a\\./b", NULL)); 00027 } 00028 00029 namespace { 00030 00031 string GetCurDir() { 00032 char buf[_MAX_PATH]; 00033 _getcwd(buf, sizeof(buf)); 00034 vector<string> parts = IncludesNormalize::Split(string(buf), '\\'); 00035 return parts[parts.size() - 1]; 00036 } 00037 00038 } // namespace 00039 00040 TEST(IncludesNormalize, WithRelative) { 00041 string currentdir = IncludesNormalize::ToLower(GetCurDir()); 00042 EXPECT_EQ("c", IncludesNormalize::Normalize("a/b/c", "a/b")); 00043 EXPECT_EQ("a", IncludesNormalize::Normalize(IncludesNormalize::AbsPath("a"), 00044 NULL)); 00045 EXPECT_EQ(string("..\\") + currentdir + string("\\a"), 00046 IncludesNormalize::Normalize("a", "../b")); 00047 EXPECT_EQ(string("..\\") + currentdir + string("\\a\\b"), 00048 IncludesNormalize::Normalize("a/b", "../c")); 00049 EXPECT_EQ("..\\..\\a", IncludesNormalize::Normalize("a", "b/c")); 00050 EXPECT_EQ(".", IncludesNormalize::Normalize("a", "a")); 00051 } 00052 00053 TEST(IncludesNormalize, Case) { 00054 EXPECT_EQ("b", IncludesNormalize::Normalize("Abc\\..\\b", NULL)); 00055 EXPECT_EQ("BdEf", IncludesNormalize::Normalize("Abc\\..\\BdEf", NULL)); 00056 EXPECT_EQ("A\\b", IncludesNormalize::Normalize("A\\.\\b", NULL)); 00057 EXPECT_EQ("a\\b", IncludesNormalize::Normalize("a\\./b", NULL)); 00058 EXPECT_EQ("A\\B", IncludesNormalize::Normalize("A\\.\\B", NULL)); 00059 EXPECT_EQ("A\\B", IncludesNormalize::Normalize("A\\./B", NULL)); 00060 } 00061 00062 TEST(IncludesNormalize, Join) { 00063 vector<string> x; 00064 EXPECT_EQ("", IncludesNormalize::Join(x, ':')); 00065 x.push_back("alpha"); 00066 EXPECT_EQ("alpha", IncludesNormalize::Join(x, ':')); 00067 x.push_back("beta"); 00068 x.push_back("gamma"); 00069 EXPECT_EQ("alpha:beta:gamma", IncludesNormalize::Join(x, ':')); 00070 } 00071 00072 TEST(IncludesNormalize, Split) { 00073 EXPECT_EQ("", IncludesNormalize::Join(IncludesNormalize::Split("", '/'), 00074 ':')); 00075 EXPECT_EQ("a", IncludesNormalize::Join(IncludesNormalize::Split("a", '/'), 00076 ':')); 00077 EXPECT_EQ("a:b:c", 00078 IncludesNormalize::Join( 00079 IncludesNormalize::Split("a/b/c", '/'), ':')); 00080 } 00081 00082 TEST(IncludesNormalize, ToLower) { 00083 EXPECT_EQ("", IncludesNormalize::ToLower("")); 00084 EXPECT_EQ("stuff", IncludesNormalize::ToLower("Stuff")); 00085 EXPECT_EQ("stuff and things", IncludesNormalize::ToLower("Stuff AND thINGS")); 00086 EXPECT_EQ("stuff 3and thin43gs", 00087 IncludesNormalize::ToLower("Stuff 3AND thIN43GS")); 00088 } 00089 00090 TEST(IncludesNormalize, DifferentDrive) { 00091 EXPECT_EQ("stuff.h", 00092 IncludesNormalize::Normalize("p:\\vs08\\stuff.h", "p:\\vs08")); 00093 EXPECT_EQ("stuff.h", 00094 IncludesNormalize::Normalize("P:\\Vs08\\stuff.h", "p:\\vs08")); 00095 EXPECT_EQ("p:\\vs08\\stuff.h", 00096 IncludesNormalize::Normalize("p:\\vs08\\stuff.h", "c:\\vs08")); 00097 EXPECT_EQ("P:\\vs08\\stufF.h", 00098 IncludesNormalize::Normalize("P:\\vs08\\stufF.h", "D:\\stuff/things")); 00099 EXPECT_EQ("P:\\vs08\\stuff.h", 00100 IncludesNormalize::Normalize("P:/vs08\\stuff.h", "D:\\stuff/things")); 00101 // TODO: this fails; fix it. 00102 //EXPECT_EQ("P:\\wee\\stuff.h", 00103 // IncludesNormalize::Normalize("P:/vs08\\../wee\\stuff.h", "D:\\stuff/things")); 00104 }