Index: test/codegen/corelib/iterable_tostring_test.dart |
diff --git a/test/codegen/corelib/iterable_tostring_test.dart b/test/codegen/corelib/iterable_tostring_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee93170c3d329c8efb9c0d7f64344e61068d5fc1 |
--- /dev/null |
+++ b/test/codegen/corelib/iterable_tostring_test.dart |
@@ -0,0 +1,106 @@ |
+// 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, (_) => "")); |
+} |