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