| // 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 "package:expect/expect.dart"; | |
| import 'dart:collection'; | |
| import 'dart:convert' show json; | |
| var baseMap = const {"x": 0, "y": 1}; | |
| void main() { | |
| var entry = new MapEntry<int, int>(1, 2); | |
| Expect.isTrue(entry is MapEntry<int, int>); | |
| Expect.isTrue(entry is! MapEntry<String, String>); | |
| Expect.isTrue(entry is! MapEntry<Null, Null>); | |
| Expect.equals(1, entry.key); | |
| Expect.equals(2, entry.value); | |
| Expect.equals("MapEntry(1: 2)", "$entry"); | |
| dynamic dynEntry = entry; | |
| Expect.throwsNoSuchMethodError(() { | |
| dynEntry.key = 0; | |
| }, "key not settable"); | |
| Expect.throwsNoSuchMethodError(() { | |
| dynEntry.value = 0; | |
| }, "value not settable"); | |
| checkEntries(baseMap, baseMap); | |
| checkEntries(baseMap, new Map<String, Object>.unmodifiable(baseMap)); | |
| checkMap({"x": 0, "y": 1}); | |
| checkMap(new Map<String, dynamic>.from(baseMap)); | |
| checkMap(new HashMap<String, dynamic>.from(baseMap)); | |
| checkMap(new LinkedHashMap<String, dynamic>.from(baseMap)); | |
| checkMap(new SplayTreeMap<String, dynamic>.from(baseMap)); | |
| checkMap(json.decode('{"x":0,"y":1}')); | |
| } | |
| void checkMap(Map<String, dynamic> map) { | |
| checkEntries(baseMap, map); | |
| map.addEntries([new MapEntry<String, dynamic>("z", 2)]); | |
| checkEntries({"x": 0, "y": 1, "z": 2}, map); | |
| map.addEntries(<MapEntry<String, dynamic>>[ | |
| new MapEntry("y", 11), | |
| new MapEntry("v", 3), | |
| new MapEntry("w", 4), | |
| ]); | |
| checkEntries({"v": 3, "w": 4, "x": 0, "y": 11, "z": 2}, map); | |
| var valueMap = map.map<int, String>( | |
| (key, value) => new MapEntry(value as int, key), | |
| ); | |
| checkEntries({0: "x", 2: "z", 3: "v", 4: "w", 11: "y"}, valueMap); | |
| } | |
| void checkEntries(Map expected, Map map) { | |
| int byKey(MapEntry e1, MapEntry e2) => e1.key.compareTo(e2.key); | |
| Expect.equals(expected.length, map.entries.length); | |
| var sorted = map.entries.toList()..sort(byKey); | |
| Expect.equals(expected.length, sorted.length); | |
| var expectedEntries = expected.entries.toList(); | |
| for (int i = 0; i < sorted.length; i++) { | |
| Expect.equals(expectedEntries[i].key, sorted[i].key); | |
| Expect.equals(expectedEntries[i].value, sorted[i].value); | |
| } | |
| } |