// 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, (_) => "")); }