Index: pkg/collection/test/canonicalized_map_test.dart |
diff --git a/pkg/collection/test/canonicalized_map_test.dart b/pkg/collection/test/canonicalized_map_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0c726fbb6a57478fb4cb5b1c716fb6d05b1a7c51 |
--- /dev/null |
+++ b/pkg/collection/test/canonicalized_map_test.dart |
@@ -0,0 +1,97 @@ |
+// Copyright (c) 2014, 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:collection/collection.dart"; |
+import "package:unittest/unittest.dart"; |
+ |
+void main() { |
+ group("with an empty canonicalized map", () { |
+ var map; |
+ setUp(() => map = new CanonicalizedMap((key) => key.toLowerCase())); |
+ |
+ test("canonicalizes keys on set and get", () { |
+ map["FoO"] = "value"; |
+ expect(map["fOo"], equals("value")); |
+ }); |
+ |
+ test("canonicalizes keys for addAll", () { |
+ map.addAll({ |
+ "FoO": "value 1", |
+ "bAr": "value 2", |
+ "baZ": "value 3" |
+ }); |
+ expect(map["fOo"], equals("value 1")); |
+ expect(map["BaR"], equals("value 2")); |
+ expect(map["BAz"], equals("value 3")); |
+ }); |
+ |
+ test("uses the final value for addAll collisions", () { |
+ map.addAll({ |
+ "FoO": "value 1", |
+ "foo": "value 2", |
+ "FOO": "value 3" |
+ }); |
+ expect(map.length, equals(1)); |
+ expect(map["fOo"], equals("value 3")); |
+ }); |
+ |
+ test("canonicalizes keys for containsKey", () { |
+ map["FoO"] = "value"; |
+ expect(map.containsKey("fOo"), isTrue); |
+ expect(map.containsKey("bar"), isFalse); |
+ }); |
+ |
+ test("canonicalizes keys for putIfAbsent", () { |
+ map["FoO"] = "value"; |
+ expect(map.putIfAbsent("fOo", () => throw "shouldn't run"), |
+ equals("value")); |
+ expect(map.putIfAbsent("baR", () => "new value"), equals("new value")); |
+ }); |
+ |
+ test("canonicalizes keys for remove", () { |
+ map["FoO"] = "value"; |
+ expect(map.remove("bAr"), isNull); |
+ expect(map.remove("fOo"), equals("value")); |
+ expect(map, isEmpty); |
+ }); |
+ |
+ test("uses original keys for keys", () { |
+ map["FoO"] = "value 1"; |
+ map["bAr"] = "value 2"; |
+ expect(map.keys, equals(["FoO", "bAr"])); |
+ }); |
+ |
+ test("uses original keys for forEach", () { |
+ map["FoO"] = "value 1"; |
+ map["bAr"] = "value 2"; |
+ |
+ var keys = []; |
+ map.forEach((key, value) => keys.add(key)); |
+ expect(keys, equals(["FoO", "bAr"])); |
+ }); |
+ }); |
+ |
+ group("CanonicalizedMap.from", () { |
+ test("canonicalizes its keys", () { |
+ var map = new CanonicalizedMap.from({ |
+ "FoO": "value 1", |
+ "bAr": "value 2", |
+ "baZ": "value 3" |
+ }, (key) => key.toLowerCase()); |
+ expect(map["fOo"], equals("value 1")); |
+ expect(map["BaR"], equals("value 2")); |
+ expect(map["BAz"], equals("value 3")); |
+ }); |
+ |
+ test("uses the final value for collisions", () { |
+ var map = new CanonicalizedMap.from({ |
+ "FoO": "value 1", |
+ "foo": "value 2", |
+ "FOO": "value 3" |
+ }, (key) => key.toLowerCase()); |
+ expect(map.length, equals(1)); |
+ expect(map["fOo"], equals("value 3")); |
+ }); |
+ }); |
+} |