• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Guava Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.common.collect.testing.testers;
18 
19 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS;
20 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
21 
22 import com.google.common.annotations.GwtCompatible;
23 import com.google.common.collect.testing.AbstractMapTester;
24 import com.google.common.collect.testing.Helpers;
25 import com.google.common.collect.testing.features.CollectionSize;
26 import com.google.common.collect.testing.features.MapFeature;
27 
28 import java.util.Collection;
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.Map.Entry;
32 
33 /**
34  * Tests {@link java.util.Map#equals}.
35  *
36  * @author George van den Driessche
37  * @author Chris Povirk
38  */
39 @GwtCompatible
40 public class MapEqualsTester<K, V> extends AbstractMapTester<K, V> {
testEquals_otherMapWithSameEntries()41   public void testEquals_otherMapWithSameEntries() {
42     assertTrue(
43         "A Map should equal any other Map containing the same entries.",
44         getMap().equals(newHashMap(getSampleEntries())));
45   }
46 
47   @CollectionSize.Require(absent = CollectionSize.ZERO)
testEquals_otherMapWithDifferentEntries()48   public void testEquals_otherMapWithDifferentEntries() {
49     Map<K, V> other = newHashMap(getSampleEntries(getNumEntries() - 1));
50     Entry<K, V> e3 = getSubjectGenerator().samples().e3;
51     other.put(e3.getKey(), e3.getValue());
52     assertFalse(
53         "A Map should not equal another Map containing different entries.",
54         getMap().equals(other)
55     );
56   }
57 
58   @CollectionSize.Require(absent = CollectionSize.ZERO)
59   @MapFeature.Require(ALLOWS_NULL_KEYS)
testEquals_containingNullKey()60   public void testEquals_containingNullKey() {
61     Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
62     entries.add(entry(null, samples.e3.getValue()));
63 
64     resetContainer(getSubjectGenerator().create(entries.toArray()));
65     assertTrue("A Map should equal any other Map containing the same entries,"
66         + " even if some keys are null.",
67         getMap().equals(newHashMap(entries)));
68   }
69 
70   @CollectionSize.Require(absent = CollectionSize.ZERO)
testEquals_otherContainsNullKey()71   public void testEquals_otherContainsNullKey() {
72     Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
73     entries.add(entry(null, samples.e3.getValue()));
74     Map<K, V> other = newHashMap(entries);
75 
76     assertFalse(
77         "Two Maps should not be equal if exactly one of them contains a null "
78         + "key.",
79         getMap().equals(other));
80   }
81 
82   @CollectionSize.Require(absent = CollectionSize.ZERO)
83   @MapFeature.Require(ALLOWS_NULL_VALUES)
testEquals_containingNullValue()84   public void testEquals_containingNullValue() {
85     Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
86     entries.add(entry(samples.e3.getKey(), null));
87 
88     resetContainer(getSubjectGenerator().create(entries.toArray()));
89     assertTrue("A Map should equal any other Map containing the same entries,"
90         + " even if some values are null.",
91         getMap().equals(newHashMap(entries)));
92   }
93 
94   @CollectionSize.Require(absent = CollectionSize.ZERO)
testEquals_otherContainsNullValue()95   public void testEquals_otherContainsNullValue() {
96     Collection<Map.Entry<K, V>> entries = getSampleEntries(getNumEntries() - 1);
97     entries.add(entry(samples.e3.getKey(), null));
98     Map<K, V> other = newHashMap(entries);
99 
100     assertFalse(
101         "Two Maps should not be equal if exactly one of them contains a null "
102         + "value.",
103         getMap().equals(other));
104   }
105 
106   @CollectionSize.Require(absent = CollectionSize.ZERO)
testEquals_smallerMap()107   public void testEquals_smallerMap() {
108     Collection<Map.Entry<K, V>> fewerEntries
109         = getSampleEntries(getNumEntries() - 1);
110     assertFalse("Maps of different sizes should not be equal.",
111         getMap().equals(newHashMap(fewerEntries)));
112   }
113 
testEquals_largerMap()114   public void testEquals_largerMap() {
115     Collection<Map.Entry<K, V>> moreEntries
116         = getSampleEntries(getNumEntries() + 1);
117     assertFalse("Maps of different sizes should not be equal.",
118         getMap().equals(newHashMap(moreEntries)));
119   }
120 
testEquals_list()121   public void testEquals_list() {
122     assertFalse("A List should never equal a Map.",
123         getMap().equals(Helpers.copyToList(getMap().entrySet())));
124   }
125 
newHashMap( Collection<? extends Map.Entry<? extends K, ? extends V>> entries)126   private static <K, V> HashMap<K, V> newHashMap(
127       Collection<? extends Map.Entry<? extends K, ? extends V>> entries) {
128     HashMap<K, V> map = new HashMap<K, V>();
129     for (Map.Entry<? extends K, ? extends V> entry : entries) {
130       map.put(entry.getKey(), entry.getValue());
131     }
132     return map;
133   }
134 }
135