Index: net/base/escape_unittest.cc |
=================================================================== |
--- net/base/escape_unittest.cc (revision 31214) |
+++ net/base/escape_unittest.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -24,8 +24,7 @@ |
const char* output; |
}; |
-struct UnescapeAndDecodeURLCase { |
- const char* encoding; |
+struct UnescapeAndDecodeCase { |
const char* input; |
// The expected output when run through UnescapeURL. |
@@ -38,6 +37,12 @@ |
const wchar_t* decoded; |
}; |
+struct AdjustOffsetCase { |
+ const char* input; |
+ size_t input_offset; |
+ size_t output_offset; |
+}; |
+ |
struct EscapeForHTMLCase { |
const char* input; |
const char* expected_output; |
@@ -45,7 +50,7 @@ |
} // namespace |
-TEST(Escape, EscapeTextForFormSubmission) { |
+TEST(EscapeTest, EscapeTextForFormSubmission) { |
const EscapeCase escape_cases[] = { |
{L"foo", L"foo"}, |
{L"foo bar", L"foo+bar"}, |
@@ -93,7 +98,7 @@ |
EXPECT_EQ(wide, EscapeQueryParamValueUTF8(test_str)); |
} |
-TEST(Escape, EscapePath) { |
+TEST(EscapeTest, EscapePath) { |
ASSERT_EQ( |
// Most of the character space we care about, un-escaped |
EscapePath( |
@@ -108,7 +113,7 @@ |
"%7B%7C%7D~%7F%80%FF"); |
} |
-TEST(Escape, EscapeUrlEncodedData) { |
+TEST(EscapeTest, EscapeUrlEncodedData) { |
ASSERT_EQ( |
// Most of the character space we care about, un-escaped |
EscapeUrlEncodedData( |
@@ -123,7 +128,7 @@ |
"%7B%7C%7D~%7F%80%FF"); |
} |
-TEST(Escape, UnescapeURLComponent) { |
+TEST(EscapeTest, UnescapeURLComponent) { |
const UnescapeURLCase unescape_cases[] = { |
{"", UnescapeRule::NORMAL, ""}, |
{"%2", UnescapeRule::NORMAL, "%2"}, |
@@ -184,40 +189,48 @@ |
EXPECT_EQ(expected, UnescapeURLComponent(input, UnescapeRule::NORMAL)); |
} |
-TEST(Escape, UnescapeAndDecodeURLComponent) { |
- const UnescapeAndDecodeURLCase unescape_cases[] = { |
- {"UTF8", "%", "%", "%", L"%"}, |
- {"UTF8", "+", "+", " ", L"+"}, |
- {"UTF8", "%2+", "%2+", "%2 ", L"%2+"}, |
- {"UTF8", "+%%%+%%%", "+%%%+%%%", " %%% %%%", L"+%%%+%%%"}, |
- {"UTF8", "Don't escape anything", |
- "Don't escape anything", |
- "Don't escape anything", |
- L"Don't escape anything"}, |
- {"UTF8", "+Invalid %escape %2+", |
- "+Invalid %escape %2+", |
- " Invalid %escape %2 ", |
- L"+Invalid %escape %2+"}, |
- {"UTF8", "Some random text %25%3bOK", |
- "Some random text %25;OK", |
- "Some random text %25;OK", |
- L"Some random text %25;OK"}, |
- {"UTF8", "%01%02%03%04%05%06%07%08%09", |
- "%01%02%03%04%05%06%07%08%09", |
- "%01%02%03%04%05%06%07%08%09", |
- L"%01%02%03%04%05%06%07%08%09"}, |
- {"UTF8", "%E4%BD%A0+%E5%A5%BD", |
- "\xE4\xBD\xA0+\xE5\xA5\xBD", |
- "\xE4\xBD\xA0 \xE5\xA5\xBD", |
- L"\x4f60+\x597d"}, |
- {"BIG5", "%A7A%A6n", |
- "\xA7\x41\xA6n", |
- "\xA7\x41\xA6n", |
- L"\x4f60\x597d"}, |
- {"UTF8", "%ED%ED", // Invalid UTF-8. |
- "\xED\xED", |
- "\xED\xED", |
- L"%ED%ED"}, // Invalid UTF-8 -> kept unescaped. |
+TEST(EscapeTest, UnescapeAndDecodeUTF8URLComponent) { |
+ const UnescapeAndDecodeCase unescape_cases[] = { |
+ { "%", |
+ "%", |
+ "%", |
+ L"%"}, |
+ { "+", |
+ "+", |
+ " ", |
+ L"+"}, |
+ { "%2+", |
+ "%2+", |
+ "%2 ", |
+ L"%2+"}, |
+ { "+%%%+%%%", |
+ "+%%%+%%%", |
+ " %%% %%%", |
+ L"+%%%+%%%"}, |
+ { "Don't escape anything", |
+ "Don't escape anything", |
+ "Don't escape anything", |
+ L"Don't escape anything"}, |
+ { "+Invalid %escape %2+", |
+ "+Invalid %escape %2+", |
+ " Invalid %escape %2 ", |
+ L"+Invalid %escape %2+"}, |
+ { "Some random text %25%3BOK", |
+ "Some random text %25;OK", |
+ "Some random text %25;OK", |
+ L"Some random text %25;OK"}, |
+ { "%01%02%03%04%05%06%07%08%09", |
+ "%01%02%03%04%05%06%07%08%09", |
+ "%01%02%03%04%05%06%07%08%09", |
+ L"%01%02%03%04%05%06%07%08%09"}, |
+ { "%E4%BD%A0+%E5%A5%BD", |
+ "\xE4\xBD\xA0+\xE5\xA5\xBD", |
+ "\xE4\xBD\xA0 \xE5\xA5\xBD", |
+ L"\x4f60+\x597d"}, |
+ { "%ED%ED", // Invalid UTF-8. |
+ "\xED\xED", |
+ "\xED\xED", |
+ L"%ED%ED"}, // Invalid UTF-8 -> kept unescaped. |
}; |
for (size_t i = 0; i < arraysize(unescape_cases); i++) { |
@@ -230,14 +243,36 @@ |
EXPECT_EQ(std::string(unescape_cases[i].query_unescaped), unescaped); |
// TODO: Need to test unescape_spaces and unescape_percent. |
- std::wstring decoded = UnescapeAndDecodeURLComponent( |
- unescape_cases[i].input, unescape_cases[i].encoding, |
- UnescapeRule::NORMAL); |
+ std::wstring decoded = UnescapeAndDecodeUTF8URLComponent( |
+ unescape_cases[i].input, UnescapeRule::NORMAL, NULL); |
EXPECT_EQ(std::wstring(unescape_cases[i].decoded), decoded); |
} |
} |
-TEST(Escape, EscapeForHTML) { |
+TEST(EscapeTest, AdjustOffset) { |
+ const AdjustOffsetCase adjust_cases[] = { |
+ {"", 0, std::wstring::npos}, |
+ {"test", 0, 0}, |
+ {"test", 2, 2}, |
+ {"test", 4, std::wstring::npos}, |
+ {"test", std::wstring::npos, std::wstring::npos}, |
+ {"%3Btest", 6, 4}, |
+ {"%3Btest", 2, std::wstring::npos}, |
+ {"test%3B", 2, 2}, |
+ {"%E4%BD%A0+%E5%A5%BD", 9, 1}, |
+ {"%E4%BD%A0+%E5%A5%BD", 6, std::wstring::npos}, |
+ {"%ED%B0%80+%E5%A5%BD", 6, 6}, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(adjust_cases); i++) { |
+ size_t offset = adjust_cases[i].input_offset; |
+ UnescapeAndDecodeUTF8URLComponent(adjust_cases[i].input, |
+ UnescapeRule::NORMAL, &offset); |
+ EXPECT_EQ(adjust_cases[i].output_offset, offset); |
+ } |
+} |
+ |
+TEST(EscapeTest, EscapeForHTML) { |
const EscapeForHTMLCase tests[] = { |
{ "hello", "hello" }, |
{ "<hello>", "<hello>" }, |