| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; |
| 6 | 6 |
| 7 class StringTest { | 7 void main() { |
| 8 | 8 testOutOfRange(); |
| 9 static testMain() { | 9 testIllegalArgument(); |
| 10 testOutOfRange(); | 10 testConcat(); |
| 11 testIllegalArgument(); | 11 testIndex(); |
| 12 testConcat(); | 12 testCodeUnitAt(); |
| 13 testIndex(); | 13 testEquals(); |
| 14 testCodeUnitAt(); | 14 testEndsWith(); |
| 15 testEquals(); | 15 testStartsWith(); |
| 16 testEndsWith(); | 16 testIndexOf(); |
| 17 testStartsWith(); | 17 testLastIndexOf(); |
| 18 testIndexOf(); | 18 testContains(); |
| 19 testLastIndexOf(); | 19 testReplaceAll(); |
| 20 testContains(); | 20 testCompareTo(); |
| 21 testReplaceAll(); | 21 testCharCodes(); |
| 22 testCompareTo(); | 22 testRepeat(); |
| 23 testCharCodes(); | 23 testPadLeft(); |
| 24 } | 24 testPadRight(); |
| 25 | 25 } |
| 26 static void testLength() { | 26 |
| 27 String str = ""; | 27 void testLength() { |
| 28 for (var i = 0; i < 20; i++) { | 28 String str = ""; |
| 29 testStringLength(i, str); | 29 for (var i = 0; i < 20; i++) { |
| 30 str += " "; | 30 testStringLength(i, str); |
| 31 str += " "; |
| 32 } |
| 33 } |
| 34 |
| 35 void testOutOfRange() { |
| 36 String a = "Hello"; |
| 37 bool exception_caught = false; |
| 38 try { |
| 39 var c = a[20]; // Throw exception. |
| 40 } on RangeError catch (e) { |
| 41 exception_caught = true; |
| 42 } |
| 43 Expect.isTrue(exception_caught); |
| 44 } |
| 45 |
| 46 void testIllegalArgument() { |
| 47 String a = "Hello"; |
| 48 bool exception_caught = false; |
| 49 try { |
| 50 var c = a[2.2]; // Throw exception. |
| 51 Expect.fail("Accepting double as index"); |
| 52 } on ArgumentError catch (e) { |
| 53 exception_caught = true; |
| 54 } on TypeError catch (e) { // Thrown in checked mode only. |
| 55 exception_caught = true; |
| 56 } |
| 57 Expect.isTrue(exception_caught); |
| 58 } |
| 59 |
| 60 void testIndex() { |
| 61 String str = "string"; |
| 62 for (int i = 0; i < str.length; i++) { |
| 63 Expect.isTrue(str[i] is String); |
| 64 testStringLength(1, str[i]); |
| 65 } |
| 66 } |
| 67 |
| 68 void testCodeUnitAt() { |
| 69 String str = "string"; |
| 70 for (int i = 0; i < str.length; i++) { |
| 71 Expect.isTrue(str.codeUnitAt(i) is int); |
| 72 } |
| 73 } |
| 74 |
| 75 void testConcat() { |
| 76 var a = "One"; |
| 77 var b = "Four"; |
| 78 var c = a + b; |
| 79 testStringLength(7, c); |
| 80 Expect.equals("OneFour", c); |
| 81 } |
| 82 |
| 83 void testEquals() { |
| 84 Expect.equals("str", "str"); |
| 85 |
| 86 Expect.equals("str", "s" + "t" + "r"); |
| 87 Expect.equals("s" + "t" + "r", "str"); |
| 88 |
| 89 Expect.isFalse("str" == "s"); |
| 90 Expect.isFalse("str" == "r"); |
| 91 Expect.isFalse("str" == "st"); |
| 92 Expect.isFalse("str" == "tr"); |
| 93 |
| 94 Expect.isFalse("s" == "str"); |
| 95 Expect.isFalse("r" == "str"); |
| 96 Expect.isFalse("st" == "str"); |
| 97 Expect.isFalse("tr" == "str"); |
| 98 |
| 99 Expect.isFalse("" == "s"); |
| 100 Expect.equals("", ""); |
| 101 } |
| 102 |
| 103 void testEndsWith() { |
| 104 Expect.isTrue("str".endsWith("r")); |
| 105 Expect.isTrue("str".endsWith("tr")); |
| 106 Expect.isTrue("str".endsWith("str")); |
| 107 |
| 108 Expect.isFalse("str".endsWith("stri")); |
| 109 Expect.isFalse("str".endsWith("t")); |
| 110 Expect.isFalse("str".endsWith("st")); |
| 111 Expect.isFalse("str".endsWith("s")); |
| 112 |
| 113 Expect.isTrue("".endsWith("")); |
| 114 Expect.isFalse("".endsWith("s")); |
| 115 } |
| 116 |
| 117 void testStartsWith() { |
| 118 Expect.isTrue("str".startsWith("s")); |
| 119 Expect.isTrue("str".startsWith("st")); |
| 120 Expect.isTrue("str".startsWith("str")); |
| 121 |
| 122 Expect.isFalse("str".startsWith("stri")); |
| 123 Expect.isFalse("str".startsWith("r")); |
| 124 Expect.isFalse("str".startsWith("tr")); |
| 125 Expect.isFalse("str".startsWith("t")); |
| 126 |
| 127 Expect.isTrue("".startsWith("")); |
| 128 Expect.isFalse("".startsWith("s")); |
| 129 |
| 130 Expect.isFalse("strstr".startsWith("s", 1)); |
| 131 Expect.isFalse("strstr".startsWith("s", 2)); |
| 132 Expect.isTrue("strstr".startsWith("s", 3)); |
| 133 Expect.isFalse("strstr".startsWith("s", 4)); |
| 134 |
| 135 Expect.isFalse("strstr".startsWith("st", 1)); |
| 136 Expect.isFalse("strstr".startsWith("st", 2)); |
| 137 Expect.isTrue("strstr".startsWith("st", 3)); |
| 138 Expect.isFalse("strstr".startsWith("st", 4)); |
| 139 |
| 140 Expect.isFalse("strstr".startsWith("str", 1)); |
| 141 Expect.isFalse("strstr".startsWith("str", 2)); |
| 142 Expect.isTrue("strstr".startsWith("str", 3)); |
| 143 Expect.isFalse("strstr".startsWith("str", 4)); |
| 144 |
| 145 Expect.isTrue("str".startsWith("", 0)); |
| 146 Expect.isTrue("str".startsWith("", 1)); |
| 147 Expect.isTrue("str".startsWith("", 2)); |
| 148 Expect.isTrue("str".startsWith("", 3)); |
| 149 |
| 150 Expect.throws(() => "str".startsWith("", -1)); |
| 151 Expect.throws(() => "str".startsWith("", 4)); |
| 152 |
| 153 var regexp = new RegExp("s(?:tr?)?"); |
| 154 Expect.isTrue("s".startsWith(regexp)); |
| 155 Expect.isTrue("st".startsWith(regexp)); |
| 156 Expect.isTrue("str".startsWith(regexp)); |
| 157 Expect.isTrue("sX".startsWith(regexp)); |
| 158 Expect.isTrue("stX".startsWith(regexp)); |
| 159 Expect.isTrue("strX".startsWith(regexp)); |
| 160 |
| 161 Expect.isFalse("".startsWith(regexp)); |
| 162 Expect.isFalse("astr".startsWith(regexp)); |
| 163 |
| 164 Expect.isTrue("".startsWith(new RegExp(""))); |
| 165 Expect.isTrue("".startsWith(new RegExp("a?"))); |
| 166 |
| 167 Expect.isFalse("strstr".startsWith(regexp, 1)); |
| 168 Expect.isFalse("strstr".startsWith(regexp, 2)); |
| 169 Expect.isTrue("strstr".startsWith(regexp, 3)); |
| 170 Expect.isFalse("strstr".startsWith(regexp, 4)); |
| 171 |
| 172 Expect.isTrue("str".startsWith(new RegExp(""), 0)); |
| 173 Expect.isTrue("str".startsWith(new RegExp(""), 1)); |
| 174 Expect.isTrue("str".startsWith(new RegExp(""), 2)); |
| 175 Expect.isTrue("str".startsWith(new RegExp(""), 3)); |
| 176 Expect.isTrue("str".startsWith(new RegExp("a?"), 0)); |
| 177 Expect.isTrue("str".startsWith(new RegExp("a?"), 1)); |
| 178 Expect.isTrue("str".startsWith(new RegExp("a?"), 2)); |
| 179 Expect.isTrue("str".startsWith(new RegExp("a?"), 3)); |
| 180 |
| 181 Expect.throws(() => "str".startsWith(regexp, -1)); |
| 182 Expect.throws(() => "str".startsWith(regexp, 4)); |
| 183 |
| 184 regexp = new RegExp("^str"); |
| 185 Expect.isTrue("strstr".startsWith(regexp)); |
| 186 Expect.isTrue("strstr".startsWith(regexp, 0)); |
| 187 Expect.isFalse("strstr".startsWith(regexp, 1)); |
| 188 Expect.isFalse("strstr".startsWith(regexp, 2)); |
| 189 Expect.isFalse("strstr".startsWith(regexp, 3)); // Second "str" isn't at ^. |
| 190 } |
| 191 |
| 192 void testIndexOf() { |
| 193 Expect.equals(0, "str".indexOf("", 0)); |
| 194 Expect.equals(0, "".indexOf("", 0)); |
| 195 Expect.equals(-1, "".indexOf("a", 0)); |
| 196 |
| 197 Expect.equals(1, "str".indexOf("t", 0)); |
| 198 Expect.equals(1, "str".indexOf("tr", 0)); |
| 199 Expect.equals(0, "str".indexOf("str", 0)); |
| 200 Expect.equals(0, "str".indexOf("st", 0)); |
| 201 Expect.equals(0, "str".indexOf("s", 0)); |
| 202 Expect.equals(2, "str".indexOf("r", 0)); |
| 203 Expect.equals(-1, "str".indexOf("string", 0)); |
| 204 |
| 205 Expect.equals(1, "strstr".indexOf("t", 0)); |
| 206 Expect.equals(1, "strstr".indexOf("tr", 0)); |
| 207 Expect.equals(0, "strstr".indexOf("str", 0)); |
| 208 Expect.equals(0, "strstr".indexOf("st", 0)); |
| 209 Expect.equals(0, "strstr".indexOf("s", 0)); |
| 210 Expect.equals(2, "strstr".indexOf("r", 0)); |
| 211 Expect.equals(-1, "str".indexOf("string", 0)); |
| 212 |
| 213 Expect.equals(4, "strstr".indexOf("t", 2)); |
| 214 Expect.equals(4, "strstr".indexOf("tr", 2)); |
| 215 Expect.equals(3, "strstr".indexOf("str", 1)); |
| 216 Expect.equals(3, "strstr".indexOf("str", 2)); |
| 217 Expect.equals(3, "strstr".indexOf("str", 3)); |
| 218 Expect.equals(3, "strstr".indexOf("st", 1)); |
| 219 Expect.equals(3, "strstr".indexOf("s", 3)); |
| 220 Expect.equals(5, "strstr".indexOf("r", 3)); |
| 221 Expect.equals(5, "strstr".indexOf("r", 4)); |
| 222 Expect.equals(5, "strstr".indexOf("r", 5)); |
| 223 |
| 224 String str = "hello"; |
| 225 for (int i = 0; i < 10; i++) { |
| 226 if (i > str.length) { |
| 227 Expect.throws(() => str.indexOf("", i)); |
| 228 } else { |
| 229 int result = str.indexOf("", i); |
| 230 Expect.equals(i, result); |
| 31 } | 231 } |
| 32 } | 232 } |
| 33 | 233 |
| 34 static void testOutOfRange() { | 234 var re = new RegExp("an?"); |
| 35 String a = "Hello"; | 235 Expect.equals(1, "banana".indexOf(re)); |
| 36 bool exception_caught = false; | 236 Expect.equals(1, "banana".indexOf(re, 0)); |
| 37 try { | 237 Expect.equals(1, "banana".indexOf(re, 1)); |
| 38 var c = a[20]; // Throw exception. | 238 Expect.equals(3, "banana".indexOf(re, 2)); |
| 39 } on RangeError catch (e) { | 239 Expect.equals(3, "banana".indexOf(re, 3)); |
| 40 exception_caught = true; | 240 Expect.equals(5, "banana".indexOf(re, 4)); |
| 241 Expect.equals(5, "banana".indexOf(re, 5)); |
| 242 Expect.equals(-1, "banana".indexOf(re, 6)); |
| 243 Expect.throws(() => "banana".indexOf(re, -1)); |
| 244 Expect.throws(() => "banana".indexOf(re, 7)); |
| 245 re = new RegExp("x?"); |
| 246 for (int i = 0; i <= str.length; i++) { |
| 247 Expect.equals(i, str.indexOf(re, i)); |
| 248 } |
| 249 } |
| 250 |
| 251 void testLastIndexOf() { |
| 252 Expect.equals(2, "str".lastIndexOf("", 2)); |
| 253 Expect.equals(0, "".lastIndexOf("", 0)); |
| 254 Expect.equals(-1, "".lastIndexOf("a", 0)); |
| 255 |
| 256 Expect.equals(1, "str".lastIndexOf("t", 2)); |
| 257 Expect.equals(1, "str".lastIndexOf("tr", 2)); |
| 258 Expect.equals(0, "str".lastIndexOf("str", 2)); |
| 259 Expect.equals(0, "str".lastIndexOf("st", 2)); |
| 260 Expect.equals(0, "str".lastIndexOf("s", 2)); |
| 261 Expect.equals(2, "str".lastIndexOf("r", 2)); |
| 262 Expect.equals(-1, "str".lastIndexOf("string", 2)); |
| 263 |
| 264 Expect.equals(4, "strstr".lastIndexOf("t", 5)); |
| 265 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); |
| 266 Expect.equals(3, "strstr".lastIndexOf("str", 5)); |
| 267 Expect.equals(3, "strstr".lastIndexOf("st", 5)); |
| 268 Expect.equals(3, "strstr".lastIndexOf("s", 5)); |
| 269 Expect.equals(5, "strstr".lastIndexOf("r", 5)); |
| 270 Expect.throws(() { |
| 271 "str".lastIndexOf("string", 5); |
| 272 }); |
| 273 Expect.equals(4, "strstr".lastIndexOf("t", 5)); |
| 274 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); |
| 275 Expect.equals(3, "strstr".lastIndexOf("str", 5)); |
| 276 Expect.equals(3, "strstr".lastIndexOf("str", 5)); |
| 277 Expect.equals(3, "strstr".lastIndexOf("str", 5)); |
| 278 Expect.equals(3, "strstr".lastIndexOf("st", 5)); |
| 279 Expect.equals(3, "strstr".lastIndexOf("s", 5)); |
| 280 Expect.equals(5, "strstr".lastIndexOf("r", 5)); |
| 281 Expect.equals(2, "strstr".lastIndexOf("r", 4)); |
| 282 Expect.equals(2, "strstr".lastIndexOf("r", 3)); |
| 283 Expect.equals(5, "strstr".lastIndexOf("r")); |
| 284 Expect.equals(5, "strstr".lastIndexOf("r", null)); |
| 285 |
| 286 String str = "hello"; |
| 287 for (int i = 0; i < 10; i++) { |
| 288 if (i > str.length) { |
| 289 Expect.throws(() => str.indexOf("", i)); |
| 290 } else { |
| 291 int result = str.lastIndexOf("", i); |
| 292 Expect.equals(i, result); |
| 41 } | 293 } |
| 42 Expect.isTrue(exception_caught); | 294 } |
| 43 } | 295 |
| 44 | 296 var re = new RegExp("an?"); |
| 45 static testIllegalArgument() { | 297 Expect.equals(5, "banana".lastIndexOf(re)); |
| 46 String a = "Hello"; | 298 Expect.equals(5, "banana".lastIndexOf(re, 6)); |
| 47 bool exception_caught = false; | 299 Expect.equals(5, "banana".lastIndexOf(re, 5)); |
| 48 try { | 300 Expect.equals(3, "banana".lastIndexOf(re, 4)); |
| 49 var c = a[2.2]; // Throw exception. | 301 Expect.equals(3, "banana".lastIndexOf(re, 3)); |
| 50 Expect.fail("Accepting double as index"); | 302 Expect.equals(1, "banana".lastIndexOf(re, 2)); |
| 51 } on ArgumentError catch (e) { | 303 Expect.equals(1, "banana".lastIndexOf(re, 1)); |
| 52 exception_caught = true; | 304 Expect.equals(-1, "banana".lastIndexOf(re, 0)); |
| 53 } on TypeError catch (e) { // Thrown in checked mode only. | 305 Expect.throws(() => "banana".lastIndexOf(re, -1)); |
| 54 exception_caught = true; | 306 Expect.throws(() => "banana".lastIndexOf(re, 7)); |
| 307 re = new RegExp("x?"); |
| 308 for (int i = 0; i <= str.length; i++) { |
| 309 Expect.equals(i, str.indexOf(re, i)); |
| 310 } |
| 311 } |
| 312 |
| 313 void testContains() { |
| 314 Expect.isTrue("str".contains("s", 0)); |
| 315 Expect.isTrue("str".contains("st", 0)); |
| 316 Expect.isTrue("str".contains("str", 0)); |
| 317 Expect.isTrue("str".contains("t", 0)); |
| 318 Expect.isTrue("str".contains("r", 0)); |
| 319 Expect.isTrue("str".contains("tr", 0)); |
| 320 |
| 321 Expect.isFalse("str".contains("sr", 0)); |
| 322 Expect.isFalse("str".contains("string", 0)); |
| 323 |
| 324 Expect.isTrue("str".contains("", 0)); |
| 325 Expect.isTrue("".contains("", 0)); |
| 326 Expect.isFalse("".contains("s", 0)); |
| 327 } |
| 328 |
| 329 void testReplaceAll() { |
| 330 Expect.equals( |
| 331 "AtoBtoCDtoE", "AfromBfromCDfromE".replaceAll("from", "to")); |
| 332 |
| 333 // Test with the replaced string at the begining. |
| 334 Expect.equals( |
| 335 "toABtoCDtoE", "fromABfromCDfromE".replaceAll("from", "to")); |
| 336 |
| 337 // Test with the replaced string at the end. |
| 338 Expect.equals( |
| 339 "toABtoCDtoEto", "fromABfromCDfromEfrom".replaceAll("from", "to")); |
| 340 |
| 341 // Test when there are no occurence of the string to replace. |
| 342 Expect.equals("ABC", "ABC".replaceAll("from", "to")); |
| 343 |
| 344 // Test when the string to change is the empty string. |
| 345 Expect.equals("", "".replaceAll("from", "to")); |
| 346 |
| 347 // Test when the string to change is a substring of the string to |
| 348 // replace. |
| 349 Expect.equals("fro", "fro".replaceAll("from", "to")); |
| 350 |
| 351 // Test when the string to change is the replaced string. |
| 352 Expect.equals("to", "from".replaceAll("from", "to")); |
| 353 |
| 354 // Test when the string to change is the replacement string. |
| 355 Expect.equals("to", "to".replaceAll("from", "to")); |
| 356 |
| 357 // Test replacing by the empty string. |
| 358 Expect.equals("", "from".replaceAll("from", "")); |
| 359 Expect.equals("AB", "AfromB".replaceAll("from", "")); |
| 360 |
| 361 // Test changing the empty string. |
| 362 Expect.equals("to", "".replaceAll("", "to")); |
| 363 |
| 364 // Test replacing the empty string. |
| 365 Expect.equals("toAtoBtoCto", "ABC".replaceAll("", "to")); |
| 366 } |
| 367 |
| 368 void testCompareTo() { |
| 369 Expect.equals(0, "".compareTo("")); |
| 370 Expect.equals(0, "str".compareTo("str")); |
| 371 Expect.equals(-1, "str".compareTo("string")); |
| 372 Expect.equals(1, "string".compareTo("str")); |
| 373 Expect.equals(1, "string".compareTo("")); |
| 374 Expect.equals(-1, "".compareTo("string")); |
| 375 } |
| 376 |
| 377 void testCharCodes() { |
| 378 test(str) { |
| 379 var list = str.codeUnits; |
| 380 Expect.equals(str.length, list.length); |
| 381 for (int i = 0; i < str.length; i++) { |
| 382 Expect.equals(str.codeUnitAt(i), list[i]); |
| 55 } | 383 } |
| 56 Expect.isTrue(exception_caught); | 384 } |
| 57 } | 385 test("abc"); |
| 58 | 386 test(""); |
| 59 static testIndex() { | 387 test(" "); |
| 60 String str = "string"; | |
| 61 for (int i = 0; i < str.length; i++) { | |
| 62 Expect.isTrue(str[i] is String); | |
| 63 testStringLength(1, str[i]); | |
| 64 } | |
| 65 } | |
| 66 | |
| 67 static testCodeUnitAt() { | |
| 68 String str = "string"; | |
| 69 for (int i = 0; i < str.length; i++) { | |
| 70 Expect.isTrue(str.codeUnitAt(i) is int); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 static testConcat() { | |
| 75 var a = "One"; | |
| 76 var b = "Four"; | |
| 77 var c = a + b; | |
| 78 testStringLength(7, c); | |
| 79 Expect.equals("OneFour", c); | |
| 80 } | |
| 81 | |
| 82 static testEquals() { | |
| 83 Expect.equals("str", "str"); | |
| 84 | |
| 85 Expect.equals("str", "s" + "t" + "r"); | |
| 86 Expect.equals("s" + "t" + "r", "str"); | |
| 87 | |
| 88 Expect.isFalse("str" == "s"); | |
| 89 Expect.isFalse("str" == "r"); | |
| 90 Expect.isFalse("str" == "st"); | |
| 91 Expect.isFalse("str" == "tr"); | |
| 92 | |
| 93 Expect.isFalse("s" == "str"); | |
| 94 Expect.isFalse("r" == "str"); | |
| 95 Expect.isFalse("st" == "str"); | |
| 96 Expect.isFalse("tr" == "str"); | |
| 97 | |
| 98 Expect.isFalse("" == "s"); | |
| 99 Expect.equals("", ""); | |
| 100 } | |
| 101 | |
| 102 static testEndsWith() { | |
| 103 Expect.isTrue("str".endsWith("r")); | |
| 104 Expect.isTrue("str".endsWith("tr")); | |
| 105 Expect.isTrue("str".endsWith("str")); | |
| 106 | |
| 107 Expect.isFalse("str".endsWith("stri")); | |
| 108 Expect.isFalse("str".endsWith("t")); | |
| 109 Expect.isFalse("str".endsWith("st")); | |
| 110 Expect.isFalse("str".endsWith("s")); | |
| 111 | |
| 112 Expect.isTrue("".endsWith("")); | |
| 113 Expect.isFalse("".endsWith("s")); | |
| 114 } | |
| 115 | |
| 116 static testStartsWith() { | |
| 117 Expect.isTrue("str".startsWith("s")); | |
| 118 Expect.isTrue("str".startsWith("st")); | |
| 119 Expect.isTrue("str".startsWith("str")); | |
| 120 | |
| 121 Expect.isFalse("str".startsWith("stri")); | |
| 122 Expect.isFalse("str".startsWith("r")); | |
| 123 Expect.isFalse("str".startsWith("tr")); | |
| 124 Expect.isFalse("str".startsWith("t")); | |
| 125 | |
| 126 Expect.isTrue("".startsWith("")); | |
| 127 Expect.isFalse("".startsWith("s")); | |
| 128 | |
| 129 Expect.isFalse("strstr".startsWith("s", 1)); | |
| 130 Expect.isFalse("strstr".startsWith("s", 2)); | |
| 131 Expect.isTrue("strstr".startsWith("s", 3)); | |
| 132 Expect.isFalse("strstr".startsWith("s", 4)); | |
| 133 | |
| 134 Expect.isFalse("strstr".startsWith("st", 1)); | |
| 135 Expect.isFalse("strstr".startsWith("st", 2)); | |
| 136 Expect.isTrue("strstr".startsWith("st", 3)); | |
| 137 Expect.isFalse("strstr".startsWith("st", 4)); | |
| 138 | |
| 139 Expect.isFalse("strstr".startsWith("str", 1)); | |
| 140 Expect.isFalse("strstr".startsWith("str", 2)); | |
| 141 Expect.isTrue("strstr".startsWith("str", 3)); | |
| 142 Expect.isFalse("strstr".startsWith("str", 4)); | |
| 143 | |
| 144 Expect.isTrue("str".startsWith("", 0)); | |
| 145 Expect.isTrue("str".startsWith("", 1)); | |
| 146 Expect.isTrue("str".startsWith("", 2)); | |
| 147 Expect.isTrue("str".startsWith("", 3)); | |
| 148 | |
| 149 Expect.throws(() => "str".startsWith("", -1)); | |
| 150 Expect.throws(() => "str".startsWith("", 4)); | |
| 151 | |
| 152 var regexp = new RegExp("s(?:tr?)?"); | |
| 153 Expect.isTrue("s".startsWith(regexp)); | |
| 154 Expect.isTrue("st".startsWith(regexp)); | |
| 155 Expect.isTrue("str".startsWith(regexp)); | |
| 156 Expect.isTrue("sX".startsWith(regexp)); | |
| 157 Expect.isTrue("stX".startsWith(regexp)); | |
| 158 Expect.isTrue("strX".startsWith(regexp)); | |
| 159 | |
| 160 Expect.isFalse("".startsWith(regexp)); | |
| 161 Expect.isFalse("astr".startsWith(regexp)); | |
| 162 | |
| 163 Expect.isTrue("".startsWith(new RegExp(""))); | |
| 164 Expect.isTrue("".startsWith(new RegExp("a?"))); | |
| 165 | |
| 166 Expect.isFalse("strstr".startsWith(regexp, 1)); | |
| 167 Expect.isFalse("strstr".startsWith(regexp, 2)); | |
| 168 Expect.isTrue("strstr".startsWith(regexp, 3)); | |
| 169 Expect.isFalse("strstr".startsWith(regexp, 4)); | |
| 170 | |
| 171 Expect.isTrue("str".startsWith(new RegExp(""), 0)); | |
| 172 Expect.isTrue("str".startsWith(new RegExp(""), 1)); | |
| 173 Expect.isTrue("str".startsWith(new RegExp(""), 2)); | |
| 174 Expect.isTrue("str".startsWith(new RegExp(""), 3)); | |
| 175 Expect.isTrue("str".startsWith(new RegExp("a?"), 0)); | |
| 176 Expect.isTrue("str".startsWith(new RegExp("a?"), 1)); | |
| 177 Expect.isTrue("str".startsWith(new RegExp("a?"), 2)); | |
| 178 Expect.isTrue("str".startsWith(new RegExp("a?"), 3)); | |
| 179 | |
| 180 Expect.throws(() => "str".startsWith(regexp, -1)); | |
| 181 Expect.throws(() => "str".startsWith(regexp, 4)); | |
| 182 | |
| 183 regexp = new RegExp("^str"); | |
| 184 Expect.isTrue("strstr".startsWith(regexp)); | |
| 185 Expect.isTrue("strstr".startsWith(regexp, 0)); | |
| 186 Expect.isFalse("strstr".startsWith(regexp, 1)); | |
| 187 Expect.isFalse("strstr".startsWith(regexp, 2)); | |
| 188 Expect.isFalse("strstr".startsWith(regexp, 3)); // Second "str" isn't at ^. | |
| 189 } | |
| 190 | |
| 191 static testIndexOf() { | |
| 192 Expect.equals(0, "str".indexOf("", 0)); | |
| 193 Expect.equals(0, "".indexOf("", 0)); | |
| 194 Expect.equals(-1, "".indexOf("a", 0)); | |
| 195 | |
| 196 Expect.equals(1, "str".indexOf("t", 0)); | |
| 197 Expect.equals(1, "str".indexOf("tr", 0)); | |
| 198 Expect.equals(0, "str".indexOf("str", 0)); | |
| 199 Expect.equals(0, "str".indexOf("st", 0)); | |
| 200 Expect.equals(0, "str".indexOf("s", 0)); | |
| 201 Expect.equals(2, "str".indexOf("r", 0)); | |
| 202 Expect.equals(-1, "str".indexOf("string", 0)); | |
| 203 | |
| 204 Expect.equals(1, "strstr".indexOf("t", 0)); | |
| 205 Expect.equals(1, "strstr".indexOf("tr", 0)); | |
| 206 Expect.equals(0, "strstr".indexOf("str", 0)); | |
| 207 Expect.equals(0, "strstr".indexOf("st", 0)); | |
| 208 Expect.equals(0, "strstr".indexOf("s", 0)); | |
| 209 Expect.equals(2, "strstr".indexOf("r", 0)); | |
| 210 Expect.equals(-1, "str".indexOf("string", 0)); | |
| 211 | |
| 212 Expect.equals(4, "strstr".indexOf("t", 2)); | |
| 213 Expect.equals(4, "strstr".indexOf("tr", 2)); | |
| 214 Expect.equals(3, "strstr".indexOf("str", 1)); | |
| 215 Expect.equals(3, "strstr".indexOf("str", 2)); | |
| 216 Expect.equals(3, "strstr".indexOf("str", 3)); | |
| 217 Expect.equals(3, "strstr".indexOf("st", 1)); | |
| 218 Expect.equals(3, "strstr".indexOf("s", 3)); | |
| 219 Expect.equals(5, "strstr".indexOf("r", 3)); | |
| 220 Expect.equals(5, "strstr".indexOf("r", 4)); | |
| 221 Expect.equals(5, "strstr".indexOf("r", 5)); | |
| 222 | |
| 223 String str = "hello"; | |
| 224 for (int i = 0; i < 10; i++) { | |
| 225 if (i > str.length) { | |
| 226 Expect.throws(() => str.indexOf("", i)); | |
| 227 } else { | |
| 228 int result = str.indexOf("", i); | |
| 229 Expect.equals(i, result); | |
| 230 } | |
| 231 } | |
| 232 | |
| 233 var re = new RegExp("an?"); | |
| 234 Expect.equals(1, "banana".indexOf(re)); | |
| 235 Expect.equals(1, "banana".indexOf(re, 0)); | |
| 236 Expect.equals(1, "banana".indexOf(re, 1)); | |
| 237 Expect.equals(3, "banana".indexOf(re, 2)); | |
| 238 Expect.equals(3, "banana".indexOf(re, 3)); | |
| 239 Expect.equals(5, "banana".indexOf(re, 4)); | |
| 240 Expect.equals(5, "banana".indexOf(re, 5)); | |
| 241 Expect.equals(-1, "banana".indexOf(re, 6)); | |
| 242 Expect.throws(() => "banana".indexOf(re, -1)); | |
| 243 Expect.throws(() => "banana".indexOf(re, 7)); | |
| 244 re = new RegExp("x?"); | |
| 245 for (int i = 0; i <= str.length; i++) { | |
| 246 Expect.equals(i, str.indexOf(re, i)); | |
| 247 } | |
| 248 } | |
| 249 | |
| 250 static testLastIndexOf() { | |
| 251 Expect.equals(2, "str".lastIndexOf("", 2)); | |
| 252 Expect.equals(0, "".lastIndexOf("", 0)); | |
| 253 Expect.equals(-1, "".lastIndexOf("a", 0)); | |
| 254 | |
| 255 Expect.equals(1, "str".lastIndexOf("t", 2)); | |
| 256 Expect.equals(1, "str".lastIndexOf("tr", 2)); | |
| 257 Expect.equals(0, "str".lastIndexOf("str", 2)); | |
| 258 Expect.equals(0, "str".lastIndexOf("st", 2)); | |
| 259 Expect.equals(0, "str".lastIndexOf("s", 2)); | |
| 260 Expect.equals(2, "str".lastIndexOf("r", 2)); | |
| 261 Expect.equals(-1, "str".lastIndexOf("string", 2)); | |
| 262 | |
| 263 Expect.equals(4, "strstr".lastIndexOf("t", 5)); | |
| 264 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); | |
| 265 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
| 266 Expect.equals(3, "strstr".lastIndexOf("st", 5)); | |
| 267 Expect.equals(3, "strstr".lastIndexOf("s", 5)); | |
| 268 Expect.equals(5, "strstr".lastIndexOf("r", 5)); | |
| 269 Expect.throws(() { | |
| 270 "str".lastIndexOf("string", 5); | |
| 271 }); | |
| 272 Expect.equals(4, "strstr".lastIndexOf("t", 5)); | |
| 273 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); | |
| 274 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
| 275 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
| 276 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
| 277 Expect.equals(3, "strstr".lastIndexOf("st", 5)); | |
| 278 Expect.equals(3, "strstr".lastIndexOf("s", 5)); | |
| 279 Expect.equals(5, "strstr".lastIndexOf("r", 5)); | |
| 280 Expect.equals(2, "strstr".lastIndexOf("r", 4)); | |
| 281 Expect.equals(2, "strstr".lastIndexOf("r", 3)); | |
| 282 Expect.equals(5, "strstr".lastIndexOf("r")); | |
| 283 Expect.equals(5, "strstr".lastIndexOf("r", null)); | |
| 284 | |
| 285 String str = "hello"; | |
| 286 for (int i = 0; i < 10; i++) { | |
| 287 if (i > str.length) { | |
| 288 Expect.throws(() => str.indexOf("", i)); | |
| 289 } else { | |
| 290 int result = str.lastIndexOf("", i); | |
| 291 Expect.equals(i, result); | |
| 292 } | |
| 293 } | |
| 294 | |
| 295 var re = new RegExp("an?"); | |
| 296 Expect.equals(5, "banana".lastIndexOf(re)); | |
| 297 Expect.equals(5, "banana".lastIndexOf(re, 6)); | |
| 298 Expect.equals(5, "banana".lastIndexOf(re, 5)); | |
| 299 Expect.equals(3, "banana".lastIndexOf(re, 4)); | |
| 300 Expect.equals(3, "banana".lastIndexOf(re, 3)); | |
| 301 Expect.equals(1, "banana".lastIndexOf(re, 2)); | |
| 302 Expect.equals(1, "banana".lastIndexOf(re, 1)); | |
| 303 Expect.equals(-1, "banana".lastIndexOf(re, 0)); | |
| 304 Expect.throws(() => "banana".lastIndexOf(re, -1)); | |
| 305 Expect.throws(() => "banana".lastIndexOf(re, 7)); | |
| 306 re = new RegExp("x?"); | |
| 307 for (int i = 0; i <= str.length; i++) { | |
| 308 Expect.equals(i, str.indexOf(re, i)); | |
| 309 } | |
| 310 } | |
| 311 | |
| 312 static testContains() { | |
| 313 Expect.isTrue("str".contains("s", 0)); | |
| 314 Expect.isTrue("str".contains("st", 0)); | |
| 315 Expect.isTrue("str".contains("str", 0)); | |
| 316 Expect.isTrue("str".contains("t", 0)); | |
| 317 Expect.isTrue("str".contains("r", 0)); | |
| 318 Expect.isTrue("str".contains("tr", 0)); | |
| 319 | |
| 320 Expect.isFalse("str".contains("sr", 0)); | |
| 321 Expect.isFalse("str".contains("string", 0)); | |
| 322 | |
| 323 Expect.isTrue("str".contains("", 0)); | |
| 324 Expect.isTrue("".contains("", 0)); | |
| 325 Expect.isFalse("".contains("s", 0)); | |
| 326 } | |
| 327 | |
| 328 static testReplaceAll() { | |
| 329 Expect.equals( | |
| 330 "AtoBtoCDtoE", "AfromBfromCDfromE".replaceAll("from", "to")); | |
| 331 | |
| 332 // Test with the replaced string at the begining. | |
| 333 Expect.equals( | |
| 334 "toABtoCDtoE", "fromABfromCDfromE".replaceAll("from", "to")); | |
| 335 | |
| 336 // Test with the replaced string at the end. | |
| 337 Expect.equals( | |
| 338 "toABtoCDtoEto", "fromABfromCDfromEfrom".replaceAll("from", "to")); | |
| 339 | |
| 340 // Test when there are no occurence of the string to replace. | |
| 341 Expect.equals("ABC", "ABC".replaceAll("from", "to")); | |
| 342 | |
| 343 // Test when the string to change is the empty string. | |
| 344 Expect.equals("", "".replaceAll("from", "to")); | |
| 345 | |
| 346 // Test when the string to change is a substring of the string to | |
| 347 // replace. | |
| 348 Expect.equals("fro", "fro".replaceAll("from", "to")); | |
| 349 | |
| 350 // Test when the string to change is the replaced string. | |
| 351 Expect.equals("to", "from".replaceAll("from", "to")); | |
| 352 | |
| 353 // Test when the string to change is the replacement string. | |
| 354 Expect.equals("to", "to".replaceAll("from", "to")); | |
| 355 | |
| 356 // Test replacing by the empty string. | |
| 357 Expect.equals("", "from".replaceAll("from", "")); | |
| 358 Expect.equals("AB", "AfromB".replaceAll("from", "")); | |
| 359 | |
| 360 // Test changing the empty string. | |
| 361 Expect.equals("to", "".replaceAll("", "to")); | |
| 362 | |
| 363 // Test replacing the empty string. | |
| 364 Expect.equals("toAtoBtoCto", "ABC".replaceAll("", "to")); | |
| 365 } | |
| 366 | |
| 367 static testCompareTo() { | |
| 368 Expect.equals(0, "".compareTo("")); | |
| 369 Expect.equals(0, "str".compareTo("str")); | |
| 370 Expect.equals(-1, "str".compareTo("string")); | |
| 371 Expect.equals(1, "string".compareTo("str")); | |
| 372 Expect.equals(1, "string".compareTo("")); | |
| 373 Expect.equals(-1, "".compareTo("string")); | |
| 374 } | |
| 375 | |
| 376 static testCharCodes() { | |
| 377 test(str) { | |
| 378 var list = str.codeUnits; | |
| 379 Expect.equals(str.length, list.length); | |
| 380 for (int i = 0; i < str.length; i++) { | |
| 381 Expect.equals(str.codeUnitAt(i), list[i]); | |
| 382 } | |
| 383 } | |
| 384 test("abc"); | |
| 385 test(""); | |
| 386 test(" "); | |
| 387 } | |
| 388 } | 388 } |
| 389 | 389 |
| 390 void testStringLength(int length, String str) { | 390 void testStringLength(int length, String str) { |
| 391 Expect.equals(length, str.length); | 391 Expect.equals(length, str.length); |
| 392 (length == 0 ? Expect.isTrue : Expect.isFalse)(str.isEmpty); | 392 (length == 0 ? Expect.isTrue : Expect.isFalse)(str.isEmpty); |
| 393 (length != 0 ? Expect.isTrue : Expect.isFalse)(str.isNotEmpty); | 393 (length != 0 ? Expect.isTrue : Expect.isFalse)(str.isNotEmpty); |
| 394 } | 394 } |
| 395 | 395 |
| 396 main() { | 396 void testRepeat() { |
| 397 StringTest.testMain(); | 397 List<String> testStrings = [ |
| 398 "", |
| 399 "\x00", |
| 400 "a", |
| 401 "ab", |
| 402 "\x80", |
| 403 "\xff", |
| 404 "\u2028", |
| 405 "abcdef\u2028", |
| 406 "\u{10002}", |
| 407 "abcdef\u{10002}" |
| 408 ]; |
| 409 List<int> counts = [ |
| 410 0, |
| 411 1, |
| 412 2, |
| 413 3, |
| 414 10, |
| 415 100 |
| 416 ]; |
| 417 void testRepeat(str, repeat, sep) { |
| 418 String expect; |
| 419 if (repeat == 0) { |
| 420 expect = ""; |
| 421 } else if (repeat == 1) { |
| 422 expect = str; |
| 423 } else { |
| 424 StringBuffer buf = new StringBuffer(str); |
| 425 for (int i = 1; i < repeat; i++) { |
| 426 buf.write(sep); |
| 427 buf.write(str); |
| 428 } |
| 429 expect = buf.toString(); |
| 430 } |
| 431 String actual = str.repeat(repeat, sep); |
| 432 Expect.equals(expect, actual, |
| 433 "$str#${str.length}*$repeat/$sep#${sep.length}"); |
| 434 } |
| 435 for (String str in testStrings) { |
| 436 for (String sep in testStrings) { |
| 437 for (int repeat in counts) { |
| 438 testRepeat(str, repeat, sep); |
| 439 } |
| 440 } |
| 441 } |
| 442 Expect.throws(() { "a".repeat(-1); }); |
| 398 } | 443 } |
| 444 |
| 445 void testPadLeft() { |
| 446 Expect.equals(" 1", "1".padLeft(5, ' ')); |
| 447 Expect.equals(" 11", "11".padLeft(5, ' ')); |
| 448 Expect.equals(" 111", "111".padLeft(5, ' ')); |
| 449 Expect.equals(" 1111", "1111".padLeft(5, ' ')); |
| 450 Expect.equals("11111", "11111".padLeft(5, ' ')); |
| 451 Expect.equals("111111", "111111".padLeft(5, ' ')); |
| 452 Expect.equals(" \u{10002}", "\u{10002}".padLeft(5, ' ')); |
| 453 Expect.equals('', ''.padLeft(0, 'a')); |
| 454 Expect.equals('a', ''.padLeft(1, 'a')); |
| 455 Expect.equals('aaaaa', ''.padLeft(5, 'a')); |
| 456 Expect.equals('', ''.padLeft(-2, 'a')); |
| 457 |
| 458 Expect.throws(() { ' '.padLeft(5, ''); }); |
| 459 Expect.throws(() { ' '.padLeft(5, 'xx'); }); |
| 460 Expect.throws(() { ' '.padLeft(5, '\u{10002}'); }); |
| 461 } |
| 462 |
| 463 void testPadRight() { |
| 464 Expect.equals("1 ", "1".padRight(5, ' ')); |
| 465 Expect.equals("11 ", "11".padRight(5, ' ')); |
| 466 Expect.equals("111 ", "111".padRight(5, ' ')); |
| 467 Expect.equals("1111 ", "1111".padRight(5, ' ')); |
| 468 Expect.equals("11111", "11111".padRight(5, ' ')); |
| 469 Expect.equals("111111", "111111".padRight(5, ' ')); |
| 470 Expect.equals("\u{10002} ", "\u{10002}".padRight(5, ' ')); |
| 471 Expect.equals('', ''.padRight(0, 'a')); |
| 472 Expect.equals('a', ''.padRight(1, 'a')); |
| 473 Expect.equals('aaaaa', ''.padRight(5, 'a')); |
| 474 Expect.equals('', ''.padRight(-2, 'a')); |
| 475 |
| 476 Expect.throws(() { ' '.padRight(5, ''); }); |
| 477 Expect.throws(() { ' '.padRight(5, 'xx'); }); |
| 478 Expect.throws(() { ' '.padRight(5, '\u{10002}'); }); |
| 479 } |
| OLD | NEW |