mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:59:47 +00:00
b998b10f3e
Change-Id: I3a31632ce28fb87a410b759d092c7ebc9393574d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128306 Commit-Queue: Bob Nystrom <rnystrom@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
85 lines
3.6 KiB
Dart
85 lines
3.6 KiB
Dart
// 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.empty()));
|
|
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 = <int>[];
|
|
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.filled(len, -1);
|
|
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));
|
|
}
|