OLD | NEW |
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 Loading... |
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}, |
52 }; | 53 }; |
53 | 54 |
54 TEST(StringUtilTest, TrimWhitespace) { | 55 TEST(StringUtilTest, TrimWhitespace) { |
55 std::wstring output; // Allow contents to carry over to next testcase | 56 std::wstring output; // Allow contents to carry over to next testcase |
56 for (size_t i = 0; i < arraysize(trim_cases); ++i) { | 57 for (size_t i = 0; i < arraysize(trim_cases); ++i) { |
57 const trim_case& value = trim_cases[i]; | 58 const trim_case& value = trim_cases[i]; |
58 EXPECT_EQ(value.return_value, | 59 EXPECT_EQ(value.return_value, |
59 TrimWhitespace(value.input, value.positions, &output)); | 60 TrimWhitespace(value.input, value.positions, &output)); |
60 EXPECT_EQ(value.output, output); | 61 EXPECT_EQ(value.output, output); |
61 } | 62 } |
(...skipping 10 matching lines...) Expand all Loading... |
72 | 73 |
73 std::string output_ascii; | 74 std::string output_ascii; |
74 for (size_t i = 0; i < arraysize(trim_cases_ascii); ++i) { | 75 for (size_t i = 0; i < arraysize(trim_cases_ascii); ++i) { |
75 const trim_case_ascii& value = trim_cases_ascii[i]; | 76 const trim_case_ascii& value = trim_cases_ascii[i]; |
76 EXPECT_EQ(value.return_value, | 77 EXPECT_EQ(value.return_value, |
77 TrimWhitespace(value.input, value.positions, &output_ascii)); | 78 TrimWhitespace(value.input, value.positions, &output_ascii)); |
78 EXPECT_EQ(value.output, output_ascii); | 79 EXPECT_EQ(value.output, output_ascii); |
79 } | 80 } |
80 } | 81 } |
81 | 82 |
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 | |
128 static const struct collapse_case { | 83 static const struct collapse_case { |
129 const wchar_t* input; | 84 const wchar_t* input; |
130 const bool trim; | 85 const bool trim; |
131 const wchar_t* output; | 86 const wchar_t* output; |
132 } collapse_cases[] = { | 87 } collapse_cases[] = { |
133 {L" Google Video ", false, L"Google Video"}, | 88 {L" Google Video ", false, L"Google Video"}, |
134 {L"Google Video", false, L"Google Video"}, | 89 {L"Google Video", false, L"Google Video"}, |
135 {L"", false, L""}, | 90 {L"", false, L""}, |
136 {L" ", false, L""}, | 91 {L" ", false, L""}, |
137 {L"\t\rTest String\n", false, L"Test String"}, | 92 {L"\t\rTest String\n", false, L"Test String"}, |
(...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1567 } | 1522 } |
1568 } | 1523 } |
1569 | 1524 |
1570 TEST(StringUtilTest, HexEncode) { | 1525 TEST(StringUtilTest, HexEncode) { |
1571 std::string hex(HexEncode(NULL, 0)); | 1526 std::string hex(HexEncode(NULL, 0)); |
1572 EXPECT_EQ(hex.length(), 0U); | 1527 EXPECT_EQ(hex.length(), 0U); |
1573 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; | 1528 unsigned char bytes[] = {0x01, 0xff, 0x02, 0xfe, 0x03, 0x80, 0x81}; |
1574 hex = HexEncode(bytes, sizeof(bytes)); | 1529 hex = HexEncode(bytes, sizeof(bytes)); |
1575 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); | 1530 EXPECT_EQ(hex.compare("01FF02FE038081"), 0); |
1576 } | 1531 } |
OLD | NEW |