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

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

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