| // 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: |
| /// A spread element in a map literal has a static type that is not assignable |
| /// to [Map<Object, Object>]. |
| /// @description Checks that compile error is thrown if spread element in map |
| /// literal is not assignable to [Map<Object, Object>] |
| /// @author iarkh@unipro.ru |
| |
| |
| import "dart:collection"; |
| |
| class MyIterable<T> extends IterableBase<T> { |
| late MyIterator<T> iterator; |
| MyIterable() { iterator = MyIterator(); } |
| Iterator getIterator<T>() => iterator; |
| } |
| |
| class MyIterator<T> extends Iterator<T> { |
| @override |
| bool moveNext() { return false; } |
| |
| @override |
| T get current => throw "Should not reach here!"; |
| } |
| |
| main() { |
| test1(); |
| test2(); |
| } |
| |
| void test1() { |
| var number = 1; |
| var str = "checkme"; |
| var list = [1, 2, 3, 4, 5]; |
| var itr = new MyIterator(); |
| |
| var m1 = <dynamic, dynamic>{...number}; |
| // ^^^^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD |
| // [cfe] Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map. |
| var m2 = <dynamic, dynamic>{...str}; |
| // ^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD |
| // [cfe] Unexpected type 'String' of a map spread entry. Expected 'dynamic' or a Map. |
| var m3 = <dynamic, dynamic>{...list[0]}; |
| // ^^^^^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD |
| // ^ |
| // [cfe] Unexpected type 'int' of a map spread entry. Expected 'dynamic' or a Map. |
| var m4 = <dynamic, dynamic>{...itr[0]}; |
| // ^^^ |
| // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_OPERATOR |
| // [cfe] The operator '[]' isn't defined for the class 'MyIterator<dynamic>'. |
| } |
| |
| void test2() { |
| var number = 1 as int?; |
| var str = "checkme" as String?; |
| var list = [1, 2, 3, 4, 5] as List?; |
| var itr = new MyIterator() as Iterator?; |
| |
| var m5 = <dynamic, dynamic>{...?number}; |
| // ^^^^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD |
| // [cfe] Unexpected type 'int?' of a map spread entry. Expected 'dynamic' or a Map. |
| var m6 = <dynamic, dynamic>{...?str}; |
| // ^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NOT_MAP_SPREAD |
| // [cfe] Unexpected type 'String?' of a map spread entry. Expected 'dynamic' or a Map. |
| var m7 = <dynamic, dynamic>{...?list[0]}; |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe] Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null. |
| var m8 = <dynamic, dynamic>{...?itr[0]}; |
| // ^ |
| // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe] The operator '[]' isn't defined for the class 'Iterator<dynamic>?'. |
| } |