Clean up URL test string conversions.
Originally the url test utils had UTF string conversion functions because we didn't want the library to depend on STL (for embedders). We've not had this limitation for a long time so the UTF16 <--> UTF8 conversion functions can be deleted in favor of the ones in base. The one remaining function which generates possibly-invalid UTF16 (by design) is renamed and clarified for this purpose. Review-Url: https://codereview.chromium.org/2469133002 Cr-Commit-Position: refs/heads/master@{#429688}
This commit is contained in:
@ -5,6 +5,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "url/gurl.h"
|
||||
#include "url/url_canon.h"
|
||||
@ -12,9 +13,6 @@
|
||||
|
||||
namespace url {
|
||||
|
||||
using test_utils::WStringToUTF16;
|
||||
using test_utils::ConvertUTF8ToUTF16;
|
||||
|
||||
namespace {
|
||||
|
||||
template<typename CHAR>
|
||||
@ -67,11 +65,11 @@ TEST(GURLTest, Types) {
|
||||
// the parser is already tested and works, so we are mostly interested if the
|
||||
// object does the right thing with the results.
|
||||
TEST(GURLTest, Components) {
|
||||
GURL empty_url(WStringToUTF16(L""));
|
||||
GURL empty_url(base::UTF8ToUTF16(""));
|
||||
EXPECT_TRUE(empty_url.is_empty());
|
||||
EXPECT_FALSE(empty_url.is_valid());
|
||||
|
||||
GURL url(WStringToUTF16(L"http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
GURL url(base::UTF8ToUTF16("http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
EXPECT_FALSE(url.is_empty());
|
||||
EXPECT_TRUE(url.is_valid());
|
||||
EXPECT_TRUE(url.SchemeIs("http"));
|
||||
@ -116,7 +114,8 @@ TEST(GURLTest, Empty) {
|
||||
}
|
||||
|
||||
TEST(GURLTest, Copy) {
|
||||
GURL url(WStringToUTF16(L"http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
GURL url(base::UTF8ToUTF16(
|
||||
"http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
|
||||
GURL url2(url);
|
||||
EXPECT_TRUE(url2.is_valid());
|
||||
@ -149,7 +148,8 @@ TEST(GURLTest, Copy) {
|
||||
}
|
||||
|
||||
TEST(GURLTest, Assign) {
|
||||
GURL url(WStringToUTF16(L"http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
GURL url(base::UTF8ToUTF16(
|
||||
"http://user:pass@google.com:99/foo;bar?q=a#ref"));
|
||||
|
||||
GURL url2;
|
||||
url2 = url;
|
||||
@ -191,7 +191,8 @@ TEST(GURLTest, SelfAssign) {
|
||||
}
|
||||
|
||||
TEST(GURLTest, CopyFileSystem) {
|
||||
GURL url(WStringToUTF16(L"filesystem:https://user:pass@google.com:99/t/foo;bar?q=a#ref"));
|
||||
GURL url(base::UTF8ToUTF16(
|
||||
"filesystem:https://user:pass@google.com:99/t/foo;bar?q=a#ref"));
|
||||
|
||||
GURL url2(url);
|
||||
EXPECT_TRUE(url2.is_valid());
|
||||
@ -313,9 +314,9 @@ TEST(GURLTest, Resolve) {
|
||||
EXPECT_EQ(output.SchemeIsFileSystem(), output.inner_url() != NULL);
|
||||
|
||||
// Wide code path.
|
||||
GURL inputw(ConvertUTF8ToUTF16(resolve_cases[i].base));
|
||||
GURL inputw(base::UTF8ToUTF16(resolve_cases[i].base));
|
||||
GURL outputw =
|
||||
input.Resolve(ConvertUTF8ToUTF16(resolve_cases[i].relative));
|
||||
input.Resolve(base::UTF8ToUTF16(resolve_cases[i].relative));
|
||||
EXPECT_EQ(resolve_cases[i].expected_valid, outputw.is_valid()) << i;
|
||||
EXPECT_EQ(resolve_cases[i].expected, outputw.spec()) << i;
|
||||
EXPECT_EQ(outputw.SchemeIsFileSystem(), outputw.inner_url() != NULL);
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
namespace url {
|
||||
|
||||
using test_utils::WStringToUTF16;
|
||||
|
||||
namespace {
|
||||
|
||||
// Wrapper around a UConverter object that managers creation and destruction.
|
||||
@ -64,7 +62,8 @@ TEST(URLCanonIcuTest, ICUCharsetConverter) {
|
||||
std::string str;
|
||||
StdStringCanonOutput output(&str);
|
||||
|
||||
base::string16 input_str(WStringToUTF16(icu_cases[i].input));
|
||||
base::string16 input_str(
|
||||
test_utils::TruncateWStringToUTF16(icu_cases[i].input));
|
||||
int input_len = static_cast<int>(input_str.length());
|
||||
converter.ConvertFromUTF16(input_str.c_str(), input_len, &output);
|
||||
output.Complete();
|
||||
@ -134,7 +133,8 @@ TEST(URLCanonIcuTest, QueryWithConverter) {
|
||||
}
|
||||
|
||||
if (query_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(query_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(query_cases[i].input16));
|
||||
int len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, len);
|
||||
std::string out_str;
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
#include "base/macros.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "url/third_party/mozilla/url_parse.h"
|
||||
#include "url/url_canon.h"
|
||||
@ -15,10 +16,6 @@
|
||||
|
||||
namespace url {
|
||||
|
||||
using test_utils::WStringToUTF16;
|
||||
using test_utils::ConvertUTF8ToUTF16;
|
||||
using test_utils::ConvertUTF16ToUTF8;
|
||||
|
||||
namespace {
|
||||
|
||||
struct ComponentCase {
|
||||
@ -195,7 +192,8 @@ TEST(URLCanonTest, UTF) {
|
||||
out_str.clear();
|
||||
StdStringCanonOutput output(&out_str);
|
||||
|
||||
base::string16 input_str(WStringToUTF16(utf_cases[i].input16));
|
||||
base::string16 input_str(
|
||||
test_utils::TruncateWStringToUTF16(utf_cases[i].input16));
|
||||
int input_len = static_cast<int>(input_str.length());
|
||||
bool success = true;
|
||||
for (int ch = 0; ch < input_len; ch++) {
|
||||
@ -213,11 +211,12 @@ TEST(URLCanonTest, UTF) {
|
||||
|
||||
// UTF-16 -> UTF-8
|
||||
std::string input8_str(utf_cases[i].input8);
|
||||
base::string16 input16_str(WStringToUTF16(utf_cases[i].input16));
|
||||
EXPECT_EQ(input8_str, ConvertUTF16ToUTF8(input16_str));
|
||||
base::string16 input16_str(
|
||||
test_utils::TruncateWStringToUTF16(utf_cases[i].input16));
|
||||
EXPECT_EQ(input8_str, base::UTF16ToUTF8(input16_str));
|
||||
|
||||
// UTF-8 -> UTF-16
|
||||
EXPECT_EQ(input16_str, ConvertUTF8ToUTF16(input8_str));
|
||||
EXPECT_EQ(input16_str, base::UTF8ToUTF16(input8_str));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -265,7 +264,7 @@ TEST(URLCanonTest, Scheme) {
|
||||
out_str.clear();
|
||||
StdStringCanonOutput output2(&out_str);
|
||||
|
||||
base::string16 wide_input(ConvertUTF8ToUTF16(scheme_cases[i].input));
|
||||
base::string16 wide_input(base::UTF8ToUTF16(scheme_cases[i].input));
|
||||
in_comp.len = static_cast<int>(wide_input.length());
|
||||
success = CanonicalizeScheme(wide_input.c_str(), in_comp, &output2,
|
||||
&out_comp);
|
||||
@ -530,7 +529,8 @@ TEST(URLCanonTest, Host) {
|
||||
|
||||
// Wide version.
|
||||
if (host_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(host_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(host_cases[i].input16));
|
||||
int host_len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, host_len);
|
||||
Component out_comp;
|
||||
@ -580,7 +580,8 @@ TEST(URLCanonTest, Host) {
|
||||
|
||||
// Wide version.
|
||||
if (host_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(host_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(host_cases[i].input16));
|
||||
int host_len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, host_len);
|
||||
|
||||
@ -702,7 +703,8 @@ TEST(URLCanonTest, IPv4) {
|
||||
}
|
||||
|
||||
// 16-bit version.
|
||||
base::string16 input16(WStringToUTF16(cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(cases[i].input16));
|
||||
component = Component(0, static_cast<int>(input16.length()));
|
||||
|
||||
std::string out_str2;
|
||||
@ -854,7 +856,8 @@ TEST(URLCanonTest, IPv6) {
|
||||
}
|
||||
|
||||
// 16-bit version.
|
||||
base::string16 input16(WStringToUTF16(cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(cases[i].input16));
|
||||
component = Component(0, static_cast<int>(input16.length()));
|
||||
|
||||
std::string out_str2;
|
||||
@ -906,7 +909,8 @@ TEST(URLCanonTest, CanonicalizeHostSubstring) {
|
||||
std::string out_str;
|
||||
StdStringCanonOutput output(&out_str);
|
||||
EXPECT_FALSE(CanonicalizeHostSubstring(
|
||||
WStringToUTF16(L"\xfdd0zyx.com").c_str(), Component(0, 8), &output));
|
||||
test_utils::TruncateWStringToUTF16(L"\xfdd0zyx.com").c_str(),
|
||||
Component(0, 8), &output));
|
||||
output.Complete();
|
||||
EXPECT_EQ("%EF%BF%BDzyx.com", out_str);
|
||||
}
|
||||
@ -984,7 +988,7 @@ TEST(URLCanonTest, UserInfo) {
|
||||
// Now try the wide version
|
||||
out_str.clear();
|
||||
StdStringCanonOutput output2(&out_str);
|
||||
base::string16 wide_input(ConvertUTF8ToUTF16(user_info_cases[i].input));
|
||||
base::string16 wide_input(base::UTF8ToUTF16(user_info_cases[i].input));
|
||||
success = CanonicalizeUserInfo(wide_input.c_str(),
|
||||
parsed.username,
|
||||
wide_input.c_str(),
|
||||
@ -1047,7 +1051,7 @@ TEST(URLCanonTest, Port) {
|
||||
// Now try the wide version
|
||||
out_str.clear();
|
||||
StdStringCanonOutput output2(&out_str);
|
||||
base::string16 wide_input(ConvertUTF8ToUTF16(port_cases[i].input));
|
||||
base::string16 wide_input(base::UTF8ToUTF16(port_cases[i].input));
|
||||
success = CanonicalizePort(wide_input.c_str(),
|
||||
in_comp,
|
||||
port_cases[i].default_port,
|
||||
@ -1167,7 +1171,8 @@ TEST(URLCanonTest, Path) {
|
||||
}
|
||||
|
||||
if (path_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(path_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(path_cases[i].input16));
|
||||
int len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, len);
|
||||
Component out_comp;
|
||||
@ -1242,7 +1247,8 @@ TEST(URLCanonTest, Query) {
|
||||
}
|
||||
|
||||
if (query_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(query_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(query_cases[i].input16));
|
||||
int len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, len);
|
||||
std::string out_str;
|
||||
@ -1304,7 +1310,8 @@ TEST(URLCanonTest, Ref) {
|
||||
|
||||
// 16-bit input
|
||||
if (ref_cases[i].input16) {
|
||||
base::string16 input16(WStringToUTF16(ref_cases[i].input16));
|
||||
base::string16 input16(
|
||||
test_utils::TruncateWStringToUTF16(ref_cases[i].input16));
|
||||
int len = static_cast<int>(input16.length());
|
||||
Component in_comp(0, len);
|
||||
Component out_comp;
|
||||
@ -1940,12 +1947,12 @@ TEST(URLCanonTest, _itow_s) {
|
||||
const base::char16 fill_char = 0xffff;
|
||||
memset(buf, fill_mem, sizeof(buf));
|
||||
EXPECT_EQ(0, _itow_s(12, buf, sizeof(buf) / 2 - 1, 10));
|
||||
EXPECT_EQ(WStringToUTF16(L"12"), base::string16(buf));
|
||||
EXPECT_EQ(base::UTF8ToUTF16("12"), base::string16(buf));
|
||||
EXPECT_EQ(fill_char, buf[3]);
|
||||
|
||||
// Test the edge cases - exactly the buffer size and one over
|
||||
EXPECT_EQ(0, _itow_s(1234, buf, sizeof(buf) / 2 - 1, 10));
|
||||
EXPECT_EQ(WStringToUTF16(L"1234"), base::string16(buf));
|
||||
EXPECT_EQ(base::UTF8ToUTF16("1234"), base::string16(buf));
|
||||
EXPECT_EQ(fill_char, buf[5]);
|
||||
|
||||
memset(buf, fill_mem, sizeof(buf));
|
||||
@ -1955,12 +1962,13 @@ TEST(URLCanonTest, _itow_s) {
|
||||
// Test the template overload (note that this will see the full buffer)
|
||||
memset(buf, fill_mem, sizeof(buf));
|
||||
EXPECT_EQ(0, _itow_s(12, buf, 10));
|
||||
EXPECT_EQ(WStringToUTF16(L"12"), base::string16(buf));
|
||||
EXPECT_EQ(base::UTF8ToUTF16("12"),
|
||||
base::string16(buf));
|
||||
EXPECT_EQ(fill_char, buf[3]);
|
||||
|
||||
memset(buf, fill_mem, sizeof(buf));
|
||||
EXPECT_EQ(0, _itow_s(12345, buf, 10));
|
||||
EXPECT_EQ(WStringToUTF16(L"12345"), base::string16(buf));
|
||||
EXPECT_EQ(base::UTF8ToUTF16("12345"), base::string16(buf));
|
||||
|
||||
EXPECT_EQ(EINVAL, _itow_s(123456, buf, 10));
|
||||
}
|
||||
@ -2196,7 +2204,7 @@ TEST(URLCanonTest, ReplacementOverflow) {
|
||||
for (int i = 0; i < 4800; i++)
|
||||
new_query.push_back('a');
|
||||
|
||||
base::string16 new_path(WStringToUTF16(L"/foo"));
|
||||
base::string16 new_path(test_utils::TruncateWStringToUTF16(L"/foo"));
|
||||
repl.SetPath(new_path.c_str(), Component(0, 4));
|
||||
repl.SetQuery(new_query.c_str(),
|
||||
Component(0, static_cast<int>(new_query.length())));
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <string>
|
||||
|
||||
#include "base/strings/string16.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "url/url_canon_internal.h"
|
||||
|
||||
@ -18,10 +19,12 @@ namespace url {
|
||||
|
||||
namespace test_utils {
|
||||
|
||||
// Converts a UTF-16 string from native wchar_t format to char16, by
|
||||
// truncating the high 32 bits. This is not meant to handle true UTF-32
|
||||
// encoded strings.
|
||||
inline base::string16 WStringToUTF16(const wchar_t* src) {
|
||||
// Converts a UTF-16 string from native wchar_t format to char16 by
|
||||
// truncating the high 32 bits. This is different than the conversion function
|
||||
// in base bacause it passes invalid UTF-16 characters which is important for
|
||||
// test purposes. As a result, this is not meant to handle true UTF-32 encoded
|
||||
// strings.
|
||||
inline base::string16 TruncateWStringToUTF16(const wchar_t* src) {
|
||||
base::string16 str;
|
||||
int length = static_cast<int>(wcslen(src));
|
||||
for (int i = 0; i < length; ++i) {
|
||||
@ -30,25 +33,6 @@ inline base::string16 WStringToUTF16(const wchar_t* src) {
|
||||
return str;
|
||||
}
|
||||
|
||||
// Converts a string from UTF-8 to UTF-16.
|
||||
inline base::string16 ConvertUTF8ToUTF16(const std::string& src) {
|
||||
int length = static_cast<int>(src.length());
|
||||
EXPECT_LT(length, 1024);
|
||||
RawCanonOutputW<1024> output;
|
||||
EXPECT_TRUE(ConvertUTF8ToUTF16(src.data(), length, &output));
|
||||
return base::string16(output.data(), output.length());
|
||||
}
|
||||
|
||||
// Converts a string from UTF-16 to UTF-8.
|
||||
inline std::string ConvertUTF16ToUTF8(const base::string16& src) {
|
||||
std::string str;
|
||||
StdStringCanonOutput output(&str);
|
||||
EXPECT_TRUE(ConvertUTF16ToUTF8(src.data(), static_cast<int>(src.length()),
|
||||
&output));
|
||||
output.Complete();
|
||||
return str;
|
||||
}
|
||||
|
||||
} // namespace test_utils
|
||||
|
||||
} // namespace url
|
||||
|
@ -214,15 +214,15 @@ TEST(URLUtilTest, DecodeURLEscapeSequences) {
|
||||
RawCanonOutputT<base::char16> output;
|
||||
DecodeURLEscapeSequences(input, strlen(input), &output);
|
||||
EXPECT_EQ(decode_cases[i].output,
|
||||
test_utils::ConvertUTF16ToUTF8(base::string16(output.data(),
|
||||
output.length())));
|
||||
base::UTF16ToUTF8(base::string16(output.data(),
|
||||
output.length())));
|
||||
}
|
||||
|
||||
// Our decode should decode %00
|
||||
const char zero_input[] = "%00";
|
||||
RawCanonOutputT<base::char16> zero_output;
|
||||
DecodeURLEscapeSequences(zero_input, strlen(zero_input), &zero_output);
|
||||
EXPECT_NE("%00", test_utils::ConvertUTF16ToUTF8(
|
||||
EXPECT_NE("%00", base::UTF16ToUTF8(
|
||||
base::string16(zero_output.data(), zero_output.length())));
|
||||
|
||||
// Test the error behavior for invalid UTF-8.
|
||||
|
Reference in New Issue
Block a user