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 |