blob: bb220978412c84f3b89e5c50e8369f9a6707e5ab [file] [log] [blame]
// 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, (_) => ""));
}