1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import com.google.common.annotations.GwtCompatible;
20
21 import junit.framework.TestCase;
22
23 import java.util.EnumMap;
24 import java.util.Map;
25 import java.util.Set;
26
27 @GwtCompatible
28 public class WellBehavedMapTest extends TestCase {
29 enum Foo {
30 X, Y, Z, T
31 }
32
33 public void testEntrySet_contain() {
34 WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
35 new EnumMap<Foo, Integer>(Foo.class));
36 map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
37
38
39 assertTrue(map.entrySet().contains(Maps.immutableEntry(Foo.X, 1)));
40 assertTrue(map.entrySet().contains(Maps.immutableEntry(Foo.Y, new Integer(2))));
41
42
43 assertFalse(map.entrySet().contains(Maps.immutableEntry(Foo.X, 5)));
44
45
46 assertFalse(map.entrySet().contains(Maps.immutableEntry(Foo.T, 0)));
47 }
48
49 public void testEntry_setValue() {
50 WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
51 new EnumMap<Foo, Integer>(Foo.class));
52 map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
53
54 for (Map.Entry<Foo, Integer> entry : map.entrySet()) {
55 entry.setValue(entry.getValue() + 5);
56 }
57
58 assertEquals(ImmutableMap.of(Foo.X, 6, Foo.Y, 7, Foo.Z, 8), map);
59 }
60
61 public void testEntriesAreMutableAndConsistent() {
62 WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
63 new EnumMap<Foo, Integer>(Foo.class));
64 map.putAll(ImmutableMap.of(Foo.X, 1));
65
66 Map.Entry<Foo, Integer> entry1 = Iterables.getOnlyElement(map.entrySet());
67 Map.Entry<Foo, Integer> entry2 = Iterables.getOnlyElement(map.entrySet());
68
69
70 assertNotSame(entry1, entry2);
71
72 Set<Map.Entry<Foo, Integer>> entrySet = map.entrySet();
73
74 assertTrue(entrySet.contains(entry1));
75 assertTrue(entrySet.contains(entry2));
76
77
78 entry1.setValue(2);
79
80
81 assertEquals(entry1.getValue(), entry2.getValue());
82
83
84 assertTrue(entrySet.contains(entry1));
85 assertTrue(entrySet.contains(entry2));
86 }
87
88 public void testEntrySet_remove() {
89 WellBehavedMap<Foo, Integer> map = WellBehavedMap.wrap(
90 new EnumMap<Foo, Integer>(Foo.class));
91 map.putAll(ImmutableMap.of(Foo.X, 1, Foo.Y, 2, Foo.Z, 3));
92 Set<Map.Entry<Foo, Integer>> entrySet = map.entrySet();
93
94
95 Map.Entry<Foo, Integer> entry = Maps.immutableEntry(Foo.Y, 2);
96 assertTrue(entrySet.remove(entry));
97 assertFalse(map.containsKey(Foo.Y));
98 assertNull(map.get(Foo.Y));
99 assertFalse(entrySet.contains(entry));
100
101
102 assertFalse(entrySet.remove(Maps.immutableEntry(Foo.T, 4)));
103
104
105 assertFalse(entrySet.remove(Maps.immutableEntry(Foo.Z, 5)));
106 }
107 }