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

Side by Side Diff: base/string_util_unittest.cc

Issue 20219: Fixes Issue 7377: Regression: Omnibox trims URL ending with 0x85... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/string_util.cc ('k') | build/googleurl.xcodeproj/project.pbxproj » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <math.h> 5 #include <math.h>
6 #include <stdarg.h> 6 #include <stdarg.h>
7 7
8 #include <limits> 8 #include <limits>
9 #include <sstream> 9 #include <sstream>
10 10
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 } trim_cases_ascii[] = { 42 } trim_cases_ascii[] = {
43 {" Google Video ", TRIM_LEADING, "Google Video ", TRIM_LEADING}, 43 {" Google Video ", TRIM_LEADING, "Google Video ", TRIM_LEADING},
44 {" Google Video ", TRIM_TRAILING, " Google Video", TRIM_TRAILING}, 44 {" Google Video ", TRIM_TRAILING, " Google Video", TRIM_TRAILING},
45 {" Google Video ", TRIM_ALL, "Google Video", TRIM_ALL}, 45 {" Google Video ", TRIM_ALL, "Google Video", TRIM_ALL},
46 {"Google Video", TRIM_ALL, "Google Video", TRIM_NONE}, 46 {"Google Video", TRIM_ALL, "Google Video", TRIM_NONE},
47 {"", TRIM_ALL, "", TRIM_NONE}, 47 {"", TRIM_ALL, "", TRIM_NONE},
48 {" ", TRIM_LEADING, "", TRIM_LEADING}, 48 {" ", TRIM_LEADING, "", TRIM_LEADING},
49 {" ", TRIM_TRAILING, "", TRIM_TRAILING}, 49 {" ", TRIM_TRAILING, "", TRIM_TRAILING},
50 {" ", TRIM_ALL, "", TRIM_ALL}, 50 {" ", TRIM_ALL, "", TRIM_ALL},
51 {"\t\rTest String\n", TRIM_ALL, "Test String", TRIM_ALL}, 51 {"\t\rTest String\n", TRIM_ALL, "Test String", TRIM_ALL},
52 {"\x85Test String\xa0\x20", TRIM_ALL, "Test String", TRIM_ALL},
53 }; 52 };
54 53
55 TEST(StringUtilTest, TrimWhitespace) { 54 TEST(StringUtilTest, TrimWhitespace) {
56 std::wstring output; // Allow contents to carry over to next testcase 55 std::wstring output; // Allow contents to carry over to next testcase
57 for (size_t i = 0; i < arraysize(trim_cases); ++i) { 56 for (size_t i = 0; i < arraysize(trim_cases); ++i) {
58 const trim_case& value = trim_cases[i]; 57 const trim_case& value = trim_cases[i];
59 EXPECT_EQ(value.return_value, 58 EXPECT_EQ(value.return_value,
60 TrimWhitespace(value.input, value.positions, &output)); 59 TrimWhitespace(value.input, value.positions, &output));
61 EXPECT_EQ(value.output, output); 60 EXPECT_EQ(value.output, output);
62 } 61 }
(...skipping 10 matching lines...) Expand all
73 72
74 std::string output_ascii; 73 std::string output_ascii;
75 for (size_t i = 0; i < arraysize(trim_cases_ascii); ++i) { 74 for (size_t i = 0; i < arraysize(trim_cases_ascii); ++i) {
76 const trim_case_ascii& value = trim_cases_ascii[i]; 75 const trim_case_ascii& value = trim_cases_ascii[i];
77 EXPECT_EQ(value.return_value, 76 EXPECT_EQ(value.return_value,
78 TrimWhitespace(value.input, value.positions, &output_ascii)); 77 TrimWhitespace(value.input, value.positions, &output_ascii));
79 EXPECT_EQ(value.output, output_ascii); 78 EXPECT_EQ(value.output, output_ascii);
80 } 79 }
81 } 80 }
82 81
82 static const struct trim_case_utf8 {
83 const char* input;
84 const TrimPositions positions;
85 const char* output;
86 const TrimPositions return_value;
87 } trim_cases_utf8[] = {
88 // UTF-8 strings that start (and end) with Unicode space characters
89 // (including zero-width spaces).
90 {"\xE2\x80\x80Test String\xE2\x80\x81", TRIM_ALL, "Test String", TRIM_ALL},
91 {"\xE2\x80\x82Test String\xE2\x80\x83", TRIM_ALL, "Test String", TRIM_ALL},
92 {"\xE2\x80\x84Test String\xE2\x80\x85", TRIM_ALL, "Test String", TRIM_ALL},
93 {"\xE2\x80\x86Test String\xE2\x80\x87", TRIM_ALL, "Test String", TRIM_ALL},
94 {"\xE2\x80\x88Test String\xE2\x80\x8A", TRIM_ALL, "Test String", TRIM_ALL},
95 {"\xE3\x80\x80Test String\xE3\x80\x80", TRIM_ALL, "Test String", TRIM_ALL},
96 // UTF-8 strings that end with 0x85 (NEL in ISO-8859).
97 {"\xD0\x85", TRIM_TRAILING, "\xD0\x85", TRIM_NONE},
98 {"\xD9\x85", TRIM_TRAILING, "\xD9\x85", TRIM_NONE},
99 {"\xEC\x97\x85", TRIM_TRAILING, "\xEC\x97\x85", TRIM_NONE},
100 {"\xF0\x90\x80\x85", TRIM_TRAILING, "\xF0\x90\x80\x85", TRIM_NONE},
101 // UTF-8 strings that end with 0xA0 (non-break space in ISO-8859-1).
102 {"\xD0\xA0", TRIM_TRAILING, "\xD0\xA0", TRIM_NONE},
103 {"\xD9\xA0", TRIM_TRAILING, "\xD9\xA0", TRIM_NONE},
104 {"\xEC\x97\xA0", TRIM_TRAILING, "\xEC\x97\xA0", TRIM_NONE},
105 {"\xF0\x90\x80\xA0", TRIM_TRAILING, "\xF0\x90\x80\xA0", TRIM_NONE},
106 };
107
108 TEST(StringUtilTest, TrimWhitespaceUTF8) {
109 std::string output_ascii;
110 for (size_t i = 0; i < arraysize(trim_cases_ascii); ++i) {
111 const trim_case_ascii& value = trim_cases_ascii[i];
112 EXPECT_EQ(value.return_value,
113 TrimWhitespaceASCII(value.input, value.positions, &output_ascii));
114 EXPECT_EQ(value.output, output_ascii);
115 }
116
117 // Test that TrimWhiteSpaceUTF8() can remove Unicode space characters and
118 // prevent from removing UTF-8 characters that end with an ISO-8859 NEL.
119 std::string output_utf8;
120 for (size_t i = 0; i < arraysize(trim_cases_utf8); ++i) {
121 const trim_case_utf8& value = trim_cases_utf8[i];
122 EXPECT_EQ(value.return_value,
123 TrimWhitespaceUTF8(value.input, value.positions, &output_utf8));
124 EXPECT_EQ(value.output, output_utf8);
125 }
126 }
127
83 static const struct collapse_case { 128 static const struct collapse_case {
84 const wchar_t* input; 129 const wchar_t* input;
85 const bool trim; 130 const bool trim;
86 const wchar_t* output; 131 const wchar_t* output;
87 } collapse_cases[] = { 132 } collapse_cases[] = {
88 {L" Google Video ", false, L"Google Video"}, 133 {L" Google Video ", false, L"Google Video"},
89 {L"Google Video", false, L"Google Video"}, 134 {L"Google Video", false, L"Google Video"},
90 {L"", false, L""}, 135 {L"", false, L""},
91 {L" ", false, L""}, 136 {L" ", false, L""},
92 {L"\t\rTest String\n", false, L"Test String"}, 137 {L"\t\rTest String\n", false, L"Test String"},
(...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1522 } 1567 }
1523 } 1568 }
1524 1569
1525 TEST(StringUtilTest, HexEncode) { 1570 TEST(StringUtilTest, HexEncode) {
1526 std::string hex(HexEncode(NULL, 0)); 1571 std::string hex(HexEncode(NULL, 0));
1527 EXPECT_EQ(hex.length(), 0U); 1572 EXPECT_EQ(hex.length(), 0U);
1528 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; 1573 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81};
1529 hex = HexEncode(bytes, sizeof(bytes)); 1574 hex = HexEncode(bytes, sizeof(bytes));
1530 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); 1575 EXPECT_EQ(hex.compare("01FF02FE038081"), 0);
1531 } 1576 }
OLDNEW
« no previous file with comments | « base/string_util.cc ('k') | build/googleurl.xcodeproj/project.pbxproj » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698