OLD | NEW |
(Empty) | |
| 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 |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import "package:collection/collection.dart"; |
| 6 import "package:test/test.dart"; |
| 7 |
| 8 void main() { |
| 9 group("with an empty canonicalized map", () { |
| 10 var map; |
| 11 setUp(() { |
| 12 map = new CanonicalizedMap<int, String, String>(int.parse, |
| 13 isValidKey: new RegExp(r"^\d+$").hasMatch); |
| 14 }); |
| 15 |
| 16 test("canonicalizes keys on set and get", () { |
| 17 map["1"] = "value"; |
| 18 expect(map["01"], equals("value")); |
| 19 }); |
| 20 |
| 21 test("get returns null for uncanonicalizable key", () { |
| 22 expect(map["foo"], isNull); |
| 23 }); |
| 24 |
| 25 test("canonicalizes keys for addAll", () { |
| 26 map.addAll({ |
| 27 "1": "value 1", |
| 28 "2": "value 2", |
| 29 "3": "value 3" |
| 30 }); |
| 31 expect(map["01"], equals("value 1")); |
| 32 expect(map["02"], equals("value 2")); |
| 33 expect(map["03"], equals("value 3")); |
| 34 }); |
| 35 |
| 36 test("uses the final value for addAll collisions", () { |
| 37 map.addAll({ |
| 38 "1": "value 1", |
| 39 "01": "value 2", |
| 40 "001": "value 3" |
| 41 }); |
| 42 expect(map.length, equals(1)); |
| 43 expect(map["0001"], equals("value 3")); |
| 44 }); |
| 45 |
| 46 test("clear clears the map", () { |
| 47 map.addAll({ |
| 48 "1": "value 1", |
| 49 "2": "value 2", |
| 50 "3": "value 3" |
| 51 }); |
| 52 expect(map, isNot(isEmpty)); |
| 53 map.clear(); |
| 54 expect(map, isEmpty); |
| 55 }); |
| 56 |
| 57 test("canonicalizes keys for containsKey", () { |
| 58 map["1"] = "value"; |
| 59 expect(map.containsKey("01"), isTrue); |
| 60 expect(map.containsKey("2"), isFalse); |
| 61 }); |
| 62 |
| 63 test("containsKey returns false for uncanonicalizable key", () { |
| 64 expect(map.containsKey("foo"), isFalse); |
| 65 }); |
| 66 |
| 67 test("canonicalizes keys for putIfAbsent", () { |
| 68 map["1"] = "value"; |
| 69 expect(map.putIfAbsent("01", () => throw "shouldn't run"), |
| 70 equals("value")); |
| 71 expect(map.putIfAbsent("2", () => "new value"), equals("new value")); |
| 72 }); |
| 73 |
| 74 test("canonicalizes keys for remove", () { |
| 75 map["1"] = "value"; |
| 76 expect(map.remove("2"), isNull); |
| 77 expect(map.remove("01"), equals("value")); |
| 78 expect(map, isEmpty); |
| 79 }); |
| 80 |
| 81 test("remove returns null for uncanonicalizable key", () { |
| 82 expect(map.remove("foo"), isNull); |
| 83 }); |
| 84 |
| 85 test("containsValue returns whether a value is in the map", () { |
| 86 map["1"] = "value"; |
| 87 expect(map.containsValue("value"), isTrue); |
| 88 expect(map.containsValue("not value"), isFalse); |
| 89 }); |
| 90 |
| 91 test("isEmpty returns whether the map is empty", () { |
| 92 expect(map.isEmpty, isTrue); |
| 93 map["1"] = "value"; |
| 94 expect(map.isEmpty, isFalse); |
| 95 map.remove("01"); |
| 96 expect(map.isEmpty, isTrue); |
| 97 }); |
| 98 |
| 99 test("isNotEmpty returns whether the map isn't empty", () { |
| 100 expect(map.isNotEmpty, isFalse); |
| 101 map["1"] = "value"; |
| 102 expect(map.isNotEmpty, isTrue); |
| 103 map.remove("01"); |
| 104 expect(map.isNotEmpty, isFalse); |
| 105 }); |
| 106 |
| 107 test("length returns the number of pairs in the map", () { |
| 108 expect(map.length, equals(0)); |
| 109 map["1"] = "value 1"; |
| 110 expect(map.length, equals(1)); |
| 111 map["01"] = "value 01"; |
| 112 expect(map.length, equals(1)); |
| 113 map["02"] = "value 02"; |
| 114 expect(map.length, equals(2)); |
| 115 }); |
| 116 |
| 117 test("uses original keys for keys", () { |
| 118 map["001"] = "value 1"; |
| 119 map["02"] = "value 2"; |
| 120 expect(map.keys, equals(["001", "02"])); |
| 121 }); |
| 122 |
| 123 test("uses original keys for forEach", () { |
| 124 map["001"] = "value 1"; |
| 125 map["02"] = "value 2"; |
| 126 |
| 127 var keys = []; |
| 128 map.forEach((key, value) => keys.add(key)); |
| 129 expect(keys, equals(["001", "02"])); |
| 130 }); |
| 131 |
| 132 test("values returns all values in the map", () { |
| 133 map.addAll({ |
| 134 "1": "value 1", |
| 135 "01": "value 01", |
| 136 "2": "value 2", |
| 137 "03": "value 03" |
| 138 }); |
| 139 |
| 140 expect(map.values, equals(["value 01", "value 2", "value 03"])); |
| 141 }); |
| 142 }); |
| 143 |
| 144 group("CanonicalizedMap.from", () { |
| 145 test("canonicalizes its keys", () { |
| 146 var map = new CanonicalizedMap.from({ |
| 147 "1": "value 1", |
| 148 "2": "value 2", |
| 149 "3": "value 3" |
| 150 }, int.parse); |
| 151 expect(map["01"], equals("value 1")); |
| 152 expect(map["02"], equals("value 2")); |
| 153 expect(map["03"], equals("value 3")); |
| 154 }); |
| 155 |
| 156 test("uses the final value for collisions", () { |
| 157 var map = new CanonicalizedMap.from({ |
| 158 "1": "value 1", |
| 159 "01": "value 2", |
| 160 "001": "value 3" |
| 161 }, int.parse); |
| 162 expect(map.length, equals(1)); |
| 163 expect(map["0001"], equals("value 3")); |
| 164 }); |
| 165 }); |
| 166 } |
OLD | NEW |