blob: 98628d20618a6fa9a869518758ccca65a237ca1f [file] [log] [blame] [edit]
// 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, 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);
}
}