| OLD | NEW |
| 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 Loading... |
| 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 | |
| OLD | NEW |