| 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 24 matching lines...) Expand all Loading... |
| 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 | |
| OLD | NEW |