-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathiterable_tostring_test.dart
115 lines (99 loc) · 3.36 KB
/
iterable_tostring_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Test the IterableBase/IterableMixin toString method.
import "package:expect/expect.dart";
import "dart:collection";
String mkIt(int len, [func]) {
var list;
if (func == null) {
list = new List.generate(len, (x) => x);
} else {
list = new List.generate(len, func);
}
return new MyIterable(list).toString();
}
class MyIterable extends IterableBase {
final Iterable _base;
MyIterable(this._base);
Iterator get iterator => _base.iterator;
}
void main() {
Expect.equals("()", mkIt(0));
Expect.equals("(0)", mkIt(1));
Expect.equals("(0, 1)", mkIt(2));
Expect.equals("(0, 1, 2, 3, 4, 5, 6, 7, 8)", mkIt(9));
// Builds string up to 60 characters, then finishes with last two
// elements.
Expect.equals(
//0123456789012345678901234567890123456789 - 40 characters
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, 14, 15, 16, 17, 18, ..., 98, 99)",
mkIt(100),
);
Expect.equals(
//0123456789012345678901234567890123456789
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, 14, 15, 16, 17, 18)",
mkIt(19),
);
Expect.equals(
//0123456789012345678901234567890123456789
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, 14, 15, 16, 17, 18, 19)",
mkIt(20),
);
Expect.equals(
//0123456789012345678901234567890123456789
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, 14, 15, 16, 17, 18, 19, 20)",
mkIt(21),
);
// Don't show last two elements if more than 100 elements total
// (can't be 100 elements in 80 characters including commas).
Expect.equals(
//0123456789012345678901234567890123456789
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, 14, 15, 16, 17, 18, 19, 20, ...)",
mkIt(101),
);
// If last two elements bring total over 80 characters, drop some of
// the previous ones as well.
Expect.equals(
//0123456789012345678901234567890123456789
"(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1"
"2, 13, ..., 18, xxxxxxxxxxxxxxxxxxxx)",
mkIt(20, (x) => x == 19 ? "xxxxxxxxxxxxxxxxxxxx" : "$x"),
);
// Never drop the first three or the last two.
Expect.equals(
//0123456789012345678901234567890123456789
"(xxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxx, x"
"xxxxxxxxxxxxxxxx, ..., 18, xxxxxxxxxxxxx"
"xxxx)",
mkIt(20, (x) => (x < 3 || x == 19) ? "xxxxxxxxxxxxxxxxx" : "$x"),
);
// Never drop the first three or the last two.
Expect.equals(
//0123456789012345678901234567890123456789
"(xxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxx, x"
"xxxxxxxxxxxxxxxx, ..., xxxxxxxxxxxxxxxxx"
", 19)",
mkIt(20, (x) => (x < 3 || x == 18) ? "xxxxxxxxxxxxxxxxx" : "$x"),
);
// If the first three are very long, always include them anyway.
Expect.equals(
//0123456789012345678901234567890123456789
"(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,"
" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,"
" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,"
" ..., 98, 99)",
mkIt(100, (x) => (x < 3) ? "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" : "$x"),
);
Expect.equals(
//0123456789012345678901234567890123456789
"(, , , , , , , , , , , , , , , , , , , ,"
" , , , , , , , , , , , , , , , ..., , )",
mkIt(100, (_) => ""),
);
}