| Index: test/codegen/corelib/string_from_list_test.dart
|
| diff --git a/test/codegen/corelib/string_from_list_test.dart b/test/codegen/corelib/string_from_list_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..de6b1f739f2f1b690a79d8e66be9d67324833044
|
| --- /dev/null
|
| +++ b/test/codegen/corelib/string_from_list_test.dart
|
| @@ -0,0 +1,87 @@
|
| +// Copyright (c) 2011, 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.
|
| +
|
| +import "package:expect/expect.dart";
|
| +
|
| +void main() {
|
| + Expect.equals("", new String.fromCharCodes(new List(0)));
|
| + Expect.equals("", new String.fromCharCodes([]));
|
| + Expect.equals("", new String.fromCharCodes(const []));
|
| + Expect.equals("AB", new String.fromCharCodes([65, 66]));
|
| + Expect.equals("AB", new String.fromCharCodes(const [65, 66]));
|
| + Expect.equals("Ærø", new String.fromCharCodes(const [0xc6, 0x72, 0xf8]));
|
| + Expect.equals("\u{1234}", new String.fromCharCodes([0x1234]));
|
| + Expect.equals("\u{12345}*", new String.fromCharCodes([0x12345, 42]));
|
| + Expect.equals("", new String.fromCharCodes(new List()));
|
| + {
|
| + var a = new List();
|
| + a.add(65);
|
| + a.add(66);
|
| + Expect.equals("AB", new String.fromCharCodes(a));
|
| + }
|
| +
|
| + // Long list (bug 6919).
|
| + for (int len in [499, 500, 501, 999, 100000]) {
|
| + List<int> list = new List(len);
|
| + for (int i = 0; i < len; i++) {
|
| + list[i] = 65 + (i % 26);
|
| + }
|
| + for (int i = len - 9; i < len; i++) {
|
| + list[i] = 48 + (len - i);
|
| + }
|
| + // We should not throw a stack overflow here.
|
| + String long = new String.fromCharCodes(list);
|
| + // Minimal sanity checking on the string.
|
| + Expect.isTrue(long.startsWith('ABCDE'));
|
| + Expect.isTrue(long.endsWith('987654321'));
|
| + int middle = len ~/ 2;
|
| + middle -= middle % 26;
|
| + Expect.equals('XYZABC', long.substring(middle - 3, middle + 3));
|
| + Expect.equals(len, long.length);
|
| + }
|
| +
|
| +
|
| + // Should work with iterables and non-default-lists (http://dartbug.com/8922)
|
| + Expect.equals("CBA", new String.fromCharCodes([65, 66, 67].reversed));
|
| + Expect.equals("BCD",
|
| + new String.fromCharCodes([65, 66, 67].map((x) => x + 1)));
|
| + Expect.equals("AC",
|
| + new String.fromCharCodes([0x41, 0x42, 0x43].where(
|
| + (x) => x.isOdd)));
|
| + Expect.equals("CE",
|
| + new String.fromCharCodes(
|
| + [0x41, 0x42, 0x43].where((x) => x.isOdd)
|
| + .map((x) => x + 2)));
|
| + Expect.equals("ABC", new String.fromCharCodes(
|
| + new Iterable.generate(3, (x) => 65 + x)));
|
| + Expect.equals("ABC", new String.fromCharCodes("ABC".codeUnits));
|
| + Expect.equals("BCD",
|
| + new String.fromCharCodes("ABC".codeUnits.map((x) => x + 1)));
|
| + Expect.equals("BCD",
|
| + new String.fromCharCodes("ABC".runes.map((x) => x + 1)));
|
| +
|
| + var nonBmpCharCodes = [0, 0xD812, 0xDC34, 0x14834, 0xDC34, 0xD812];
|
| + var nonBmp = new String.fromCharCodes(nonBmpCharCodes);
|
| + Expect.equals(7, nonBmp.length);
|
| + Expect.equals(0, nonBmp.codeUnitAt(0));
|
| + Expect.equals(0xD812, nonBmp.codeUnitAt(1)); // Separated surrogate pair
|
| + Expect.equals(0xDC34, nonBmp.codeUnitAt(2));
|
| + Expect.equals(0xD812, nonBmp.codeUnitAt(3)); // Single non-BMP code point.
|
| + Expect.equals(0xDC34, nonBmp.codeUnitAt(4));
|
| + Expect.equals(0xDC34, nonBmp.codeUnitAt(5)); // Unmatched surrogate.
|
| + Expect.equals(0xD812, nonBmp.codeUnitAt(6)); // Unmatched surrogate.
|
| +
|
| + var reversedNonBmp = new String.fromCharCodes(nonBmpCharCodes.reversed);
|
| + Expect.equals(7, reversedNonBmp.length);
|
| + Expect.equals(0, reversedNonBmp.codeUnitAt(6));
|
| + Expect.equals(0xD812, reversedNonBmp.codeUnitAt(5));
|
| + Expect.equals(0xDC34, reversedNonBmp.codeUnitAt(4));
|
| + Expect.equals(0xDC34, reversedNonBmp.codeUnitAt(3));
|
| + Expect.equals(0xD812, reversedNonBmp.codeUnitAt(2));
|
| + Expect.equals(0xDC34, reversedNonBmp.codeUnitAt(1));
|
| + Expect.equals(0xD812, reversedNonBmp.codeUnitAt(0));
|
| +
|
| + Expect.equals(nonBmp, new String.fromCharCodes(nonBmp.codeUnits));
|
| + Expect.equals(nonBmp, new String.fromCharCodes(nonBmp.runes));
|
| +}
|
|
|