Index: tests/corelib/map_test.dart |
diff --git a/tests/corelib/map_test.dart b/tests/corelib/map_test.dart |
index d405471b2459ba1e58989ca9ab52ac49d5e4f5dd..9fb2bca7f6dcb027a608d2ac588867a215d6208c 100644 |
--- a/tests/corelib/map_test.dart |
+++ b/tests/corelib/map_test.dart |
@@ -14,8 +14,25 @@ void main() { |
testMapLiteral(); |
testNullValue(); |
testTypes(); |
+ |
+ testWeirdStringKeys(new Map()); |
+ testWeirdStringKeys(new Map<String, String>()); |
+ testWeirdStringKeys(new HashMap()); |
+ testWeirdStringKeys(new HashMap<String, String>()); |
+ testWeirdStringKeys(new LinkedHashMap()); |
+ testWeirdStringKeys(new LinkedHashMap<String, String>()); |
+ testWeirdStringKeys(new SplayTreeMap()); |
+ testWeirdStringKeys(new SplayTreeMap<String, String>()); |
+ |
+ testNumericKeys(new Map()); |
+ testNumericKeys(new Map<num, String>()); |
+ testNumericKeys(new HashMap()); |
+ testNumericKeys(new HashMap<num, String>()); |
+ testNumericKeys(new LinkedHashMap()); |
+ testNumericKeys(new LinkedHashMap<num, String>()); |
} |
+ |
void test(Map map) { |
testDeletedElement(map); |
testMap(map, 1, 2, 3, 4, 5, 6, 7, 8); |
@@ -134,52 +151,52 @@ void testMap(Map map, key1, key2, key3, key4, key5, key6, key7, key8) { |
Expect.equals(true, map.containsValue(value1)); |
// Test Map.forEach. |
- Map other_map = new Map(); |
+ Map otherMap = new Map(); |
void testForEachMap(key, value) { |
- other_map[key] = value; |
+ otherMap[key] = value; |
} |
map.forEach(testForEachMap); |
- Expect.equals(true, other_map.containsKey(key1)); |
- Expect.equals(true, other_map.containsKey(key2)); |
- Expect.equals(true, other_map.containsValue(value1)); |
- Expect.equals(true, other_map.containsValue(value2)); |
- Expect.equals(2, other_map.length); |
+ Expect.equals(true, otherMap.containsKey(key1)); |
+ Expect.equals(true, otherMap.containsKey(key2)); |
+ Expect.equals(true, otherMap.containsValue(value1)); |
+ Expect.equals(true, otherMap.containsValue(value2)); |
+ Expect.equals(2, otherMap.length); |
- other_map.clear(); |
- Expect.equals(0, other_map.length); |
+ otherMap.clear(); |
+ Expect.equals(0, otherMap.length); |
// Test Collection.keys. |
void testForEachCollection(value) { |
- other_map[value] = value; |
+ otherMap[value] = value; |
} |
Iterable keys = map.keys; |
keys.forEach(testForEachCollection); |
- Expect.equals(true, other_map.containsKey(key1)); |
- Expect.equals(true, other_map.containsKey(key2)); |
- Expect.equals(true, other_map.containsValue(key1)); |
- Expect.equals(true, other_map.containsValue(key2)); |
- Expect.equals(true, !other_map.containsKey(value1)); |
- Expect.equals(true, !other_map.containsKey(value2)); |
- Expect.equals(true, !other_map.containsValue(value1)); |
- Expect.equals(true, !other_map.containsValue(value2)); |
- Expect.equals(2, other_map.length); |
- other_map.clear(); |
- Expect.equals(0, other_map.length); |
+ Expect.equals(true, otherMap.containsKey(key1)); |
+ Expect.equals(true, otherMap.containsKey(key2)); |
+ Expect.equals(true, otherMap.containsValue(key1)); |
+ Expect.equals(true, otherMap.containsValue(key2)); |
+ Expect.equals(true, !otherMap.containsKey(value1)); |
+ Expect.equals(true, !otherMap.containsKey(value2)); |
+ Expect.equals(true, !otherMap.containsValue(value1)); |
+ Expect.equals(true, !otherMap.containsValue(value2)); |
+ Expect.equals(2, otherMap.length); |
+ otherMap.clear(); |
+ Expect.equals(0, otherMap.length); |
// Test Collection.values. |
Iterable values = map.values; |
values.forEach(testForEachCollection); |
- Expect.equals(true, !other_map.containsKey(key1)); |
- Expect.equals(true, !other_map.containsKey(key2)); |
- Expect.equals(true, !other_map.containsValue(key1)); |
- Expect.equals(true, !other_map.containsValue(key2)); |
- Expect.equals(true, other_map.containsKey(value1)); |
- Expect.equals(true, other_map.containsKey(value2)); |
- Expect.equals(true, other_map.containsValue(value1)); |
- Expect.equals(true, other_map.containsValue(value2)); |
- Expect.equals(2, other_map.length); |
- other_map.clear(); |
- Expect.equals(0, other_map.length); |
+ Expect.equals(true, !otherMap.containsKey(key1)); |
+ Expect.equals(true, !otherMap.containsKey(key2)); |
+ Expect.equals(true, !otherMap.containsValue(key1)); |
+ Expect.equals(true, !otherMap.containsValue(key2)); |
+ Expect.equals(true, otherMap.containsKey(value1)); |
+ Expect.equals(true, otherMap.containsKey(value2)); |
+ Expect.equals(true, otherMap.containsValue(value1)); |
+ Expect.equals(true, otherMap.containsValue(value2)); |
+ Expect.equals(2, otherMap.length); |
+ otherMap.clear(); |
+ Expect.equals(0, otherMap.length); |
// Test Map.putIfAbsent. |
map.clear(); |
@@ -245,7 +262,7 @@ void testNullValue() { |
} |
void testTypes() { |
- Map<int> map; |
+ Map<int, dynamic> map; |
testMap(Map map) { |
map[42] = "text"; |
map[43] = "text"; |
@@ -264,3 +281,87 @@ void testTypes() { |
testMap(new SplayTreeMap<num, String>(Comparable.compare)); |
testMap(new SplayTreeMap<num, String>((num a, num b) => a.compareTo(b))); |
} |
+ |
+void testWeirdStringKeys(Map map) { |
+ // Test weird keys. |
+ var weirdKeys = const [ |
+ 'hasOwnProperty', |
+ 'constructor', |
+ 'toLocaleString', |
+ 'propertyIsEnumerable', |
+ '__defineGetter__', |
+ '__defineSetter__', |
+ '__lookupGetter__', |
+ '__lookupSetter__', |
+ 'isPrototypeOf', |
+ 'toString', |
+ 'valueOf', |
+ '__proto__', |
+ '__count__', |
+ '__parent__', |
+ '']; |
+ Expect.isTrue(map.isEmpty); |
+ for (var key in weirdKeys) { |
+ Expect.isFalse(map.containsKey(key)); |
+ Expect.equals(null, map[key]); |
+ var value = 'value:$key'; |
+ map[key] = value; |
+ Expect.isTrue(map.containsKey(key)); |
+ Expect.equals(value, map[key]); |
+ Expect.equals(value, map.remove(key)); |
+ Expect.isFalse(map.containsKey(key)); |
+ Expect.equals(null, map[key]); |
+ } |
+ Expect.isTrue(map.isEmpty); |
+ |
+} |
+ |
+void testNumericKeys(Map map) { |
+ var numericKeys = const [ |
+ double.INFINITY, |
+ double.NEGATIVE_INFINITY, |
+ 0, |
+ 0.0, |
+ -0.0 ]; |
+ |
+ Expect.isTrue(map.isEmpty); |
+ for (var key in numericKeys) { |
+ Expect.isFalse(map.containsKey(key)); |
+ Expect.equals(null, map[key]); |
+ var value = 'value:$key'; |
+ map[key] = value; |
+ Expect.isTrue(map.containsKey(key)); |
+ Expect.equals(value, map[key]); |
+ Expect.equals(value, map.remove(key)); |
+ Expect.isFalse(map.containsKey(key)); |
+ Expect.equals(null, map[key]); |
+ } |
+ Expect.isTrue(map.isEmpty); |
+ |
+ // Test NaN. |
+ var nan = double.NAN; |
+ Expect.isFalse(map.containsKey(nan)); |
+ Expect.equals(null, map[nan]); |
+ |
+ map[nan] = 'value:0'; |
+ Expect.isFalse(map.containsKey(nan)); |
+ Expect.equals(null, map[nan]); |
+ Expect.equals(1, map.length); |
+ |
+ map[nan] = 'value:1'; |
+ Expect.isFalse(map.containsKey(nan)); |
+ Expect.equals(null, map[nan]); |
+ Expect.equals(2, map.length); |
+ |
+ Expect.equals(null, map.remove(nan)); |
+ Expect.equals(2, map.length); |
+ |
+ var count = 0; |
+ map.forEach((key, value) { |
+ if (key.isNaN) count++; |
+ }); |
+ Expect.equals(2, count); |
+ |
+ map.clear(); |
+ Expect.isTrue(map.isEmpty); |
+} |