blob: 55b63d97c63ac27497002bb606e83cbdd5a4b8ad [file] [log] [blame]
// Copyright (c) 2018, 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 "dart:typed_data";
import "package:expect/expect.dart";
void main() {
test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
test([1, 2, 3, 4], [5, 6], 0, [5, 6, 3, 4]);
test([1, 2, 3, 4], [5, 6], 1, [1, 5, 6, 4]);
test([1, 2, 3, 4], [], 2, [1, 2, 3, 4]);
test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
test([1, 2, 3, 4], [5, 6], 2, [1, 2, 5, 6]);
test([], [], 0, []);
test([1], [2], 0, [2]);
// Other (non-list) iterables.
test([1, 2, 3, 4], new Iterable.generate(2, (x) => x + 7), 1, [1, 7, 8, 4]);
test([1, 2, 3, 4], [9, 9, 5, 6].skip(2), 1, [1, 5, 6, 4]);
test([1, 2, 3, 4], [5, 6, 9, 9].take(2), 1, [1, 5, 6, 4]);
test([1, 2, 3, 4], [9, 5, 9, 6, 9, 9].where((x) => x != 9), 1, [1, 5, 6, 4]);
test([1, 2, 3, 4], new Set.from([5, 6]), 1, [1, 5, 6, 4]);
// Other types of lists.
test(new Uint8List(4), [5, 6], 1, [0, 5, 6, 0]);
test(new Uint8List(4), [-5, 6], 1, [0, 256 - 5, 6, 0]);
// Over-long iterables. Updates until end, then throws.
testThrows([], [1], 0);
testThrows([2], [1], 1);
testThrows([2], [1], 1);
testThrows([1, 2, 3, 4], [5, 6, 7, 8], 2, [1, 2, 5, 6]);
// Throwing iterable.
Expect.throws(() {
Iterable<int> throwingIterable() sync* {
yield 1;
throw "2";
}
List.writeIterable([1, 2, 3], 1, throwingIterable());
}, (e) => e == "2");
// Bad start index.
testThrows([1, 2], [1], -1);
testThrows([1, 2], [1], 2);
// Working at a supertype is practical and useful.
test<Object>(<int>[1, 2, 3, 4], <num>[5, 6], 1, [1, 5, 6, 4]);
var d = new D();
test<Object?>(<B?>[null], <C>[d], 0, [d]);
}
testThrows<T>(list, iterable, start, [expect]) {
Expect.throws(() {
List.writeIterable<T>(list, start, iterable);
});
if (expect != null) {
Expect.listEquals(expect, list);
}
}
test<T>(List<T> list, Iterable<T> iterable, int start, List expect) {
List.writeIterable<T>(list, start, iterable);
Expect.listEquals(expect, list);
}
class B {}
class C {}
class D implements B, C {}