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

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

Issue 2046353002: Use a Vector for the buffer in StringBuilder. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase. Created 4 years, 5 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 // append() has special code paths for String backed StringView instead of 110 // append() has special code paths for String backed StringView instead of
111 // just char* backed ones. 111 // just char* backed ones.
112 StringBuilder builder6; 112 StringBuilder builder6;
113 builder6.append(String("ghi"), 1, 2); 113 builder6.append(String("ghi"), 1, 2);
114 expectBuilderContent("hi", builder6); 114 expectBuilderContent("hi", builder6);
115 115
116 // Test appending UChar32 characters to StringBuilder. 116 // Test appending UChar32 characters to StringBuilder.
117 StringBuilder builderForUChar32Append; 117 StringBuilder builderForUChar32Append;
118 UChar32 frakturAChar = 0x1D504; 118 UChar32 frakturAChar = 0x1D504;
119 builderForUChar32Append.append(frakturAChar); // The fraktur A is not in the BMP, so it's two UTF-16 code units long. 119 builderForUChar32Append.append(frakturAChar); // The fraktur A is not in the BMP, so it's two UTF-16 code units long.
120 EXPECT_FALSE(builderForUChar32Append.is8Bit());
120 EXPECT_EQ(2U, builderForUChar32Append.length()); 121 EXPECT_EQ(2U, builderForUChar32Append.length());
121 builderForUChar32Append.append(static_cast<UChar32>('A')); 122 builderForUChar32Append.append(static_cast<UChar32>('A'));
122 EXPECT_EQ(3U, builderForUChar32Append.length()); 123 EXPECT_EQ(3U, builderForUChar32Append.length());
123 const UChar resultArray[] = { U16_LEAD(frakturAChar), U16_TRAIL(frakturAChar ), 'A' }; 124 const UChar resultArray[] = { U16_LEAD(frakturAChar), U16_TRAIL(frakturAChar ), 'A' };
124 expectBuilderContent(String(resultArray, WTF_ARRAY_LENGTH(resultArray)), bui lderForUChar32Append); 125 expectBuilderContent(String(resultArray, WTF_ARRAY_LENGTH(resultArray)), bui lderForUChar32Append);
125 } 126 }
126 127
127 TEST(StringBuilderTest, AppendSharingImpl) 128 TEST(StringBuilderTest, AppendSharingImpl)
128 { 129 {
129 String string("abc"); 130 String string("abc");
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 builder2.toString(); // Test after reifyString(). 236 builder2.toString(); // Test after reifyString().
236 EXPECT_TRUE(builder1 != builder2); 237 EXPECT_TRUE(builder1 != builder2);
237 238
238 builder2.resize(3); 239 builder2.resize(3);
239 EXPECT_TRUE(builder1 == builder2); 240 EXPECT_TRUE(builder1 == builder2);
240 241
241 builder1.toString(); // Test after reifyString(). 242 builder1.toString(); // Test after reifyString().
242 EXPECT_TRUE(builder1 == builder2); 243 EXPECT_TRUE(builder1 == builder2);
243 } 244 }
244 245
245 TEST(StringBuilderTest, CanShrink)
246 {
247 StringBuilder builder;
248 builder.reserveCapacity(256);
249 EXPECT_TRUE(builder.canShrink());
250 for (int i = 0; i < 256; i++)
251 builder.append('x');
252 EXPECT_EQ(builder.length(), builder.capacity());
253 EXPECT_FALSE(builder.canShrink());
254 }
255
256 TEST(StringBuilderTest, ToAtomicString) 246 TEST(StringBuilderTest, ToAtomicString)
257 { 247 {
258 StringBuilder builder; 248 StringBuilder builder;
259 builder.append("123"); 249 builder.append("123");
260 AtomicString atomicString = builder.toAtomicString(); 250 AtomicString atomicString = builder.toAtomicString();
261 EXPECT_EQ(String("123"), atomicString); 251 EXPECT_EQ(String("123"), atomicString);
262 252
263 builder.reserveCapacity(256); 253 builder.reserveCapacity(256);
264 EXPECT_TRUE(builder.canShrink());
265 for (int i = builder.length(); i < 128; i++) 254 for (int i = builder.length(); i < 128; i++)
266 builder.append('x'); 255 builder.append('x');
267 AtomicString atomicString1 = builder.toAtomicString(); 256 AtomicString atomicString1 = builder.toAtomicString();
268 EXPECT_EQ(128u, atomicString1.length()); 257 EXPECT_EQ(128u, atomicString1.length());
269 EXPECT_EQ('x', atomicString1[127]); 258 EXPECT_EQ('x', atomicString1[127]);
270 259
271 // Later change of builder should not affect the atomic string. 260 // Later change of builder should not affect the atomic string.
272 for (int i = builder.length(); i < 256; i++) 261 for (int i = builder.length(); i < 256; i++)
273 builder.append('x'); 262 builder.append('x');
274 EXPECT_EQ(128u, atomicString1.length()); 263 EXPECT_EQ(128u, atomicString1.length());
275 264
276 EXPECT_FALSE(builder.canShrink());
277 String string = builder.toString(); 265 String string = builder.toString();
278 AtomicString atomicString2 = builder.toAtomicString(); 266 AtomicString atomicString2 = builder.toAtomicString();
279 // They should share the same StringImpl. 267 // They should share the same StringImpl.
280 EXPECT_EQ(atomicString2.impl(), string.impl()); 268 EXPECT_EQ(atomicString2.impl(), string.impl());
281 } 269 }
282 270
283 TEST(StringBuilderTest, ToAtomicStringOnEmpty) 271 TEST(StringBuilderTest, ToAtomicStringOnEmpty)
284 { 272 {
285 { // Default constructed. 273 { // Default constructed.
286 StringBuilder builder; 274 StringBuilder builder;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 StringBuilder reference; 337 StringBuilder reference;
350 reference.append(replacementCharacter); // Make it UTF-16. 338 reference.append(replacementCharacter); // Make it UTF-16.
351 reference.append(String::number(someNumber)); 339 reference.append(String::number(someNumber));
352 StringBuilder test; 340 StringBuilder test;
353 test.append(replacementCharacter); 341 test.append(replacementCharacter);
354 test.appendNumber(someNumber); 342 test.appendNumber(someNumber);
355 EXPECT_EQ(reference, test); 343 EXPECT_EQ(reference, test);
356 } 344 }
357 345
358 } // namespace WTF 346 } // namespace WTF
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698