Ninja
includes_normalize_test.cc
Go to the documentation of this file.
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 }