summaryrefslogtreecommitdiffstats
path: root/chromium/net/base/escape_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/base/escape_unittest.cc')
-rw-r--r--chromium/net/base/escape_unittest.cc138
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) {
{ "&amp; &", "& &" },
};
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