|  | // 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. | 
|  |  | 
|  | // @dart = 2.9 | 
|  |  | 
|  | library map_unmodifiable_cast_test; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  | import 'dart:collection'; | 
|  |  | 
|  | void main() { | 
|  | testNum(const {1: 37}, "const"); | 
|  | testNum(const <num, num>{1: 37}.cast<int, int>(), "const.cast"); | 
|  |  | 
|  | testNum(new UnmodifiableMapView({1: 37}), "unmod"); | 
|  | testNum(new UnmodifiableMapView<num, num>(<num, num>{1: 37}), "unmod.cast"); | 
|  | testNum(new UnmodifiableMapView<num, num>(<num, num>{1: 37}).cast<int, int>(), | 
|  | "unmodView<num>(num).cast<int>"); | 
|  | testNum(new UnmodifiableMapView<num, num>(<int, int>{1: 37}).cast<int, int>(), | 
|  | "unmodView<num>(int).cast<int>"); | 
|  | testNum( | 
|  | new UnmodifiableMapView<Object, Object>(<num, num>{1: 37}) | 
|  | .cast<int, int>(), | 
|  | "unmodView<Object>(num).cast<int>"); | 
|  | testNum( | 
|  | new UnmodifiableMapView<Object, Object>(<int, int>{1: 37}) | 
|  | .cast<num, num>(), | 
|  | "unmodView<Object>(int).cast<num>"); | 
|  |  | 
|  | var m2 = new Map<num, num>.unmodifiable({1: 37}); | 
|  | testNum(m2, "Map<num>.unmod"); | 
|  | testNum(m2.cast<int, int>(), "Map<num>.unmod.cast<int>"); | 
|  |  | 
|  | Map<Symbol, dynamic> nsm = new NsmMap().foo(a: 0); | 
|  | test(nsm, #a, 0, "nsm", noSuchMethodMap: true); | 
|  | test(nsm.cast<Object, int>(), #a, 0, "nsm.cast", noSuchMethodMap: true); | 
|  | } | 
|  |  | 
|  | void testNum(Map<Object, Object> map, String name) { | 
|  | test(map, 1, 37, name); | 
|  | } | 
|  |  | 
|  | void test( | 
|  | Map<Object, Object> map, Object firstKey, Object firstValue, String name, | 
|  | {bool noSuchMethodMap: false}) { | 
|  | if (!noSuchMethodMap) { | 
|  | Expect.isTrue(map.containsKey(firstKey), "$name.containsKey"); | 
|  | Expect.equals(1, map.length, "$name.length"); | 
|  | Expect.equals(firstKey, map.keys.first, "$name.keys.first"); | 
|  | Expect.equals(firstValue, map.values.first, "$name.values.first"); | 
|  | } | 
|  |  | 
|  | Expect.throwsUnsupportedError(map.clear, "$name.clear"); | 
|  | Expect.throwsUnsupportedError(() { | 
|  | map.remove(firstKey); | 
|  | }, "$name.remove"); | 
|  | Expect.throwsUnsupportedError(() { | 
|  | map[null] = null; | 
|  | }, "$name[]="); | 
|  | Expect.throwsUnsupportedError(() { | 
|  | map.addAll(<Null, Null>{null: null}); | 
|  | }, "$name.addAll"); | 
|  | } | 
|  |  | 
|  | class NsmMap { | 
|  | noSuchMethod(i) => i.namedArguments; | 
|  | foo({a, b, c, d}); | 
|  | } |