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

Side by Side Diff: third_party/WebKit/Source/wtf/text/StringBuilderTest.cpp

Issue 1611343002: wtf reformat test Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pydent Created 4 years, 11 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 23 matching lines...) Expand all
34 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
35 #include "wtf/Assertions.h" 35 #include "wtf/Assertions.h"
36 #include "wtf/text/CString.h" 36 #include "wtf/text/CString.h"
37 #include "wtf/text/CharacterNames.h" 37 #include "wtf/text/CharacterNames.h"
38 #include "wtf/text/WTFString.h" 38 #include "wtf/text/WTFString.h"
39 39
40 namespace WTF { 40 namespace WTF {
41 41
42 namespace { 42 namespace {
43 43
44 void expectBuilderContent(const String& expected, const StringBuilder& builder) 44 void expectBuilderContent(const String& expected,
45 { 45 const StringBuilder& builder) {
46 // Not using builder.toString() because it changes internal state of builder . 46 // Not using builder.toString() because it changes internal state of builder.
47 if (builder.is8Bit()) 47 if (builder.is8Bit())
48 EXPECT_EQ(expected, String(builder.characters8(), builder.length())); 48 EXPECT_EQ(expected, String(builder.characters8(), builder.length()));
49 else 49 else
50 EXPECT_EQ(expected, String(builder.characters16(), builder.length())); 50 EXPECT_EQ(expected, String(builder.characters16(), builder.length()));
51 } 51 }
52 52
53 void expectEmpty(const StringBuilder& builder) 53 void expectEmpty(const StringBuilder& builder) {
54 { 54 EXPECT_EQ(0U, builder.length());
55 EXPECT_EQ(0U, builder.length()); 55 EXPECT_TRUE(builder.isEmpty());
56 EXPECT_TRUE(builder.isEmpty()); 56 EXPECT_EQ(0, builder.characters8());
57 EXPECT_EQ(0, builder.characters8()); 57 }
58 } 58 }
59 59
60 } 60 TEST(StringBuilderTest, DefaultConstructor) {
61 61 StringBuilder builder;
62 TEST(StringBuilderTest, DefaultConstructor) 62 expectEmpty(builder);
63 { 63 }
64 StringBuilder builder; 64
65 expectEmpty(builder); 65 TEST(StringBuilderTest, Append) {
66 } 66 StringBuilder builder;
67 67 builder.append(String("0123456789"));
68 TEST(StringBuilderTest, Append) 68 expectBuilderContent("0123456789", builder);
69 { 69 builder.append("abcd");
70 StringBuilder builder; 70 expectBuilderContent("0123456789abcd", builder);
71 builder.append(String("0123456789")); 71 builder.append("efgh", 3);
72 expectBuilderContent("0123456789", builder); 72 expectBuilderContent("0123456789abcdefg", builder);
73 builder.append("abcd"); 73 builder.append("");
74 expectBuilderContent("0123456789abcd", builder); 74 expectBuilderContent("0123456789abcdefg", builder);
75 builder.append("efgh", 3); 75 builder.append('#');
76 expectBuilderContent("0123456789abcdefg", builder); 76 expectBuilderContent("0123456789abcdefg#", builder);
77 builder.append(""); 77
78 expectBuilderContent("0123456789abcdefg", builder); 78 builder.toString(); // Test after reifyString().
79 builder.append('#'); 79 StringBuilder builder1;
80 expectBuilderContent("0123456789abcdefg#", builder); 80 builder.append("", 0);
81 81 expectBuilderContent("0123456789abcdefg#", builder);
82 builder.toString(); // Test after reifyString(). 82 builder1.append(builder.characters8(), builder.length());
83 StringBuilder builder1; 83 builder1.append("XYZ");
84 builder.append(builder1.characters8(), builder1.length());
85 expectBuilderContent("0123456789abcdefg#0123456789abcdefg#XYZ", builder);
86
87 StringBuilder builder2;
88 builder2.reserveCapacity(100);
89 builder2.append("xyz");
90 const LChar* characters = builder2.characters8();
91 builder2.append("0123456789");
92 EXPECT_EQ(characters, builder2.characters8());
93
94 // Test appending UChar32 characters to StringBuilder.
95 StringBuilder builderForUChar32Append;
96 UChar32 frakturAChar = 0x1D504;
97 builderForUChar32Append.append(
98 frakturAChar); // The fraktur A is not in the BMP, so it's two UTF-16 cod e units long.
99 EXPECT_EQ(2U, builderForUChar32Append.length());
100 builderForUChar32Append.append(static_cast<UChar32>('A'));
101 EXPECT_EQ(3U, builderForUChar32Append.length());
102 const UChar resultArray[] = {U16_LEAD(frakturAChar), U16_TRAIL(frakturAChar),
103 'A'};
104 expectBuilderContent(String(resultArray, WTF_ARRAY_LENGTH(resultArray)),
105 builderForUChar32Append);
106 }
107
108 TEST(StringBuilderTest, ToString) {
109 StringBuilder builder;
110 builder.append("0123456789");
111 String string = builder.toString();
112 EXPECT_EQ(String("0123456789"), string);
113 EXPECT_EQ(string.impl(), builder.toString().impl());
114
115 // Changing the StringBuilder should not affect the original result of toStrin g().
116 builder.append("abcdefghijklmnopqrstuvwxyz");
117 EXPECT_EQ(String("0123456789"), string);
118
119 // Changing the StringBuilder should not affect the original result of toStrin g() in case the capacity is not changed.
120 builder.reserveCapacity(200);
121 string = builder.toString();
122 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyz"), string);
123 builder.append("ABC");
124 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyz"), string);
125
126 // Changing the original result of toString() should not affect the content of the StringBuilder.
127 String string1 = builder.toString();
128 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"), string1);
129 string1.append("DEF");
130 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"),
131 builder.toString());
132 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABCDEF"), string1);
133
134 // Resizing the StringBuilder should not affect the original result of toStrin g().
135 string1 = builder.toString();
136 builder.resize(10);
137 builder.append("###");
138 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"), string1);
139 }
140
141 TEST(StringBuilderTest, Clear) {
142 StringBuilder builder;
143 builder.append("0123456789");
144 builder.clear();
145 expectEmpty(builder);
146 }
147
148 TEST(StringBuilderTest, Array) {
149 StringBuilder builder;
150 builder.append("0123456789");
151 EXPECT_EQ('0', static_cast<char>(builder[0]));
152 EXPECT_EQ('9', static_cast<char>(builder[9]));
153 builder.toString(); // Test after reifyString().
154 EXPECT_EQ('0', static_cast<char>(builder[0]));
155 EXPECT_EQ('9', static_cast<char>(builder[9]));
156 }
157
158 TEST(StringBuilderTest, Resize) {
159 StringBuilder builder;
160 builder.append("0123456789");
161 builder.resize(10);
162 EXPECT_EQ(10U, builder.length());
163 expectBuilderContent("0123456789", builder);
164 builder.resize(8);
165 EXPECT_EQ(8U, builder.length());
166 expectBuilderContent("01234567", builder);
167
168 builder.toString();
169 builder.resize(7);
170 EXPECT_EQ(7U, builder.length());
171 expectBuilderContent("0123456", builder);
172 builder.resize(0);
173 expectEmpty(builder);
174 }
175
176 TEST(StringBuilderTest, Equal) {
177 StringBuilder builder1;
178 StringBuilder builder2;
179 EXPECT_TRUE(builder1 == builder2);
180 EXPECT_TRUE(equal(builder1, static_cast<LChar*>(0), 0));
181 EXPECT_TRUE(builder1 == String());
182 EXPECT_TRUE(String() == builder1);
183 EXPECT_TRUE(builder1 != String("abc"));
184
185 builder1.append("123");
186 builder1.reserveCapacity(32);
187 builder2.append("123");
188 builder1.reserveCapacity(64);
189 EXPECT_TRUE(builder1 == builder2);
190 EXPECT_TRUE(builder1 == String("123"));
191 EXPECT_TRUE(String("123") == builder1);
192
193 builder2.append("456");
194 EXPECT_TRUE(builder1 != builder2);
195 EXPECT_TRUE(builder2 != builder1);
196 EXPECT_TRUE(String("123") != builder2);
197 EXPECT_TRUE(builder2 != String("123"));
198 builder2.toString(); // Test after reifyString().
199 EXPECT_TRUE(builder1 != builder2);
200
201 builder2.resize(3);
202 EXPECT_TRUE(builder1 == builder2);
203
204 builder1.toString(); // Test after reifyString().
205 EXPECT_TRUE(builder1 == builder2);
206 }
207
208 TEST(StringBuilderTest, CanShrink) {
209 StringBuilder builder;
210 builder.reserveCapacity(256);
211 EXPECT_TRUE(builder.canShrink());
212 for (int i = 0; i < 256; i++)
213 builder.append('x');
214 EXPECT_EQ(builder.length(), builder.capacity());
215 EXPECT_FALSE(builder.canShrink());
216 }
217
218 TEST(StringBuilderTest, ToAtomicString) {
219 StringBuilder builder;
220 builder.append("123");
221 AtomicString atomicString = builder.toAtomicString();
222 EXPECT_EQ(String("123"), atomicString);
223
224 builder.reserveCapacity(256);
225 EXPECT_TRUE(builder.canShrink());
226 for (int i = builder.length(); i < 128; i++)
227 builder.append('x');
228 AtomicString atomicString1 = builder.toAtomicString();
229 EXPECT_EQ(128u, atomicString1.length());
230 EXPECT_EQ('x', atomicString1[127]);
231
232 // Later change of builder should not affect the atomic string.
233 for (int i = builder.length(); i < 256; i++)
234 builder.append('x');
235 EXPECT_EQ(128u, atomicString1.length());
236
237 EXPECT_FALSE(builder.canShrink());
238 String string = builder.toString();
239 AtomicString atomicString2 = builder.toAtomicString();
240 // They should share the same StringImpl.
241 EXPECT_EQ(atomicString2.impl(), string.impl());
242 }
243
244 TEST(StringBuilderTest, ToAtomicStringOnEmpty) {
245 { // Default constructed.
246 StringBuilder builder;
247 AtomicString atomicString = builder.toAtomicString();
248 EXPECT_EQ(emptyAtom, atomicString);
249 }
250 { // With capacity.
251 StringBuilder builder;
252 builder.reserveCapacity(64);
253 AtomicString atomicString = builder.toAtomicString();
254 EXPECT_EQ(emptyAtom, atomicString);
255 }
256 { // AtomicString constructed from a null string.
257 StringBuilder builder;
258 builder.append(String());
259 AtomicString atomicString = builder.toAtomicString();
260 EXPECT_EQ(emptyAtom, atomicString);
261 }
262 { // AtomicString constructed from an empty string.
263 StringBuilder builder;
264 builder.append(emptyString());
265 AtomicString atomicString = builder.toAtomicString();
266 EXPECT_EQ(emptyAtom, atomicString);
267 }
268 { // AtomicString constructed from an empty StringBuilder.
269 StringBuilder builder;
270 StringBuilder emptyBuilder;
271 builder.append(emptyBuilder);
272 AtomicString atomicString = builder.toAtomicString();
273 EXPECT_EQ(emptyAtom, atomicString);
274 }
275 { // AtomicString constructed from an empty char* string.
276 StringBuilder builder;
84 builder.append("", 0); 277 builder.append("", 0);
85 expectBuilderContent("0123456789abcdefg#", builder); 278 AtomicString atomicString = builder.toAtomicString();
86 builder1.append(builder.characters8(), builder.length()); 279 EXPECT_EQ(emptyAtom, atomicString);
87 builder1.append("XYZ"); 280 }
88 builder.append(builder1.characters8(), builder1.length()); 281 { // Cleared StringBuilder.
89 expectBuilderContent("0123456789abcdefg#0123456789abcdefg#XYZ", builder); 282 StringBuilder builder;
90 283 builder.appendLiteral("WebKit");
91 StringBuilder builder2;
92 builder2.reserveCapacity(100);
93 builder2.append("xyz");
94 const LChar* characters = builder2.characters8();
95 builder2.append("0123456789");
96 EXPECT_EQ(characters, builder2.characters8());
97
98 // Test appending UChar32 characters to StringBuilder.
99 StringBuilder builderForUChar32Append;
100 UChar32 frakturAChar = 0x1D504;
101 builderForUChar32Append.append(frakturAChar); // The fraktur A is not in the BMP, so it's two UTF-16 code units long.
102 EXPECT_EQ(2U, builderForUChar32Append.length());
103 builderForUChar32Append.append(static_cast<UChar32>('A'));
104 EXPECT_EQ(3U, builderForUChar32Append.length());
105 const UChar resultArray[] = { U16_LEAD(frakturAChar), U16_TRAIL(frakturAChar ), 'A' };
106 expectBuilderContent(String(resultArray, WTF_ARRAY_LENGTH(resultArray)), bui lderForUChar32Append);
107 }
108
109 TEST(StringBuilderTest, ToString)
110 {
111 StringBuilder builder;
112 builder.append("0123456789");
113 String string = builder.toString();
114 EXPECT_EQ(String("0123456789"), string);
115 EXPECT_EQ(string.impl(), builder.toString().impl());
116
117 // Changing the StringBuilder should not affect the original result of toStr ing().
118 builder.append("abcdefghijklmnopqrstuvwxyz");
119 EXPECT_EQ(String("0123456789"), string);
120
121 // Changing the StringBuilder should not affect the original result of toStr ing() in case the capacity is not changed.
122 builder.reserveCapacity(200);
123 string = builder.toString();
124 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyz"), string);
125 builder.append("ABC");
126 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyz"), string);
127
128 // Changing the original result of toString() should not affect the content of the StringBuilder.
129 String string1 = builder.toString();
130 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"), string1);
131 string1.append("DEF");
132 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"), builder.toStrin g());
133 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABCDEF"), string1);
134
135 // Resizing the StringBuilder should not affect the original result of toStr ing().
136 string1 = builder.toString();
137 builder.resize(10);
138 builder.append("###");
139 EXPECT_EQ(String("0123456789abcdefghijklmnopqrstuvwxyzABC"), string1);
140 }
141
142 TEST(StringBuilderTest, Clear)
143 {
144 StringBuilder builder;
145 builder.append("0123456789");
146 builder.clear(); 284 builder.clear();
147 expectEmpty(builder); 285 AtomicString atomicString = builder.toAtomicString();
148 } 286 EXPECT_EQ(emptyAtom, atomicString);
149 287 }
150 TEST(StringBuilderTest, Array) 288 }
151 { 289
152 StringBuilder builder; 290 TEST(StringBuilderTest, Substring) {
153 builder.append("0123456789"); 291 { // Default constructed.
154 EXPECT_EQ('0', static_cast<char>(builder[0])); 292 StringBuilder builder;
155 EXPECT_EQ('9', static_cast<char>(builder[9])); 293 String substring = builder.substring(0, 10);
156 builder.toString(); // Test after reifyString(). 294 EXPECT_EQ(emptyString(), substring);
157 EXPECT_EQ('0', static_cast<char>(builder[0])); 295 }
158 EXPECT_EQ('9', static_cast<char>(builder[9])); 296 { // With capacity.
159 } 297 StringBuilder builder;
160 298 builder.reserveCapacity(64);
161 TEST(StringBuilderTest, Resize) 299 builder.append("abc");
162 { 300 String substring = builder.substring(2, 10);
163 StringBuilder builder; 301 EXPECT_EQ(String("c"), substring);
164 builder.append("0123456789"); 302 }
165 builder.resize(10); 303 }
166 EXPECT_EQ(10U, builder.length()); 304
167 expectBuilderContent("0123456789", builder); 305 TEST(StringBuilderTest, AppendNumberDoubleUChar) {
168 builder.resize(8); 306 const double someNumber = 1.2345;
169 EXPECT_EQ(8U, builder.length()); 307 StringBuilder reference;
170 expectBuilderContent("01234567", builder); 308 reference.append(replacementCharacter); // Make it UTF-16.
171 309 reference.append(String::number(someNumber));
172 builder.toString(); 310 StringBuilder test;
173 builder.resize(7); 311 test.append(replacementCharacter);
174 EXPECT_EQ(7U, builder.length()); 312 test.appendNumber(someNumber);
175 expectBuilderContent("0123456", builder); 313 EXPECT_EQ(reference, test);
176 builder.resize(0); 314 }
177 expectEmpty(builder); 315
178 } 316 } // namespace WTF
179
180 TEST(StringBuilderTest, Equal)
181 {
182 StringBuilder builder1;
183 StringBuilder builder2;
184 EXPECT_TRUE(builder1 == builder2);
185 EXPECT_TRUE(equal(builder1, static_cast<LChar*>(0), 0));
186 EXPECT_TRUE(builder1 == String());
187 EXPECT_TRUE(String() == builder1);
188 EXPECT_TRUE(builder1 != String("abc"));
189
190 builder1.append("123");
191 builder1.reserveCapacity(32);
192 builder2.append("123");
193 builder1.reserveCapacity(64);
194 EXPECT_TRUE(builder1 == builder2);
195 EXPECT_TRUE(builder1 == String("123"));
196 EXPECT_TRUE(String("123") == builder1);
197
198 builder2.append("456");
199 EXPECT_TRUE(builder1 != builder2);
200 EXPECT_TRUE(builder2 != builder1);
201 EXPECT_TRUE(String("123") != builder2);
202 EXPECT_TRUE(builder2 != String("123"));
203 builder2.toString(); // Test after reifyString().
204 EXPECT_TRUE(builder1 != builder2);
205
206 builder2.resize(3);
207 EXPECT_TRUE(builder1 == builder2);
208
209 builder1.toString(); // Test after reifyString().
210 EXPECT_TRUE(builder1 == builder2);
211 }
212
213 TEST(StringBuilderTest, CanShrink)
214 {
215 StringBuilder builder;
216 builder.reserveCapacity(256);
217 EXPECT_TRUE(builder.canShrink());
218 for (int i = 0; i < 256; i++)
219 builder.append('x');
220 EXPECT_EQ(builder.length(), builder.capacity());
221 EXPECT_FALSE(builder.canShrink());
222 }
223
224 TEST(StringBuilderTest, ToAtomicString)
225 {
226 StringBuilder builder;
227 builder.append("123");
228 AtomicString atomicString = builder.toAtomicString();
229 EXPECT_EQ(String("123"), atomicString);
230
231 builder.reserveCapacity(256);
232 EXPECT_TRUE(builder.canShrink());
233 for (int i = builder.length(); i < 128; i++)
234 builder.append('x');
235 AtomicString atomicString1 = builder.toAtomicString();
236 EXPECT_EQ(128u, atomicString1.length());
237 EXPECT_EQ('x', atomicString1[127]);
238
239 // Later change of builder should not affect the atomic string.
240 for (int i = builder.length(); i < 256; i++)
241 builder.append('x');
242 EXPECT_EQ(128u, atomicString1.length());
243
244 EXPECT_FALSE(builder.canShrink());
245 String string = builder.toString();
246 AtomicString atomicString2 = builder.toAtomicString();
247 // They should share the same StringImpl.
248 EXPECT_EQ(atomicString2.impl(), string.impl());
249 }
250
251 TEST(StringBuilderTest, ToAtomicStringOnEmpty)
252 {
253 { // Default constructed.
254 StringBuilder builder;
255 AtomicString atomicString = builder.toAtomicString();
256 EXPECT_EQ(emptyAtom, atomicString);
257 }
258 { // With capacity.
259 StringBuilder builder;
260 builder.reserveCapacity(64);
261 AtomicString atomicString = builder.toAtomicString();
262 EXPECT_EQ(emptyAtom, atomicString);
263 }
264 { // AtomicString constructed from a null string.
265 StringBuilder builder;
266 builder.append(String());
267 AtomicString atomicString = builder.toAtomicString();
268 EXPECT_EQ(emptyAtom, atomicString);
269 }
270 { // AtomicString constructed from an empty string.
271 StringBuilder builder;
272 builder.append(emptyString());
273 AtomicString atomicString = builder.toAtomicString();
274 EXPECT_EQ(emptyAtom, atomicString);
275 }
276 { // AtomicString constructed from an empty StringBuilder.
277 StringBuilder builder;
278 StringBuilder emptyBuilder;
279 builder.append(emptyBuilder);
280 AtomicString atomicString = builder.toAtomicString();
281 EXPECT_EQ(emptyAtom, atomicString);
282 }
283 { // AtomicString constructed from an empty char* string.
284 StringBuilder builder;
285 builder.append("", 0);
286 AtomicString atomicString = builder.toAtomicString();
287 EXPECT_EQ(emptyAtom, atomicString);
288 }
289 { // Cleared StringBuilder.
290 StringBuilder builder;
291 builder.appendLiteral("WebKit");
292 builder.clear();
293 AtomicString atomicString = builder.toAtomicString();
294 EXPECT_EQ(emptyAtom, atomicString);
295 }
296 }
297
298 TEST(StringBuilderTest, Substring)
299 {
300 { // Default constructed.
301 StringBuilder builder;
302 String substring = builder.substring(0, 10);
303 EXPECT_EQ(emptyString(), substring);
304 }
305 { // With capacity.
306 StringBuilder builder;
307 builder.reserveCapacity(64);
308 builder.append("abc");
309 String substring = builder.substring(2, 10);
310 EXPECT_EQ(String("c"), substring);
311 }
312 }
313
314 TEST(StringBuilderTest, AppendNumberDoubleUChar)
315 {
316 const double someNumber = 1.2345;
317 StringBuilder reference;
318 reference.append(replacementCharacter); // Make it UTF-16.
319 reference.append(String::number(someNumber));
320 StringBuilder test;
321 test.append(replacementCharacter);
322 test.appendNumber(someNumber);
323 EXPECT_EQ(reference, test);
324 }
325
326 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/text/StringBuilder.cpp ('k') | third_party/WebKit/Source/wtf/text/StringConcatenate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698