OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 import "package:expect/expect.dart"; | |
6 | |
7 void main() { | |
8 testOutOfRange(); | |
9 testIllegalArgument(); | |
10 testConcat(); | |
11 testIndex(); | |
12 testCodeUnitAt(); | |
13 testEquals(); | |
14 testEndsWith(); | |
15 testStartsWith(); | |
16 testIndexOf(); | |
17 testLastIndexOf(); | |
18 testContains(); | |
19 testReplaceAll(); | |
20 testCompareTo(); | |
21 testCharCodes(); | |
22 testRepeat(); | |
23 testPadLeft(); | |
24 testPadRight(); | |
25 } | |
26 | |
27 void testLength() { | |
28 String str = ""; | |
29 for (var i = 0; i < 20; i++) { | |
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) { | |
55 // Thrown in checked mode only. | |
56 exception_caught = true; | |
57 } | |
58 Expect.isTrue(exception_caught); | |
59 } | |
60 | |
61 void testIndex() { | |
62 String str = "string"; | |
63 for (int i = 0; i < str.length; i++) { | |
64 Expect.isTrue(str[i] is String); | |
65 testStringLength(1, str[i]); | |
66 } | |
67 } | |
68 | |
69 void testCodeUnitAt() { | |
70 String str = "string"; | |
71 for (int i = 0; i < str.length; i++) { | |
72 Expect.isTrue(str.codeUnitAt(i) is int); | |
73 } | |
74 } | |
75 | |
76 void testConcat() { | |
77 var a = "One"; | |
78 var b = "Four"; | |
79 var c = a + b; | |
80 testStringLength(7, c); | |
81 Expect.equals("OneFour", c); | |
82 } | |
83 | |
84 void testEquals() { | |
85 Expect.equals("str", "str"); | |
86 | |
87 Expect.equals("str", "s" + "t" + "r"); | |
88 Expect.equals("s" + "t" + "r", "str"); | |
89 | |
90 Expect.isFalse("str" == "s"); | |
91 Expect.isFalse("str" == "r"); | |
92 Expect.isFalse("str" == "st"); | |
93 Expect.isFalse("str" == "tr"); | |
94 | |
95 Expect.isFalse("s" == "str"); | |
96 Expect.isFalse("r" == "str"); | |
97 Expect.isFalse("st" == "str"); | |
98 Expect.isFalse("tr" == "str"); | |
99 | |
100 Expect.isFalse("" == "s"); | |
101 Expect.equals("", ""); | |
102 } | |
103 | |
104 void testEndsWith() { | |
105 Expect.isTrue("str".endsWith("r")); | |
106 Expect.isTrue("str".endsWith("tr")); | |
107 Expect.isTrue("str".endsWith("str")); | |
108 | |
109 Expect.isFalse("str".endsWith("stri")); | |
110 Expect.isFalse("str".endsWith("t")); | |
111 Expect.isFalse("str".endsWith("st")); | |
112 Expect.isFalse("str".endsWith("s")); | |
113 | |
114 Expect.isTrue("".endsWith("")); | |
115 Expect.isFalse("".endsWith("s")); | |
116 } | |
117 | |
118 void testStartsWith() { | |
119 Expect.isTrue("str".startsWith("s")); | |
120 Expect.isTrue("str".startsWith("st")); | |
121 Expect.isTrue("str".startsWith("str")); | |
122 | |
123 Expect.isFalse("str".startsWith("stri")); | |
124 Expect.isFalse("str".startsWith("r")); | |
125 Expect.isFalse("str".startsWith("tr")); | |
126 Expect.isFalse("str".startsWith("t")); | |
127 | |
128 Expect.isTrue("".startsWith("")); | |
129 Expect.isFalse("".startsWith("s")); | |
130 | |
131 Expect.isFalse("strstr".startsWith("s", 1)); | |
132 Expect.isFalse("strstr".startsWith("s", 2)); | |
133 Expect.isTrue("strstr".startsWith("s", 3)); | |
134 Expect.isFalse("strstr".startsWith("s", 4)); | |
135 | |
136 Expect.isFalse("strstr".startsWith("st", 1)); | |
137 Expect.isFalse("strstr".startsWith("st", 2)); | |
138 Expect.isTrue("strstr".startsWith("st", 3)); | |
139 Expect.isFalse("strstr".startsWith("st", 4)); | |
140 | |
141 Expect.isFalse("strstr".startsWith("str", 1)); | |
142 Expect.isFalse("strstr".startsWith("str", 2)); | |
143 Expect.isTrue("strstr".startsWith("str", 3)); | |
144 Expect.isFalse("strstr".startsWith("str", 4)); | |
145 | |
146 Expect.isTrue("str".startsWith("", 0)); | |
147 Expect.isTrue("str".startsWith("", 1)); | |
148 Expect.isTrue("str".startsWith("", 2)); | |
149 Expect.isTrue("str".startsWith("", 3)); | |
150 | |
151 Expect.throws(() => "str".startsWith("", -1)); | |
152 Expect.throws(() => "str".startsWith("", 4)); | |
153 | |
154 var regexp = new RegExp("s(?:tr?)?"); | |
155 Expect.isTrue("s".startsWith(regexp)); | |
156 Expect.isTrue("st".startsWith(regexp)); | |
157 Expect.isTrue("str".startsWith(regexp)); | |
158 Expect.isTrue("sX".startsWith(regexp)); | |
159 Expect.isTrue("stX".startsWith(regexp)); | |
160 Expect.isTrue("strX".startsWith(regexp)); | |
161 | |
162 Expect.isFalse("".startsWith(regexp)); | |
163 Expect.isFalse("astr".startsWith(regexp)); | |
164 | |
165 Expect.isTrue("".startsWith(new RegExp(""))); | |
166 Expect.isTrue("".startsWith(new RegExp("a?"))); | |
167 | |
168 Expect.isFalse("strstr".startsWith(regexp, 1)); | |
169 Expect.isFalse("strstr".startsWith(regexp, 2)); | |
170 Expect.isTrue("strstr".startsWith(regexp, 3)); | |
171 Expect.isFalse("strstr".startsWith(regexp, 4)); | |
172 | |
173 Expect.isTrue("str".startsWith(new RegExp(""), 0)); | |
174 Expect.isTrue("str".startsWith(new RegExp(""), 1)); | |
175 Expect.isTrue("str".startsWith(new RegExp(""), 2)); | |
176 Expect.isTrue("str".startsWith(new RegExp(""), 3)); | |
177 Expect.isTrue("str".startsWith(new RegExp("a?"), 0)); | |
178 Expect.isTrue("str".startsWith(new RegExp("a?"), 1)); | |
179 Expect.isTrue("str".startsWith(new RegExp("a?"), 2)); | |
180 Expect.isTrue("str".startsWith(new RegExp("a?"), 3)); | |
181 | |
182 Expect.throws(() => "str".startsWith(regexp, -1)); | |
183 Expect.throws(() => "str".startsWith(regexp, 4)); | |
184 | |
185 regexp = new RegExp("^str"); | |
186 Expect.isTrue("strstr".startsWith(regexp)); | |
187 Expect.isTrue("strstr".startsWith(regexp, 0)); | |
188 Expect.isFalse("strstr".startsWith(regexp, 1)); | |
189 Expect.isFalse("strstr".startsWith(regexp, 2)); | |
190 Expect.isFalse("strstr".startsWith(regexp, 3)); // Second "str" isn't at ^. | |
191 } | |
192 | |
193 void testIndexOf() { | |
194 Expect.equals(0, "str".indexOf("", 0)); | |
195 Expect.equals(0, "".indexOf("", 0)); | |
196 Expect.equals(-1, "".indexOf("a", 0)); | |
197 | |
198 Expect.equals(1, "str".indexOf("t", 0)); | |
199 Expect.equals(1, "str".indexOf("tr", 0)); | |
200 Expect.equals(0, "str".indexOf("str", 0)); | |
201 Expect.equals(0, "str".indexOf("st", 0)); | |
202 Expect.equals(0, "str".indexOf("s", 0)); | |
203 Expect.equals(2, "str".indexOf("r", 0)); | |
204 Expect.equals(-1, "str".indexOf("string", 0)); | |
205 | |
206 Expect.equals(1, "strstr".indexOf("t", 0)); | |
207 Expect.equals(1, "strstr".indexOf("tr", 0)); | |
208 Expect.equals(0, "strstr".indexOf("str", 0)); | |
209 Expect.equals(0, "strstr".indexOf("st", 0)); | |
210 Expect.equals(0, "strstr".indexOf("s", 0)); | |
211 Expect.equals(2, "strstr".indexOf("r", 0)); | |
212 Expect.equals(-1, "str".indexOf("string", 0)); | |
213 | |
214 Expect.equals(4, "strstr".indexOf("t", 2)); | |
215 Expect.equals(4, "strstr".indexOf("tr", 2)); | |
216 Expect.equals(3, "strstr".indexOf("str", 1)); | |
217 Expect.equals(3, "strstr".indexOf("str", 2)); | |
218 Expect.equals(3, "strstr".indexOf("str", 3)); | |
219 Expect.equals(3, "strstr".indexOf("st", 1)); | |
220 Expect.equals(3, "strstr".indexOf("s", 3)); | |
221 Expect.equals(5, "strstr".indexOf("r", 3)); | |
222 Expect.equals(5, "strstr".indexOf("r", 4)); | |
223 Expect.equals(5, "strstr".indexOf("r", 5)); | |
224 | |
225 String str = "hello"; | |
226 for (int i = 0; i < 10; i++) { | |
227 if (i > str.length) { | |
228 Expect.throws(() => str.indexOf("", i)); | |
229 } else { | |
230 int result = str.indexOf("", i); | |
231 Expect.equals(i, result); | |
232 } | |
233 } | |
234 | |
235 var re = new RegExp("an?"); | |
236 Expect.equals(1, "banana".indexOf(re)); | |
237 Expect.equals(1, "banana".indexOf(re, 0)); | |
238 Expect.equals(1, "banana".indexOf(re, 1)); | |
239 Expect.equals(3, "banana".indexOf(re, 2)); | |
240 Expect.equals(3, "banana".indexOf(re, 3)); | |
241 Expect.equals(5, "banana".indexOf(re, 4)); | |
242 Expect.equals(5, "banana".indexOf(re, 5)); | |
243 Expect.equals(-1, "banana".indexOf(re, 6)); | |
244 Expect.throws(() => "banana".indexOf(re, -1)); | |
245 Expect.throws(() => "banana".indexOf(re, 7)); | |
246 re = new RegExp("x?"); | |
247 for (int i = 0; i <= str.length; i++) { | |
248 Expect.equals(i, str.indexOf(re, i)); | |
249 } | |
250 } | |
251 | |
252 void testLastIndexOf() { | |
253 Expect.equals(2, "str".lastIndexOf("", 2)); | |
254 Expect.equals(0, "".lastIndexOf("", 0)); | |
255 Expect.equals(-1, "".lastIndexOf("a", 0)); | |
256 | |
257 Expect.equals(1, "str".lastIndexOf("t", 2)); | |
258 Expect.equals(1, "str".lastIndexOf("tr", 2)); | |
259 Expect.equals(0, "str".lastIndexOf("str", 2)); | |
260 Expect.equals(0, "str".lastIndexOf("st", 2)); | |
261 Expect.equals(0, "str".lastIndexOf("s", 2)); | |
262 Expect.equals(2, "str".lastIndexOf("r", 2)); | |
263 Expect.equals(-1, "str".lastIndexOf("string", 2)); | |
264 | |
265 Expect.equals(4, "strstr".lastIndexOf("t", 5)); | |
266 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); | |
267 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
268 Expect.equals(3, "strstr".lastIndexOf("st", 5)); | |
269 Expect.equals(3, "strstr".lastIndexOf("s", 5)); | |
270 Expect.equals(5, "strstr".lastIndexOf("r", 5)); | |
271 Expect.throws(() { | |
272 "str".lastIndexOf("string", 5); | |
273 }); | |
274 Expect.equals(4, "strstr".lastIndexOf("t", 5)); | |
275 Expect.equals(4, "strstr".lastIndexOf("tr", 5)); | |
276 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
277 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
278 Expect.equals(3, "strstr".lastIndexOf("str", 5)); | |
279 Expect.equals(3, "strstr".lastIndexOf("st", 5)); | |
280 Expect.equals(3, "strstr".lastIndexOf("s", 5)); | |
281 Expect.equals(5, "strstr".lastIndexOf("r", 5)); | |
282 Expect.equals(2, "strstr".lastIndexOf("r", 4)); | |
283 Expect.equals(2, "strstr".lastIndexOf("r", 3)); | |
284 Expect.equals(5, "strstr".lastIndexOf("r")); | |
285 Expect.equals(5, "strstr".lastIndexOf("r", null)); | |
286 | |
287 String str = "hello"; | |
288 for (int i = 0; i < 10; i++) { | |
289 if (i > str.length) { | |
290 Expect.throws(() => str.indexOf("", i)); | |
291 } else { | |
292 int result = str.lastIndexOf("", i); | |
293 Expect.equals(i, result); | |
294 } | |
295 } | |
296 | |
297 var re = new RegExp("an?"); | |
298 Expect.equals(5, "banana".lastIndexOf(re)); | |
299 Expect.equals(5, "banana".lastIndexOf(re, 6)); | |
300 Expect.equals(5, "banana".lastIndexOf(re, 5)); | |
301 Expect.equals(3, "banana".lastIndexOf(re, 4)); | |
302 Expect.equals(3, "banana".lastIndexOf(re, 3)); | |
303 Expect.equals(1, "banana".lastIndexOf(re, 2)); | |
304 Expect.equals(1, "banana".lastIndexOf(re, 1)); | |
305 Expect.equals(-1, "banana".lastIndexOf(re, 0)); | |
306 Expect.throws(() => "banana".lastIndexOf(re, -1)); | |
307 Expect.throws(() => "banana".lastIndexOf(re, 7)); | |
308 re = new RegExp("x?"); | |
309 for (int i = 0; i <= str.length; i++) { | |
310 Expect.equals(i, str.indexOf(re, i)); | |
311 } | |
312 } | |
313 | |
314 void testContains() { | |
315 Expect.isTrue("str".contains("s", 0)); | |
316 Expect.isTrue("str".contains("st", 0)); | |
317 Expect.isTrue("str".contains("str", 0)); | |
318 Expect.isTrue("str".contains("t", 0)); | |
319 Expect.isTrue("str".contains("r", 0)); | |
320 Expect.isTrue("str".contains("tr", 0)); | |
321 | |
322 Expect.isFalse("str".contains("sr", 0)); | |
323 Expect.isFalse("str".contains("string", 0)); | |
324 | |
325 Expect.isTrue("str".contains("", 0)); | |
326 Expect.isTrue("".contains("", 0)); | |
327 Expect.isFalse("".contains("s", 0)); | |
328 } | |
329 | |
330 void testReplaceAll() { | |
331 Expect.equals("AtoBtoCDtoE", "AfromBfromCDfromE".replaceAll("from", "to")); | |
332 | |
333 // Test with the replaced string at the beginning. | |
334 Expect.equals("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 void 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 void 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 | |
385 test("abc"); | |
386 test(""); | |
387 test(" "); | |
388 } | |
389 | |
390 void testStringLength(int length, String str) { | |
391 Expect.equals(length, str.length); | |
392 (length == 0 ? Expect.isTrue : Expect.isFalse)(str.isEmpty); | |
393 (length != 0 ? Expect.isTrue : Expect.isFalse)(str.isNotEmpty); | |
394 } | |
395 | |
396 void testRepeat() { | |
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 4, | |
415 5, | |
416 6, | |
417 7, | |
418 8, | |
419 9, | |
420 10, | |
421 11, | |
422 12, | |
423 13, | |
424 14, | |
425 15, | |
426 16, | |
427 17, | |
428 127, | |
429 128, | |
430 129 | |
431 ]; | |
432 void testRepeat(str, repeat) { | |
433 String expect; | |
434 if (repeat <= 0) { | |
435 expect = ""; | |
436 } else if (repeat == 1) { | |
437 expect = str; | |
438 } else { | |
439 StringBuffer buf = new StringBuffer(); | |
440 for (int i = 0; i < repeat; i++) { | |
441 buf.write(str); | |
442 } | |
443 expect = buf.toString(); | |
444 } | |
445 String actual = str * repeat; | |
446 Expect.equals(expect, actual, "$str#${str.length} * $repeat"); | |
447 } | |
448 | |
449 for (String str in testStrings) { | |
450 for (int repeat in counts) { | |
451 testRepeat(str, repeat); | |
452 } | |
453 } | |
454 } | |
455 | |
456 void testPadLeft() { | |
457 Expect.equals(" 1", "1".padLeft(5, ' ')); | |
458 Expect.equals(" 11", "11".padLeft(5, ' ')); | |
459 Expect.equals(" 111", "111".padLeft(5, ' ')); | |
460 Expect.equals(" 1111", "1111".padLeft(5, ' ')); | |
461 Expect.equals("11111", "11111".padLeft(5, ' ')); | |
462 Expect.equals("111111", "111111".padLeft(5, ' ')); | |
463 Expect.equals(" \u{10002}", "\u{10002}".padLeft(5, ' ')); | |
464 Expect.equals('', ''.padLeft(0, 'a')); | |
465 Expect.equals('a', ''.padLeft(1, 'a')); | |
466 Expect.equals('aaaaa', ''.padLeft(5, 'a')); | |
467 Expect.equals('', ''.padLeft(-2, 'a')); | |
468 | |
469 Expect.equals('xyzxyzxyzxyzxyz', ''.padLeft(5, 'xyz')); | |
470 Expect.equals('xyzxyzxyzxyza', 'a'.padLeft(5, 'xyz')); | |
471 Expect.equals('xyzxyzxyzaa', 'aa'.padLeft(5, 'xyz')); | |
472 Expect.equals('\u{10002}\u{10002}\u{10002}aa', 'aa'.padLeft(5, '\u{10002}')); | |
473 Expect.equals('a', 'a'.padLeft(10, '')); | |
474 } | |
475 | |
476 void testPadRight() { | |
477 Expect.equals("1 ", "1".padRight(5, ' ')); | |
478 Expect.equals("11 ", "11".padRight(5, ' ')); | |
479 Expect.equals("111 ", "111".padRight(5, ' ')); | |
480 Expect.equals("1111 ", "1111".padRight(5, ' ')); | |
481 Expect.equals("11111", "11111".padRight(5, ' ')); | |
482 Expect.equals("111111", "111111".padRight(5, ' ')); | |
483 Expect.equals("\u{10002} ", "\u{10002}".padRight(5, ' ')); | |
484 Expect.equals('', ''.padRight(0, 'a')); | |
485 Expect.equals('a', ''.padRight(1, 'a')); | |
486 Expect.equals('aaaaa', ''.padRight(5, 'a')); | |
487 Expect.equals('', ''.padRight(-2, 'a')); | |
488 | |
489 Expect.equals('xyzxyzxyzxyzxyz', ''.padRight(5, 'xyz')); | |
490 Expect.equals('axyzxyzxyzxyz', 'a'.padRight(5, 'xyz')); | |
491 Expect.equals('aaxyzxyzxyz', 'aa'.padRight(5, 'xyz')); | |
492 Expect.equals('aa\u{10002}\u{10002}\u{10002}', 'aa'.padRight(5, '\u{10002}')); | |
493 Expect.equals('a', 'a'.padRight(10, '')); | |
494 } | |
OLD | NEW |