1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.google;
18
19 import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
20 import static com.google.common.collect.testing.features.CollectionSize.ZERO;
21 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES;
22 import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUE_QUERIES;
23 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT;
24 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
25 import static com.google.common.truth.Truth.assertThat;
26
27 import com.google.common.annotations.GwtCompatible;
28 import com.google.common.collect.Multimap;
29 import com.google.common.collect.testing.Helpers;
30 import com.google.common.collect.testing.features.CollectionSize;
31 import com.google.common.collect.testing.features.MapFeature;
32
33 import java.util.Collection;
34
35
36
37
38
39
40 @GwtCompatible
41 public class MultimapAsMapGetTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> {
42
43 @CollectionSize.Require(SEVERAL)
44 @MapFeature.Require(SUPPORTS_REMOVE)
45 public void testPropagatesRemoveToMultimap() {
46 resetContainer(
47 Helpers.mapEntry(sampleKeys().e0, sampleValues().e0),
48 Helpers.mapEntry(sampleKeys().e0, sampleValues().e3),
49 Helpers.mapEntry(sampleKeys().e0, sampleValues().e2));
50 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
51 assertTrue(result.remove(sampleValues().e0));
52 assertFalse(multimap().containsEntry(sampleKeys().e0, sampleValues().e0));
53 assertEquals(2, multimap().size());
54 }
55
56 @CollectionSize.Require(absent = ZERO)
57 @MapFeature.Require(SUPPORTS_REMOVE)
58 public void testPropagatesRemoveLastElementToMultimap() {
59 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
60 assertTrue(result.remove(sampleValues().e0));
61 assertGet(sampleKeys().e0);
62 }
63
64 @CollectionSize.Require(absent = ZERO)
65 @MapFeature.Require(SUPPORTS_REMOVE)
66 public void testPropagatesClearToMultimap() {
67 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
68 result.clear();
69 assertGet(sampleKeys().e0);
70 assertThat(result).isEmpty();
71 }
72
73 @CollectionSize.Require(absent = ZERO)
74 @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES})
75 public void testAddNullValue() {
76 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
77 assertTrue(result.add(null));
78 assertTrue(multimap().containsEntry(sampleKeys().e0, null));
79 }
80
81 @CollectionSize.Require(absent = ZERO)
82 @MapFeature.Require({SUPPORTS_REMOVE, ALLOWS_NULL_VALUE_QUERIES})
83 public void testRemoveNullValue() {
84 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
85 assertFalse(result.remove(null));
86 }
87
88 @CollectionSize.Require(absent = ZERO)
89 @MapFeature.Require(value = SUPPORTS_PUT, absent = ALLOWS_NULL_VALUES)
90 public void testAddNullValueUnsupported() {
91 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
92 try {
93 result.add(null);
94 fail("Expected NullPointerException");
95 } catch (NullPointerException expected) {}
96 }
97
98 @CollectionSize.Require(absent = ZERO)
99 @MapFeature.Require(SUPPORTS_PUT)
100 public void testPropagatesAddToMultimap() {
101 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
102 result.add(sampleValues().e3);
103 assertThat(multimap().get(sampleKeys().e0))
104 .has().exactly(sampleValues().e0, sampleValues().e3);
105 }
106
107 @CollectionSize.Require(absent = ZERO)
108 @MapFeature.Require({ SUPPORTS_REMOVE, SUPPORTS_PUT })
109 public void testPropagatesRemoveThenAddToMultimap() {
110 int oldSize = getNumElements();
111
112 K k0 = sampleKeys().e0;
113 V v0 = sampleValues().e0;
114
115 Collection<V> result = multimap().asMap().get(k0);
116 assertTrue(result.remove(v0));
117
118 assertFalse(multimap().containsKey(k0));
119 assertFalse(multimap().containsEntry(k0, v0));
120 assertThat(result).isEmpty();
121
122 V v1 = sampleValues().e1;
123 V v2 = sampleValues().e2;
124
125 assertTrue(result.add(v1));
126 assertTrue(result.add(v2));
127
128 assertThat(result).has().exactly(v1, v2);
129 assertThat(multimap().get(k0)).has().exactly(v1, v2);
130 assertTrue(multimap().containsKey(k0));
131 assertFalse(multimap().containsEntry(k0, v0));
132 assertTrue(multimap().containsEntry(k0, v2));
133 assertEquals(oldSize + 1, multimap().size());
134 }
135
136 @CollectionSize.Require(absent = ZERO)
137 @MapFeature.Require(SUPPORTS_REMOVE)
138 public void testReflectsMultimapRemove() {
139 Collection<V> result = multimap().asMap().get(sampleKeys().e0);
140 multimap().removeAll(sampleKeys().e0);
141 assertThat(result).isEmpty();
142 }
143 }