| /* |
| * 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 Calling the .length setter on a List with element type E with an |
| * argument greater than the current length of the list is a runtime error |
| * unless Null <: E |
| * @description Check that calling the .length setter on a List with element |
| * type E with an argument greater than the current length of the list is not a |
| * runtime error if E is subtype of Null |
| * @author sgrekhov@unipro.ru |
| */ |
| // SharedOptions=--enable-experiment=non-nullable |
| // Requirements=nnbd-strong |
| import "dart:async"; |
| import "../../Utils/expect.dart"; |
| |
| class A {} |
| void foo() {} |
| void bar() {} |
| |
| typedef void Foo(); |
| |
| test<T>(T t1, T t2) { |
| List<T> list = [t1, t2]; |
| list.length = 3; |
| Expect.equals(3, list.length); |
| } |
| |
| main() { |
| test(1, "2"); |
| test<Null>(null, null); |
| test<int?>(3, 14); |
| test<String?>("Lily", "was here"); |
| test<A?>(A(), A()); |
| test<Function?>(foo, bar); |
| test<Foo?>(foo, bar); |
| test<FutureOr<A?>>(A(), A()); |
| test<FutureOr<Foo?>>(foo, bar); |
| test<FutureOr<FutureOr<A?>>>(A(), A()); |
| } |