29 _getcwd(buf,
sizeof(buf));
31 return parts[parts.size() - 1].AsString();
34 string NormalizeAndCheckNoError(
const string& input) {
37 EXPECT_TRUE(normalizer.Normalize(input, &result, &err));
42 string NormalizeRelativeAndCheckNoError(
const string& input,
43 const string& relative_to) {
46 EXPECT_TRUE(normalizer.Normalize(input, &result, &err));
54 EXPECT_EQ(
"b", NormalizeAndCheckNoError(
"a\\..\\b"));
55 EXPECT_EQ(
"b", NormalizeAndCheckNoError(
"a\\../b"));
56 EXPECT_EQ(
"a/b", NormalizeAndCheckNoError(
"a\\.\\b"));
57 EXPECT_EQ(
"a/b", NormalizeAndCheckNoError(
"a\\./b"));
62 string currentdir = GetCurDir();
63 EXPECT_EQ(
"c", NormalizeRelativeAndCheckNoError(
"a/b/c",
"a/b"));
67 EXPECT_EQ(
string(
"../") + currentdir +
string(
"/a"),
68 NormalizeRelativeAndCheckNoError(
"a",
"../b"));
69 EXPECT_EQ(
string(
"../") + currentdir +
string(
"/a/b"),
70 NormalizeRelativeAndCheckNoError(
"a/b",
"../c"));
71 EXPECT_EQ(
"../../a", NormalizeRelativeAndCheckNoError(
"a",
"b/c"));
72 EXPECT_EQ(
".", NormalizeRelativeAndCheckNoError(
"a",
"a"));
76 EXPECT_EQ(
"b", NormalizeAndCheckNoError(
"Abc\\..\\b"));
77 EXPECT_EQ(
"BdEf", NormalizeAndCheckNoError(
"Abc\\..\\BdEf"));
78 EXPECT_EQ(
"A/b", NormalizeAndCheckNoError(
"A\\.\\b"));
79 EXPECT_EQ(
"a/b", NormalizeAndCheckNoError(
"a\\./b"));
80 EXPECT_EQ(
"A/B", NormalizeAndCheckNoError(
"A\\.\\B"));
81 EXPECT_EQ(
"A/B", NormalizeAndCheckNoError(
"A\\./B"));
86 NormalizeRelativeAndCheckNoError(
"p:\\vs08\\stuff.h",
"p:\\vs08"));
88 NormalizeRelativeAndCheckNoError(
"P:\\Vs08\\stuff.h",
"p:\\vs08"));
90 NormalizeRelativeAndCheckNoError(
"p:\\vs08\\stuff.h",
"c:\\vs08"));
91 EXPECT_EQ(
"P:/vs08/stufF.h", NormalizeRelativeAndCheckNoError(
92 "P:\\vs08\\stufF.h",
"D:\\stuff/things"));
93 EXPECT_EQ(
"P:/vs08/stuff.h", NormalizeRelativeAndCheckNoError(
94 "P:/vs08\\stuff.h",
"D:\\stuff/things"));
96 NormalizeRelativeAndCheckNoError(
"P:/vs08\\../wee\\stuff.h",
101 const char kLongInputString[] =
102 "C:\\Program Files (x86)\\Microsoft Visual Studio " 103 "12.0\\VC\\INCLUDEwarning #31001: The dll for reading and writing the " 104 "pdb (for example, mspdb110.dll) could not be found on your path. This " 105 "is usually a configuration error. Compilation will continue using /Z7 " 106 "instead of /Zi, but expect a similar error when you link your program.";
111 normalizer.
Normalize(kLongInputString, &result, &err));
117 char kExactlyMaxPath[_MAX_PATH + 1];
118 ASSERT_NE(_getcwd(kExactlyMaxPath,
sizeof kExactlyMaxPath), NULL);
120 int cwd_len = strlen(kExactlyMaxPath);
122 kExactlyMaxPath[cwd_len] =
'\\';
123 kExactlyMaxPath[cwd_len + 1] =
'a';
124 kExactlyMaxPath[cwd_len + 2] =
'\\';
126 kExactlyMaxPath[cwd_len + 3] =
'a';
128 for (
int i = cwd_len + 4; i < _MAX_PATH; ++i) {
129 if (i > cwd_len + 4 && i < _MAX_PATH - 1 && i % 10 == 0)
130 kExactlyMaxPath[i] =
'\\';
132 kExactlyMaxPath[i] =
'a';
135 kExactlyMaxPath[_MAX_PATH] =
'\0';
136 EXPECT_EQ(strlen(kExactlyMaxPath), _MAX_PATH);
138 string forward_slashes(kExactlyMaxPath);
139 replace(forward_slashes.begin(), forward_slashes.end(),
'\\',
'/');
141 EXPECT_EQ(forward_slashes.substr(cwd_len + 1),
142 NormalizeAndCheckNoError(kExactlyMaxPath));
154 char kExactlyMaxPath[_MAX_PATH + 1];
155 for (
int i = 0; i < _MAX_PATH; ++i) {
156 if (i < _MAX_PATH - 1 && i % 10 == 4)
157 kExactlyMaxPath[i] =
'\\';
159 kExactlyMaxPath[i] =
'a';
161 kExactlyMaxPath[_MAX_PATH] =
'\0';
162 EXPECT_EQ(strlen(kExactlyMaxPath), _MAX_PATH);
166 EXPECT_TRUE(err.find(
"GetFullPathName") != string::npos);
vector< StringPiece > SplitStringPiece(StringPiece input, char sep)
bool Normalize(const string &input, string *result, string *err) const
Normalize by fixing slashes style, fixing redundant .
static string AbsPath(StringPiece s, string *err)
Utility functions for normalizing include paths on Windows.
TEST(IncludesNormalize, Simple)