diff options
Diffstat (limited to 'chromium/net/base/escape_unittest.cc')
-rw-r--r-- | chromium/net/base/escape_unittest.cc | 138 |
1 files changed, 82 insertions, 56 deletions
diff --git a/chromium/net/base/escape_unittest.cc b/chromium/net/base/escape_unittest.cc index e7e435c08ef..74ae29336d8 100644 --- a/chromium/net/base/escape_unittest.cc +++ b/chromium/net/base/escape_unittest.cc @@ -8,7 +8,6 @@ #include "net/base/escape.h" #include "base/basictypes.h" -#include "base/i18n/icu_string_conversions.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -17,8 +16,6 @@ namespace net { namespace { -const size_t kNpos = base::string16::npos; - struct EscapeCase { const char* input; const char* output; @@ -122,6 +119,16 @@ TEST(EscapeTest, EscapePath) { "%7B%7C%7D~%7F%80%FF"); } +TEST(EscapeTest, DataURLWithAccentedCharacters) { + const std::string url = + "text/html;charset=utf-8,%3Chtml%3E%3Cbody%3ETonton,%20ton%20th%C3" + "%A9%20t'a-t-il%20%C3%B4t%C3%A9%20ta%20toux%20"; + + base::OffsetAdjuster::Adjustments adjustments; + net::UnescapeAndDecodeUTF8URLComponentWithAdjustments( + url, UnescapeRule::SPACES, &adjustments); +} + TEST(EscapeTest, EscapeUrlEncodedData) { ASSERT_EQ( // Most of the character space we care about, un-escaped @@ -218,6 +225,31 @@ TEST(EscapeTest, UnescapeURLComponent) { L"Some%20random text %25%2dOK"}, {L"Some%20random text %25%2dOK", UnescapeRule::NORMAL, L"Some%20random text %25-OK"}, + {L"Some%20random text %25%E2%80", UnescapeRule::NORMAL, + L"Some%20random text %25\xE2\x80"}, + {L"Some%20random text %25%E2%80OK", UnescapeRule::NORMAL, + L"Some%20random text %25\xE2\x80OK"}, + {L"Some%20random text %25%E2%80%84OK", UnescapeRule::NORMAL, + L"Some%20random text %25\xE2\x80\x84OK"}, + + // BiDi Control characters should not be unescaped. + {L"Some%20random text %25%D8%9COK", UnescapeRule::NORMAL, + L"Some%20random text %25%D8%9COK"}, + {L"Some%20random text %25%E2%80%8EOK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%80%8EOK"}, + {L"Some%20random text %25%E2%80%8FOK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%80%8FOK"}, + {L"Some%20random text %25%E2%80%AAOK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%80%AAOK"}, + {L"Some%20random text %25%E2%80%ABOK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%80%ABOK"}, + {L"Some%20random text %25%E2%80%AEOK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%80%AEOK"}, + {L"Some%20random text %25%E2%81%A6OK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%81%A6OK"}, + {L"Some%20random text %25%E2%81%A9OK", UnescapeRule::NORMAL, + L"Some%20random text %25%E2%81%A9OK"}, + {L"Some%20random text %25%2dOK", UnescapeRule::SPACES, L"Some random text %25-OK"}, {L"Some%20random text %25%2dOK", UnescapeRule::URL_SPECIAL_CHARS, @@ -250,28 +282,28 @@ TEST(EscapeTest, UnescapeURLComponent) { }; for (size_t i = 0; i < arraysize(unescape_cases); i++) { - base::string16 str(WideToUTF16(unescape_cases[i].input)); - EXPECT_EQ(WideToUTF16(unescape_cases[i].output), + base::string16 str(base::WideToUTF16(unescape_cases[i].input)); + EXPECT_EQ(base::WideToUTF16(unescape_cases[i].output), UnescapeURLComponent(str, unescape_cases[i].rules)); } // Test the NULL character unescaping (which wouldn't work above since those // are just char pointers). - base::string16 input(WideToUTF16(L"Null")); + base::string16 input(base::WideToUTF16(L"Null")); input.push_back(0); // Also have a NULL in the input. - input.append(WideToUTF16(L"%00%39Test")); + input.append(base::WideToUTF16(L"%00%39Test")); // When we're unescaping NULLs - base::string16 expected(WideToUTF16(L"Null")); + base::string16 expected(base::WideToUTF16(L"Null")); expected.push_back(0); expected.push_back(0); - expected.append(ASCIIToUTF16("9Test")); + expected.append(base::ASCIIToUTF16("9Test")); EXPECT_EQ(expected, UnescapeURLComponent(input, UnescapeRule::CONTROL_CHARS)); // When we're not unescaping NULLs. - expected = WideToUTF16(L"Null"); + expected = base::WideToUTF16(L"Null"); expected.push_back(0); - expected.append(WideToUTF16(L"%009Test")); + expected.append(base::WideToUTF16(L"%009Test")); EXPECT_EQ(expected, UnescapeURLComponent(input, UnescapeRule::NORMAL)); } @@ -330,33 +362,62 @@ TEST(EscapeTest, UnescapeAndDecodeUTF8URLComponent) { // TODO: Need to test unescape_spaces and unescape_percent. base::string16 decoded = UnescapeAndDecodeUTF8URLComponent( - unescape_cases[i].input, UnescapeRule::NORMAL, NULL); - EXPECT_EQ(WideToUTF16(unescape_cases[i].decoded), decoded); + unescape_cases[i].input, UnescapeRule::NORMAL); + EXPECT_EQ(base::WideToUTF16(unescape_cases[i].decoded), decoded); } } TEST(EscapeTest, AdjustOffset) { const AdjustOffsetCase adjust_cases[] = { {"", 0, 0}, - {"", 1, std::string::npos}, {"test", 0, 0}, {"test", 2, 2}, {"test", 4, 4}, - {"test", 5, std::string::npos}, {"test", std::string::npos, std::string::npos}, {"%2dtest", 6, 4}, + {"%2dtest", 3, 1}, {"%2dtest", 2, std::string::npos}, + {"%2dtest", 1, std::string::npos}, + {"%2dtest", 0, 0}, {"test%2d", 2, 2}, {"%E4%BD%A0+%E5%A5%BD", 9, 1}, {"%E4%BD%A0+%E5%A5%BD", 6, std::string::npos}, - {"%ED%B0%80+%E5%A5%BD", 6, 6}, + {"%E4%BD%A0+%E5%A5%BD", 0, 0}, + {"%E4%BD%A0+%E5%A5%BD", 10, 2}, + {"%E4%BD%A0+%E5%A5%BD", 19, 3}, + + {"hi%41test%E4%BD%A0+%E5%A5%BD", 18, 8}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 15, std::string::npos}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 9, 7}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 19, 9}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 28, 10}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 0, 0}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 2, 2}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 3, std::string::npos}, + {"hi%41test%E4%BD%A0+%E5%A5%BD", 5, 3}, + + {"%E4%BD%A0+%E5%A5%BDhi%41test", 9, 1}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 6, std::string::npos}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 0, 0}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 10, 2}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 19, 3}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 21, 5}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 22, std::string::npos}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 24, 6}, + {"%E4%BD%A0+%E5%A5%BDhi%41test", 28, 10}, + + {"%ED%B0%80+%E5%A5%BD", 6, 6}, // not convertable to UTF-8 }; 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); + base::OffsetAdjuster::Adjustments adjustments; + UnescapeAndDecodeUTF8URLComponentWithAdjustments( + adjust_cases[i].input, UnescapeRule::NORMAL, &adjustments); + base::OffsetAdjuster::AdjustOffset(adjustments, &offset); + EXPECT_EQ(adjust_cases[i].output_offset, offset) + << "input=" << adjust_cases[i].input + << " offset=" << adjust_cases[i].input_offset; } } @@ -387,46 +448,11 @@ TEST(EscapeTest, UnescapeForHTML) { { "& &", "& &" }, }; for (size_t i = 0; i < arraysize(tests); ++i) { - base::string16 result = UnescapeForHTML(ASCIIToUTF16(tests[i].input)); - EXPECT_EQ(ASCIIToUTF16(tests[i].expected_output), result); + base::string16 result = UnescapeForHTML(base::ASCIIToUTF16(tests[i].input)); + EXPECT_EQ(base::ASCIIToUTF16(tests[i].expected_output), result); } } -TEST(EscapeTest, AdjustEncodingOffset) { - // Imagine we have strings as shown in the following cases where the - // %XX's represent encoded characters - - // 1: abc%ECdef ==> abcXdef - std::vector<size_t> offsets; - for (size_t t = 0; t < 9; ++t) - offsets.push_back(t); - internal::AdjustEncodingOffset::Adjustments adjustments; - adjustments.push_back(3); - std::for_each(offsets.begin(), offsets.end(), - internal::AdjustEncodingOffset(adjustments)); - size_t expected_1[] = {0, 1, 2, 3, kNpos, kNpos, 4, 5, 6}; - EXPECT_EQ(offsets.size(), arraysize(expected_1)); - for (size_t i = 0; i < arraysize(expected_1); ++i) - EXPECT_EQ(expected_1[i], offsets[i]); - - - // 2: %ECabc%EC%ECdef%EC ==> XabcXXdefX - offsets.clear(); - for (size_t t = 0; t < 18; ++t) - offsets.push_back(t); - adjustments.clear(); - adjustments.push_back(0); - adjustments.push_back(6); - adjustments.push_back(9); - adjustments.push_back(15); - std::for_each(offsets.begin(), offsets.end(), - internal::AdjustEncodingOffset(adjustments)); - size_t expected_2[] = {0, kNpos, kNpos, 1, 2, 3, 4, kNpos, kNpos, 5, kNpos, - kNpos, 6, 7, 8, 9, kNpos, kNpos}; - EXPECT_EQ(offsets.size(), arraysize(expected_2)); - for (size_t i = 0; i < arraysize(expected_2); ++i) - EXPECT_EQ(expected_2[i], offsets[i]); -} } // namespace } // namespace net |