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

Side by Side Diff: chrome/browser/sync/notifier/base/string_unittest.cc

Issue 194065: Initial commit of sync engine code to browser/sync.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fixes to gtest include path, reverted syncapi. Created 11 years, 3 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
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/sync/notifier/base/string.h"
6 #include "notifier/testing/notifier/unittest.h"
7
8 namespace notifier {
9
10 TEST_NOTIFIER_F(StringTest);
11
12 TEST_F(StringTest, StringToInt) {
13 ASSERT_EQ(StringToInt("625"), 625);
14 ASSERT_EQ(StringToInt("6"), 6);
15 ASSERT_EQ(StringToInt("0"), 0);
16 ASSERT_EQ(StringToInt(" 122"), 122);
17 ASSERT_EQ(StringToInt("a"), 0);
18 ASSERT_EQ(StringToInt(" a"), 0);
19 ASSERT_EQ(StringToInt("2147483647"), 2147483647);
20 ASSERT_EQ(StringToInt("-2147483648"),
21 static_cast<int>(0x80000000)); // Hex constant avoids gcc warning.
22
23 int value = 0;
24 ASSERT_FALSE(ParseStringToInt("62.5", &value, true));
25 ASSERT_FALSE(ParseStringToInt("625e", &value, true));
26 ASSERT_FALSE(ParseStringToInt("2147483648", &value, true));
27 ASSERT_FALSE(ParseStringToInt("-2147483649", &value, true));
28 ASSERT_FALSE(ParseStringToInt("-4857004031", &value, true));
29 }
30
31 TEST_F(StringTest, StringToUint) {
32 ASSERT_EQ(StringToUint("625"), 625);
33 ASSERT_EQ(StringToUint("6"), 6);
34 ASSERT_EQ(StringToUint("0"), 0);
35 ASSERT_EQ(StringToUint(" 122"), 122);
36 ASSERT_EQ(StringToUint("a"), 0);
37 ASSERT_EQ(StringToUint(" a"), 0);
38 ASSERT_EQ(StringToUint("4294967295"), static_cast<uint32>(0xffffffff));
39
40 uint32 value = 0;
41 ASSERT_FALSE(ParseStringToUint("62.5", &value, true));
42 ASSERT_FALSE(ParseStringToUint("625e", &value, true));
43 ASSERT_FALSE(ParseStringToUint("4294967296", &value, true));
44 ASSERT_FALSE(ParseStringToUint("-1", &value, true));
45 }
46
47 TEST_F(StringTest, StringToInt64) {
48 ASSERT_EQ(StringToInt64("119600064000000000"),
49 INT64_C(119600064000000000));
50 ASSERT_EQ(StringToInt64(" 119600064000000000"),
51 INT64_C(119600064000000000));
52 ASSERT_EQ(StringToInt64("625"), 625);
53 ASSERT_EQ(StringToInt64("6"), 6);
54 ASSERT_EQ(StringToInt64("0"), 0);
55 ASSERT_EQ(StringToInt64(" 122"), 122);
56 ASSERT_EQ(StringToInt64("a"), 0);
57 ASSERT_EQ(StringToInt64(" a"), 0);
58 ASSERT_EQ(StringToInt64("9223372036854775807"), INT64_C(9223372036854775807));
59 ASSERT_EQ(StringToInt64("-9223372036854775808I64"),
60 static_cast<int64>(INT64_C(0x8000000000000000)));
61
62 int64 value = 0;
63 ASSERT_FALSE(ParseStringToInt64("62.5", &value, true));
64 ASSERT_FALSE(ParseStringToInt64("625e", &value, true));
65 ASSERT_FALSE(ParseStringToInt64("9223372036854775808", &value, true));
66 ASSERT_FALSE(ParseStringToInt64("-9223372036854775809", &value, true));
67 }
68
69 TEST_F(StringTest, StringToDouble) {
70 ASSERT_DOUBLE_EQ(StringToDouble("625"), 625);
71 ASSERT_DOUBLE_EQ(StringToDouble("-625"), -625);
72 ASSERT_DOUBLE_EQ(StringToDouble("-6.25"), -6.25);
73 ASSERT_DOUBLE_EQ(StringToDouble("6.25"), 6.25);
74 ASSERT_DOUBLE_EQ(StringToDouble("0.00"), 0);
75 ASSERT_DOUBLE_EQ(StringToDouble(" 55.1"), 55.1);
76 ASSERT_DOUBLE_EQ(StringToDouble(" 55.001"), 55.001);
77 ASSERT_DOUBLE_EQ(StringToDouble(" 1.001"), 1.001);
78
79 double value = 0.0;
80 ASSERT_FALSE(ParseStringToDouble("62*5", &value, true));
81 }
82
83 TEST_F(StringTest, Int64ToHexString) {
84 ASSERT_STREQ("1a8e79fe1d58000",
85 Int64ToHexString(INT64_C(119600064000000000)).c_str());
86 ASSERT_STREQ("271", Int64ToHexString(625).c_str());
87 ASSERT_STREQ("0", Int64ToHexString(0).c_str());
88 }
89
90 TEST_F(StringTest, StringStartsWith) {
91 { std::string s(""); ASSERT_TRUE(StringStartsWith(s, "")); }
92 { std::string s("abc"); ASSERT_TRUE(StringStartsWith(s, "ab")); }
93 { std::string s("abc"); ASSERT_FALSE(StringStartsWith(s, "bc")); }
94 }
95
96 TEST_F(StringTest, StringEndsWith) {
97 { std::string s(""); ASSERT_TRUE(StringEndsWith(s, "")); }
98 { std::string s("abc"); ASSERT_TRUE(StringEndsWith(s, "bc")); }
99 { std::string s("abc"); ASSERT_FALSE(StringEndsWith(s, "ab")); }
100 }
101
102 TEST_F(StringTest, MakeStringEndWith) {
103 {
104 std::string s("");
105 std::string t(MakeStringEndWith(s, ""));
106 ASSERT_STREQ(t.c_str(), "");
107 }
108 {
109 std::string s("abc");
110 std::string t(MakeStringEndWith(s, "def"));
111 ASSERT_STREQ(t.c_str(), "abcdef");
112 }
113 {
114 std::string s("abc");
115 std::string t(MakeStringEndWith(s, "bc"));
116 ASSERT_STREQ(t.c_str(), "abc");
117 }
118 }
119
120 TEST_F(StringTest, LowerString) {
121 { std::string s(""); LowerString(&s); ASSERT_STREQ(s.c_str(), ""); }
122 { std::string s("a"); LowerString(&s); ASSERT_STREQ(s.c_str(), "a"); }
123 { std::string s("A"); LowerString(&s); ASSERT_STREQ(s.c_str(), "a"); }
124 { std::string s("abc"); LowerString(&s); ASSERT_STREQ(s.c_str(), "abc"); }
125 { std::string s("ABC"); LowerString(&s); ASSERT_STREQ(s.c_str(), "abc"); }
126 }
127
128 TEST_F(StringTest, UpperString) {
129 { std::string s(""); UpperString(&s); ASSERT_STREQ(s.c_str(), ""); }
130 { std::string s("A"); UpperString(&s); ASSERT_STREQ(s.c_str(), "A"); }
131 { std::string s("a"); UpperString(&s); ASSERT_STREQ(s.c_str(), "A"); }
132 { std::string s("ABC"); UpperString(&s); ASSERT_STREQ(s.c_str(), "ABC"); }
133 { std::string s("abc"); UpperString(&s); ASSERT_STREQ(s.c_str(), "ABC"); }
134 }
135
136 TEST_F(StringTest, TrimString) {
137 const char* white = " \n\t";
138 std::string s, c;
139
140 // TrimStringLeft
141 s = ""; // empty
142 c = "";
143 ASSERT_EQ(TrimStringLeft(&s, white), 0);
144 ASSERT_STREQ(s.c_str(), c.c_str());
145
146 s = " \n\t"; // all bad
147 c = "";
148 ASSERT_EQ(TrimStringLeft(&s, white), 3);
149 ASSERT_STREQ(s.c_str(), c.c_str());
150
151 s = "dog"; // nothing bad
152 c = "dog";
153 ASSERT_EQ(TrimStringLeft(&s, white), 0);
154 ASSERT_STREQ(s.c_str(), c.c_str());
155
156 s = " dog "; // some bad
157 c = "dog ";
158 ASSERT_EQ(TrimStringLeft(&s, white), 1);
159 ASSERT_STREQ(s.c_str(), c.c_str());
160
161 s = " \n\t\t I love my little dog \n\t ";
162 c = "I love my little dog \n\t ";
163 ASSERT_EQ(TrimStringLeft(&s, white), 5);
164 ASSERT_STREQ(s.c_str(), c.c_str());
165
166 // TrimStringRight
167 s = "";
168 c = "";
169 ASSERT_EQ(TrimStringRight(&s, white), 0);
170 ASSERT_STREQ(s.c_str(), c.c_str());
171
172 s = " \n\t";
173 c = "";
174 ASSERT_EQ(TrimStringRight(&s, white), 3);
175 ASSERT_STREQ(s.c_str(), c.c_str());
176
177 s = "dog";
178 c = "dog";
179 ASSERT_EQ(TrimStringRight(&s, white), 0);
180 ASSERT_STREQ(s.c_str(), c.c_str());
181
182 s = " dog ";
183 c = " dog";
184 ASSERT_EQ(TrimStringRight(&s, white), 1);
185 ASSERT_STREQ(s.c_str(), c.c_str());
186
187 s = " \n\t\t I love my little dog \n\t ";
188 c = " \n\t\t I love my little dog";
189 ASSERT_EQ(TrimStringRight(&s, white), 4);
190 ASSERT_STREQ(s.c_str(), c.c_str());
191
192 // TrimString
193 s = "";
194 c = "";
195 ASSERT_EQ(TrimString(&s, white), 0);
196 ASSERT_STREQ(s.c_str(), c.c_str());
197
198 s = " \n\t";
199 c = "";
200 ASSERT_EQ(TrimString(&s, white), 3);
201 ASSERT_STREQ(s.c_str(), c.c_str());
202
203 s = "dog";
204 c = "dog";
205 ASSERT_EQ(TrimString(&s, white), 0);
206 ASSERT_STREQ(s.c_str(), c.c_str());
207
208 s = " dog ";
209 c = "dog";
210 ASSERT_EQ(TrimString(&s, white), 2);
211 ASSERT_STREQ(s.c_str(), c.c_str());
212
213 s = " \n\t\t I love my little dog \n\t ";
214 c = "I love my little dog";
215 ASSERT_EQ(TrimString(&s, white), 9);
216 ASSERT_STREQ(s.c_str(), c.c_str());
217 }
218
219 TEST_F(StringTest, SplitOneStringToken) {
220 const char* teststrings[] = {
221 "alongword",
222 "alongword ",
223 "alongword ",
224 "alongword anotherword",
225 " alongword",
226 "",
227 };
228 const char* source = NULL;
229
230 source = teststrings[0];
231 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "alongword");
232 ASSERT_STREQ(source, NULL);
233
234 source = teststrings[1];
235 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "alongword");
236 ASSERT_STREQ(source, teststrings[1] + strlen("alongword") + 1);
237
238 source = teststrings[2];
239 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "alongword");
240 ASSERT_STREQ(source, teststrings[2] + strlen("alongword") + 1);
241
242 source = teststrings[3];
243 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "alongword");
244 ASSERT_STREQ(source, teststrings[3] + strlen("alongword") + 1);
245
246 source = teststrings[4];
247 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "");
248 ASSERT_STREQ(source, teststrings[4] + 1);
249
250 source = teststrings[5];
251 ASSERT_STREQ(SplitOneStringToken(&source, " ").c_str(), "");
252 ASSERT_STREQ(source, NULL);
253 }
254
255 TEST_F(StringTest, FixedString) {
256 // Test basic operation.
257 const wchar_t kData[] = L"hello world";
258 FixedString<wchar_t, 40> buf;
259
260 buf.Append(kData);
261 EXPECT_EQ(arraysize(kData)-1, buf.size());
262 EXPECT_EQ(0, wcscmp(kData, buf.get()));
263
264 buf.Append(' ');
265 buf.Append(kData);
266 const wchar_t kExpected[] = L"hello world hello world";
267 EXPECT_EQ(arraysize(kExpected)-1, buf.size());
268 EXPECT_EQ(0, wcscmp(kExpected, buf.get()));
269 EXPECT_EQ(false, buf.was_truncated());
270
271 // Test overflow.
272 FixedString<wchar_t, 5> buf2;
273 buf2.Append(L"hello world");
274 EXPECT_EQ(static_cast<size_t>(0), buf2.size());
275 EXPECT_EQ(0, buf2.get()[0]);
276 EXPECT_EQ(true, buf2.was_truncated());
277 }
278
279 TEST_F(StringTest, LowerToPascalCase) {
280 EXPECT_STREQ("", LowerWithUnderToPascalCase("").c_str());
281 EXPECT_STREQ("A", LowerWithUnderToPascalCase("a").c_str());
282 EXPECT_STREQ("TestS", LowerWithUnderToPascalCase("test_s").c_str());
283 EXPECT_STREQ("XQ", LowerWithUnderToPascalCase("x_q").c_str());
284 EXPECT_STREQ("XQDNS", LowerWithUnderToPascalCase("x_qDNS").c_str());
285 }
286
287 TEST_F(StringTest, PascalCaseToLower) {
288 EXPECT_STREQ("", PascalCaseToLowerWithUnder("").c_str());
289 EXPECT_STREQ("a", PascalCaseToLowerWithUnder("A").c_str());
290 EXPECT_STREQ("test_s", PascalCaseToLowerWithUnder("TestS").c_str());
291 EXPECT_STREQ("xq", PascalCaseToLowerWithUnder("XQ").c_str());
292 EXPECT_STREQ("dns_name", PascalCaseToLowerWithUnder("DNSName").c_str());
293 EXPECT_STREQ("xqdns", PascalCaseToLowerWithUnder("XQDNS").c_str());
294 EXPECT_STREQ("xqdn_sa", PascalCaseToLowerWithUnder("XQDNSa").c_str());
295 EXPECT_STREQ("dns1", PascalCaseToLowerWithUnder("DNS1").c_str());
296 }
297
298 TEST_F(StringTest, HtmlEncode) {
299 EXPECT_STREQ("dns", HtmlEncode("dns").c_str());
300 EXPECT_STREQ("&amp;", HtmlEncode("&").c_str());
301 EXPECT_STREQ("&amp;amp;", HtmlEncode("&amp;").c_str());
302 EXPECT_STREQ("&lt;!&gt;", HtmlEncode("<!>").c_str());
303 }
304
305 TEST_F(StringTest, HtmlDecode) {
306 EXPECT_STREQ("dns", HtmlDecode("dns").c_str());
307 EXPECT_STREQ("&", HtmlDecode("&amp;").c_str());
308 EXPECT_STREQ("&amp;", HtmlDecode("&amp;amp;").c_str());
309 EXPECT_STREQ("<!>", HtmlDecode("&lt;!&gt;").c_str());
310 }
311
312 TEST_F(StringTest, UrlEncode) {
313 EXPECT_STREQ("%26", UrlEncode("&").c_str());
314 EXPECT_STREQ("%3f%20", UrlEncode("? ").c_str());
315 EXPECT_STREQ("as%20dfdsa", UrlEncode("as dfdsa").c_str());
316 EXPECT_STREQ("%3c!%3e", UrlEncode("<!>").c_str());
317 EXPECT_STREQ("!%23!", UrlEncode("!#!").c_str());
318 EXPECT_STREQ("!!", UrlEncode("!!").c_str());
319 }
320
321 TEST_F(StringTest, UrlDecode) {
322 EXPECT_STREQ("&", UrlDecode("%26").c_str());
323 EXPECT_STREQ("? ", UrlDecode("%3f%20").c_str());
324 EXPECT_STREQ("as dfdsa", UrlDecode("as%20dfdsa").c_str());
325 EXPECT_STREQ("<!>", UrlDecode("%3c!%3e").c_str());
326 EXPECT_STREQ("&amp;", UrlDecode("&amp;").c_str());
327 }
328
329 TEST_F(StringTest, StringReplace) {
330 // Test StringReplace core functionality.
331 std::string s = "<attribute name=abcd/>";
332 StringReplace(&s, "=", " = ", false);
333 EXPECT_STREQ(s.c_str(), "<attribute name = abcd/>");
334
335 // Test for negative case.
336 s = "<attribute name=abcd/>";
337 StringReplace(&s, "-", "=", false);
338 EXPECT_STREQ(s.c_str(), "<attribute name=abcd/>");
339
340 // Test StringReplace core functionality with replace_all flag set.
341 s = "<attribute name==abcd/>";
342 StringReplace(&s, "=", " = ", true);
343 EXPECT_STREQ(s.c_str(), "<attribute name = = abcd/>");
344
345 // Input is an empty string.
346 s = "";
347 StringReplace(&s, "=", " = ", false);
348 EXPECT_STREQ(s.c_str(), "");
349
350 // Input is an empty string and this is a request for repeated
351 // string replaces.
352 s = "";
353 StringReplace(&s, "=", " = ", true);
354 EXPECT_STREQ(s.c_str(), "");
355
356 // Input and string to replace is an empty string.
357 s = "";
358 StringReplace(&s, "", " = ", false);
359 EXPECT_STREQ(s.c_str(), "");
360 }
361
362 } // namespace notifier
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698