OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, 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 // Test the IterableBase/IterableMixin toString method. | |
6 | |
7 import "package:expect/expect.dart"; | |
8 import "dart:collection"; | |
9 | |
10 String mkIt(int len, [func]) { | |
11 var list; | |
12 if (func == null) { | |
13 list = new List.generate(len, (x) => x); | |
14 } else { | |
15 list = new List.generate(len, func); | |
16 } | |
17 return new MyIterable(list).toString(); | |
18 } | |
19 | |
20 class MyIterable extends IterableBase { | |
21 final Iterable _base; | |
22 MyIterable(this._base); | |
23 Iterator get iterator => _base.iterator; | |
24 } | |
25 | |
26 void main() { | |
27 Expect.equals("()", mkIt(0)); | |
28 Expect.equals("(0)", mkIt(1)); | |
29 Expect.equals("(0, 1)", mkIt(2)); | |
30 Expect.equals("(0, 1, 2, 3, 4, 5, 6, 7, 8)", mkIt(9)); | |
31 | |
32 // Builds string up to 60 characters, then finishes with last two | |
33 // elements. | |
34 Expect.equals( | |
35 //0123456789012345678901234567890123456789 - 40 characters | |
36 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
37 "2, 13, 14, 15, 16, 17, 18, ..., 98, 99)", | |
38 mkIt(100)); | |
39 | |
40 Expect.equals( | |
41 //0123456789012345678901234567890123456789 | |
42 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
43 "2, 13, 14, 15, 16, 17, 18)", | |
44 mkIt(19)); | |
45 | |
46 Expect.equals( | |
47 //0123456789012345678901234567890123456789 | |
48 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
49 "2, 13, 14, 15, 16, 17, 18, 19)", | |
50 mkIt(20)); | |
51 | |
52 Expect.equals( | |
53 //0123456789012345678901234567890123456789 | |
54 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
55 "2, 13, 14, 15, 16, 17, 18, 19, 20)", | |
56 mkIt(21)); | |
57 | |
58 // Don't show last two elements if more than 100 elements total | |
59 // (can't be 100 elements in 80 characters including commas). | |
60 Expect.equals( | |
61 //0123456789012345678901234567890123456789 | |
62 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
63 "2, 13, 14, 15, 16, 17, 18, 19, 20, ...)", | |
64 mkIt(101)); | |
65 | |
66 // If last two elements bring total over 80 characters, drop some of | |
67 // the previous ones as well. | |
68 | |
69 Expect.equals( | |
70 //0123456789012345678901234567890123456789 | |
71 "(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1" | |
72 "2, 13, ..., 18, xxxxxxxxxxxxxxxxxxxx)", | |
73 mkIt(20, (x) => x == 19 ? "xxxxxxxxxxxxxxxxxxxx" : "$x")); | |
74 | |
75 // Never drop the first three or the last two. | |
76 Expect.equals( | |
77 //0123456789012345678901234567890123456789 | |
78 "(xxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxx, x" | |
79 "xxxxxxxxxxxxxxxx, ..., 18, xxxxxxxxxxxxx" | |
80 "xxxx)", | |
81 mkIt(20, (x) => (x < 3 || x == 19) ? "xxxxxxxxxxxxxxxxx" : "$x")); | |
82 | |
83 // Never drop the first three or the last two. | |
84 Expect.equals( | |
85 //0123456789012345678901234567890123456789 | |
86 "(xxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxx, x" | |
87 "xxxxxxxxxxxxxxxx, ..., xxxxxxxxxxxxxxxxx" | |
88 ", 19)", | |
89 mkIt(20, (x) => (x < 3 || x == 18) ? "xxxxxxxxxxxxxxxxx" : "$x")); | |
90 | |
91 // If the first three are very long, always include them anyway. | |
92 Expect.equals( | |
93 //0123456789012345678901234567890123456789 | |
94 "(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx," | |
95 " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx," | |
96 " xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx," | |
97 " ..., 98, 99)", | |
98 mkIt(100, | |
99 (x) => (x < 3) ? "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" : "$x")); | |
100 | |
101 Expect.equals( | |
102 //0123456789012345678901234567890123456789 | |
103 "(, , , , , , , , , , , , , , , , , , , ," | |
104 " , , , , , , , , , , , , , , , ..., , )", | |
105 mkIt(100, (_) => "")); | |
106 } | |
OLD | NEW |