| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import "package:collection/collection.dart"; | 5 import "package:collection/collection.dart"; |
| 6 import "package:test/test.dart"; | 6 import "package:test/test.dart"; |
| 7 | 7 |
| 8 void main() { | 8 void main() { |
| 9 group("with an empty canonicalized map", () { | 9 group("with an empty canonicalized map", () { |
| 10 var map; | 10 var map; |
| 11 setUp(() { | 11 setUp(() { |
| 12 map = new CanonicalizedMap<int, String, String>(int.parse, | 12 map = new CanonicalizedMap<int, String, String>(int.parse, |
| 13 isValidKey: new RegExp(r"^\d+$").hasMatch); | 13 isValidKey: (s) => new RegExp(r"^\d+$").hasMatch(s)); |
| 14 }); | 14 }); |
| 15 | 15 |
| 16 test("canonicalizes keys on set and get", () { | 16 test("canonicalizes keys on set and get", () { |
| 17 map["1"] = "value"; | 17 map["1"] = "value"; |
| 18 expect(map["01"], equals("value")); | 18 expect(map["01"], equals("value")); |
| 19 }); | 19 }); |
| 20 | 20 |
| 21 test("get returns null for uncanonicalizable key", () { | 21 test("get returns null for uncanonicalizable key", () { |
| 22 expect(map["foo"], isNull); | 22 expect(map["foo"], isNull); |
| 23 }); | 23 }); |
| 24 | 24 |
| 25 test("set affects nothing for uncanonicalizable key", () { |
| 26 map["foo"] = "value"; |
| 27 expect(map["foo"], isNull); |
| 28 expect(map.containsKey("foo"), isFalse); |
| 29 expect(map.length, equals(0)); |
| 30 }); |
| 31 |
| 25 test("canonicalizes keys for addAll", () { | 32 test("canonicalizes keys for addAll", () { |
| 26 map.addAll({ | 33 map.addAll({"1": "value 1", "2": "value 2", "3": "value 3"}); |
| 27 "1": "value 1", | |
| 28 "2": "value 2", | |
| 29 "3": "value 3" | |
| 30 }); | |
| 31 expect(map["01"], equals("value 1")); | 34 expect(map["01"], equals("value 1")); |
| 32 expect(map["02"], equals("value 2")); | 35 expect(map["02"], equals("value 2")); |
| 33 expect(map["03"], equals("value 3")); | 36 expect(map["03"], equals("value 3")); |
| 34 }); | 37 }); |
| 35 | 38 |
| 36 test("uses the final value for addAll collisions", () { | 39 test("uses the final value for addAll collisions", () { |
| 37 map.addAll({ | 40 map.addAll({"1": "value 1", "01": "value 2", "001": "value 3"}); |
| 38 "1": "value 1", | |
| 39 "01": "value 2", | |
| 40 "001": "value 3" | |
| 41 }); | |
| 42 expect(map.length, equals(1)); | 41 expect(map.length, equals(1)); |
| 43 expect(map["0001"], equals("value 3")); | 42 expect(map["0001"], equals("value 3")); |
| 44 }); | 43 }); |
| 45 | 44 |
| 46 test("clear clears the map", () { | 45 test("clear clears the map", () { |
| 47 map.addAll({ | 46 map.addAll({"1": "value 1", "2": "value 2", "3": "value 3"}); |
| 48 "1": "value 1", | |
| 49 "2": "value 2", | |
| 50 "3": "value 3" | |
| 51 }); | |
| 52 expect(map, isNot(isEmpty)); | 47 expect(map, isNot(isEmpty)); |
| 53 map.clear(); | 48 map.clear(); |
| 54 expect(map, isEmpty); | 49 expect(map, isEmpty); |
| 55 }); | 50 }); |
| 56 | 51 |
| 57 test("canonicalizes keys for containsKey", () { | 52 test("canonicalizes keys for containsKey", () { |
| 58 map["1"] = "value"; | 53 map["1"] = "value"; |
| 59 expect(map.containsKey("01"), isTrue); | 54 expect(map.containsKey("01"), isTrue); |
| 60 expect(map.containsKey("2"), isFalse); | 55 expect(map.containsKey("2"), isFalse); |
| 61 }); | 56 }); |
| 62 | 57 |
| 63 test("containsKey returns false for uncanonicalizable key", () { | 58 test("containsKey returns false for uncanonicalizable key", () { |
| 64 expect(map.containsKey("foo"), isFalse); | 59 expect(map.containsKey("foo"), isFalse); |
| 65 }); | 60 }); |
| 66 | 61 |
| 67 test("canonicalizes keys for putIfAbsent", () { | 62 test("canonicalizes keys for putIfAbsent", () { |
| 68 map["1"] = "value"; | 63 map["1"] = "value"; |
| 69 expect(map.putIfAbsent("01", () => throw "shouldn't run"), | 64 expect( |
| 70 equals("value")); | 65 map.putIfAbsent("01", () => throw "shouldn't run"), equals("value")); |
| 71 expect(map.putIfAbsent("2", () => "new value"), equals("new value")); | 66 expect(map.putIfAbsent("2", () => "new value"), equals("new value")); |
| 72 }); | 67 }); |
| 73 | 68 |
| 74 test("canonicalizes keys for remove", () { | 69 test("canonicalizes keys for remove", () { |
| 75 map["1"] = "value"; | 70 map["1"] = "value"; |
| 76 expect(map.remove("2"), isNull); | 71 expect(map.remove("2"), isNull); |
| 77 expect(map.remove("01"), equals("value")); | 72 expect(map.remove("01"), equals("value")); |
| 78 expect(map, isEmpty); | 73 expect(map, isEmpty); |
| 79 }); | 74 }); |
| 80 | 75 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 test("uses original keys for forEach", () { | 118 test("uses original keys for forEach", () { |
| 124 map["001"] = "value 1"; | 119 map["001"] = "value 1"; |
| 125 map["02"] = "value 2"; | 120 map["02"] = "value 2"; |
| 126 | 121 |
| 127 var keys = []; | 122 var keys = []; |
| 128 map.forEach((key, value) => keys.add(key)); | 123 map.forEach((key, value) => keys.add(key)); |
| 129 expect(keys, equals(["001", "02"])); | 124 expect(keys, equals(["001", "02"])); |
| 130 }); | 125 }); |
| 131 | 126 |
| 132 test("values returns all values in the map", () { | 127 test("values returns all values in the map", () { |
| 133 map.addAll({ | 128 map.addAll( |
| 134 "1": "value 1", | 129 {"1": "value 1", "01": "value 01", "2": "value 2", "03": "value 03"}); |
| 135 "01": "value 01", | |
| 136 "2": "value 2", | |
| 137 "03": "value 03" | |
| 138 }); | |
| 139 | 130 |
| 140 expect(map.values, equals(["value 01", "value 2", "value 03"])); | 131 expect(map.values, equals(["value 01", "value 2", "value 03"])); |
| 141 }); | 132 }); |
| 142 }); | 133 }); |
| 143 | 134 |
| 144 group("CanonicalizedMap.from", () { | 135 group("CanonicalizedMap.from", () { |
| 145 test("canonicalizes its keys", () { | 136 test("canonicalizes its keys", () { |
| 146 var map = new CanonicalizedMap.from({ | 137 var map = new CanonicalizedMap.from( |
| 147 "1": "value 1", | 138 {"1": "value 1", "2": "value 2", "3": "value 3"}, int.parse); |
| 148 "2": "value 2", | |
| 149 "3": "value 3" | |
| 150 }, int.parse); | |
| 151 expect(map["01"], equals("value 1")); | 139 expect(map["01"], equals("value 1")); |
| 152 expect(map["02"], equals("value 2")); | 140 expect(map["02"], equals("value 2")); |
| 153 expect(map["03"], equals("value 3")); | 141 expect(map["03"], equals("value 3")); |
| 154 }); | 142 }); |
| 155 | 143 |
| 156 test("uses the final value for collisions", () { | 144 test("uses the final value for collisions", () { |
| 157 var map = new CanonicalizedMap.from({ | 145 var map = new CanonicalizedMap.from( |
| 158 "1": "value 1", | 146 {"1": "value 1", "01": "value 2", "001": "value 3"}, int.parse); |
| 159 "01": "value 2", | |
| 160 "001": "value 3" | |
| 161 }, int.parse); | |
| 162 expect(map.length, equals(1)); | 147 expect(map.length, equals(1)); |
| 163 expect(map["0001"], equals("value 3")); | 148 expect(map["0001"], equals("value 3")); |
| 164 }); | 149 }); |
| 165 }); | 150 }); |
| 166 } | 151 } |
| OLD | NEW |