blob: e65bb952c5d5f3b4235fd04425383439448252bf [file] [log] [blame]
// Copyright (c) 2019, 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.
/// @assertion It is a static error if:
/// If a list or set spread element's static type implements [Iterable<T>] for
/// some [T] and [T] is not assignable to the element type of the list.
/// @description Checks that compile error is not thrown if spread element type
/// in the list literal is assignable to the type of the list.
/// @author
import "dart:collection";
class MyIterable<T> extends IterableBase<T> {
late MyIterator<T> iterator;
MyIterable() { iterator = new MyIterator(); }
Iterator getIterator<T>() { return iterator; }
class MyIterator<T> extends Iterator<T> {
bool moveNext() { return false; }
T get current => throw "Should not reach here!";
main() {
void test1() {
List l1 = <Object> [];
List<bool> l2 = <bool>[true, false, true, true];
List<String> l3 = <String>[];
List<String> l4 = <String>["1", "2"];
List l5 = <Object>["1", "2"];
Iterable<String> i1 = new MyIterable<String>();
Iterable i2 = new MyIterable<Object>();
List list1 = <String>[...l1];
List list2 = <Object>[...l2];
List list3 = <String>[...l3];
List list4 = <String>[...l4];
List list5 = <String>[...l5];
List list16 = <String>[...i1];
List list17 = <String>[...i2];
void test2() {
var l1 = <Object> [] as List?;
var l2 = <bool>[true, false, true, true] as List<bool>?;
var l3 = <String>[] as List<String>?;
var l4 = <String>["1", "2"] as List<String>?;
var l5 = <Object>["1", "2"] as List?;
var i1 = new MyIterable<String>() as Iterable<String>?;
var i2 = new MyIterable<Object>() as Iterable?;
List list8 = <String>[...?l1];
List list9 = <Object>[...?l2];
List list10 = <String>[...?l3];
List list11 = <String>[...?l4];
List list12 = <String>[...?l5];
List list13 = <String>[...?i1];
List list14 = <String>[...?i2];