Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(887)

Unified Diff: net/base/net_util_unittest.cc

Issue 372017: Fix various problems with inline autocomplete and URLs that change length dur... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/net_util.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/net_util_unittest.cc
===================================================================
--- net/base/net_util_unittest.cc (revision 31214)
+++ net/base/net_util_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.
@@ -345,6 +345,11 @@
#endif
};
+struct AdjustOffsetCase {
+ size_t input_offset;
+ size_t output_offset;
+};
+
struct CompliantHostCase {
const char* host;
bool expected_output;
@@ -782,14 +787,10 @@
// ja || zh-TW,en || ko,ja -> IDNToUnicodeSlow
if (j == 3 || j == 17 || j == 18)
continue;
- std::wstring output;
- net::IDNToUnicode(idn_cases[i].input,
- static_cast<int>(strlen(idn_cases[i].input)),
- kLanguages[j],
- &output);
+ std::wstring output(net::IDNToUnicode(idn_cases[i].input,
+ strlen(idn_cases[i].input), kLanguages[j], NULL));
std::wstring expected(idn_cases[i].unicode_allowed[j] ?
- idn_cases[i].unicode_output :
- ASCIIToWide(idn_cases[i].input));
+ idn_cases[i].unicode_output : ASCIIToWide(idn_cases[i].input));
AppendLanguagesToOutputs(kLanguages[j], &expected, &output);
EXPECT_EQ(expected, output);
}
@@ -802,20 +803,43 @@
// !(ja || zh-TW,en || ko,ja) -> IDNToUnicodeFast
if (!(j == 3 || j == 17 || j == 18))
continue;
- std::wstring output;
- net::IDNToUnicode(idn_cases[i].input,
- static_cast<int>(strlen(idn_cases[i].input)),
- kLanguages[j],
- &output);
+ std::wstring output(net::IDNToUnicode(idn_cases[i].input,
+ strlen(idn_cases[i].input), kLanguages[j], NULL));
std::wstring expected(idn_cases[i].unicode_allowed[j] ?
- idn_cases[i].unicode_output :
- ASCIIToWide(idn_cases[i].input));
+ idn_cases[i].unicode_output : ASCIIToWide(idn_cases[i].input));
AppendLanguagesToOutputs(kLanguages[j], &expected, &output);
EXPECT_EQ(expected, output);
}
}
}
+TEST(NetUtilTest, IDNToUnicodeAdjustOffset) {
+ const AdjustOffsetCase adjust_cases[] = {
+ {0, 0},
+ {2, 2},
+ {4, 4},
+ {5, 5},
+ {6, std::wstring::npos},
+ {16, std::wstring::npos},
+ {17, 7},
+ {18, 8},
+ {19, std::wstring::npos},
+ {25, std::wstring::npos},
+ {34, 12},
+ {35, 13},
+ {38, 16},
+ {39, std::wstring::npos},
+ {std::wstring::npos, std::wstring::npos},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(adjust_cases); ++i) {
+ size_t offset = adjust_cases[i].input_offset;
+ // "test.\x89c6\x9891.\x5317\x4eac\x5927\x5b78.test"
+ net::IDNToUnicode("test.xn--cy2a840a.xn--1lq90ic7f1rc.test", 39, L"zh-CN",
+ &offset);
+ EXPECT_EQ(adjust_cases[i].output_offset, offset);
+ }
+}
+
TEST(NetUtilTest, CompliantHost) {
const CompliantHostCase compliant_host_cases[] = {
{"", false},
@@ -1328,7 +1352,7 @@
size_t prefix_len;
std::wstring formatted = net::FormatUrl(
GURL(tests[i].input), tests[i].languages, tests[i].omit,
- tests[i].escape_rules, NULL, &prefix_len);
+ tests[i].escape_rules, NULL, &prefix_len, NULL);
EXPECT_EQ(tests[i].output, formatted) << tests[i].description;
EXPECT_EQ(tests[i].prefix_len, prefix_len) << tests[i].description;
}
@@ -1340,7 +1364,7 @@
std::wstring formatted = net::FormatUrl(
GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/"
"%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"),
- L"ja", false, UnescapeRule::NONE, &parsed, NULL);
+ L"ja", false, UnescapeRule::NONE, &parsed, NULL, NULL);
EXPECT_EQ(L"http://%E3%82%B0:%E3%83%BC@\x30B0\x30FC\x30B0\x30EB.jp:8080"
L"/%E3%82%B0/?q=%E3%82%B0#\x30B0", formatted);
EXPECT_EQ(L"%E3%82%B0",
@@ -1360,7 +1384,7 @@
formatted = net::FormatUrl(
GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/"
"%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"),
- L"ja", false, UnescapeRule::NORMAL, &parsed, NULL);
+ L"ja", false, UnescapeRule::NORMAL, &parsed, NULL, NULL);
EXPECT_EQ(L"http://\x30B0:\x30FC@\x30B0\x30FC\x30B0\x30EB.jp:8080"
L"/\x30B0/?q=\x30B0#\x30B0", formatted);
EXPECT_EQ(L"\x30B0",
@@ -1379,7 +1403,7 @@
formatted = net::FormatUrl(
GURL("http://\xE3\x82\xB0:\xE3\x83\xBC@xn--qcka1pmc.jp:8080/"
"%E3%82%B0/?q=%E3%82%B0#\xE3\x82\xB0"),
- L"ja", true, UnescapeRule::NORMAL, &parsed, NULL);
+ L"ja", true, UnescapeRule::NORMAL, &parsed, NULL, NULL);
EXPECT_EQ(L"http://\x30B0\x30FC\x30B0\x30EB.jp:8080"
L"/\x30B0/?q=\x30B0#\x30B0", formatted);
EXPECT_FALSE(parsed.username.is_valid());
@@ -1395,7 +1419,7 @@
// View-source case.
formatted = net::FormatUrl(
GURL("view-source:http://user:passwd@host:81/path?query#ref"),
- L"", true, UnescapeRule::NORMAL, &parsed, NULL);
+ L"", true, UnescapeRule::NORMAL, &parsed, NULL, NULL);
EXPECT_EQ(L"view-source:http://host:81/path?query#ref", formatted);
EXPECT_EQ(L"view-source:http",
formatted.substr(parsed.scheme.begin, parsed.scheme.len));
@@ -1408,6 +1432,124 @@
EXPECT_EQ(L"ref", formatted.substr(parsed.ref.begin, parsed.ref.len));
}
+TEST(NetUtilTest, FormatUrlAdjustOffset) {
+ const AdjustOffsetCase basic_cases[] = {
+ {0, 0},
+ {3, 3},
+ {5, 5},
+ {6, 6},
+ {13, 13},
+ {21, 21},
+ {22, 22},
+ {23, 23},
+ {25, 25},
+ {26, std::wstring::npos},
+ {500000, std::wstring::npos},
+ {std::wstring::npos, std::wstring::npos},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(basic_cases); ++i) {
+ size_t offset = basic_cases[i].input_offset;
+ net::FormatUrl(GURL("http://www.google.com/foo/"), L"en", true,
+ UnescapeRule::NORMAL, NULL, NULL, &offset);
+ EXPECT_EQ(basic_cases[i].output_offset, offset);
+ }
+
+ const struct {
+ const char* input_url;
+ size_t input_offset;
+ size_t output_offset;
+ } omit_auth_cases[] = {
+ {"http://foo:bar@www.google.com/", 6, 6},
+ {"http://foo:bar@www.google.com/", 7, 7},
+ {"http://foo:bar@www.google.com/", 8, std::wstring::npos},
+ {"http://foo:bar@www.google.com/", 10, std::wstring::npos},
+ {"http://foo:bar@www.google.com/", 11, std::wstring::npos},
+ {"http://foo:bar@www.google.com/", 14, std::wstring::npos},
+ {"http://foo:bar@www.google.com/", 15, 7},
+ {"http://foo:bar@www.google.com/", 25, 17},
+ {"http://foo@www.google.com/", 9, std::wstring::npos},
+ {"http://foo@www.google.com/", 11, 7},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(omit_auth_cases); ++i) {
+ size_t offset = omit_auth_cases[i].input_offset;
+ net::FormatUrl(GURL(omit_auth_cases[i].input_url), L"en", true,
+ UnescapeRule::NORMAL, NULL, NULL, &offset);
+ EXPECT_EQ(omit_auth_cases[i].output_offset, offset);
+ }
+
+ const AdjustOffsetCase view_source_cases[] = {
+ {0, 0},
+ {3, 3},
+ {11, 11},
+ {12, 12},
+ {13, 13},
+ {19, 19},
+ {20, std::wstring::npos},
+ {23, 19},
+ {26, 22},
+ {std::wstring::npos, std::wstring::npos},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(view_source_cases); ++i) {
+ size_t offset = view_source_cases[i].input_offset;
+ net::FormatUrl(GURL("view-source:http://foo@www.google.com/"), L"en", true,
+ UnescapeRule::NORMAL, NULL, NULL, &offset);
+ EXPECT_EQ(view_source_cases[i].output_offset, offset);
+ }
+
+ const AdjustOffsetCase idn_hostname_cases[] = {
+ {8, std::wstring::npos},
+ {16, std::wstring::npos},
+ {24, std::wstring::npos},
+ {25, 12},
+ {30, 17},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(idn_hostname_cases); ++i) {
+ size_t offset = idn_hostname_cases[i].input_offset;
+ // "http://\x671d\x65e5\x3042\x3055\x3072.jp/foo/"
+ net::FormatUrl(GURL("http://xn--l8jvb1ey91xtjb.jp/foo/"), L"ja", true,
+ UnescapeRule::NORMAL, NULL, NULL, &offset);
+ EXPECT_EQ(idn_hostname_cases[i].output_offset, offset);
+ }
+
+ const AdjustOffsetCase unescape_cases[] = {
+ {25, 25},
+ {26, std::wstring::npos},
+ {27, std::wstring::npos},
+ {28, 26},
+ {35, std::wstring::npos},
+ {41, 31},
+ {59, 33},
+ {60, std::wstring::npos},
+ {67, std::wstring::npos},
+ {68, std::wstring::npos},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(unescape_cases); ++i) {
+ size_t offset = unescape_cases[i].input_offset;
+ // "http://www.google.com/foo bar/\x30B0\x30FC\x30B0\x30EB"
+ net::FormatUrl(GURL(
+ "http://www.google.com/foo%20bar/%E3%82%B0%E3%83%BC%E3%82%B0%E3%83%AB"),
+ L"en", true, UnescapeRule::SPACES, NULL, NULL, &offset);
+ EXPECT_EQ(unescape_cases[i].output_offset, offset);
+ }
+
+ const AdjustOffsetCase ref_cases[] = {
+ {30, 30},
+ {31, 31},
+ {32, std::wstring::npos},
+ {34, 32},
+ {37, 33},
+ {38, std::wstring::npos},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(ref_cases); ++i) {
+ size_t offset = ref_cases[i].input_offset;
+ // "http://www.google.com/foo.html#\x30B0\x30B0z"
+ net::FormatUrl(GURL(
+ "http://www.google.com/foo.html#\xE3\x82\xB0\xE3\x82\xB0z"), L"en",
+ true, UnescapeRule::NORMAL, NULL, NULL, &offset);
+ EXPECT_EQ(ref_cases[i].output_offset, offset);
+ }
+}
+
TEST(NetUtilTest, SimplifyUrlForRequest) {
struct {
const char* input_url;
@@ -1466,4 +1608,3 @@
EXPECT_EQ(i, net::explicitly_allowed_ports.size());
}
}
-
« no previous file with comments | « net/base/net_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698