• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Guava Authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14 
15 package com.google.common.collect.testing.google;
16 
17 import static com.google.common.collect.testing.Helpers.copyToList;
18 import static com.google.common.collect.testing.Helpers.mapEntry;
19 import static com.google.common.collect.testing.features.CollectionSize.SEVERAL;
20 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE;
21 import static com.google.common.truth.Truth.assertThat;
22 
23 import com.google.common.annotations.GwtCompatible;
24 import com.google.common.collect.ListMultimap;
25 import com.google.common.collect.testing.features.CollectionSize;
26 import com.google.common.collect.testing.features.MapFeature;
27 
28 import java.util.Arrays;
29 import java.util.Collection;
30 import java.util.List;
31 import java.util.Map;
32 
33 /**
34  * Testers for {@link ListMultimap#remove(Object, Object)}.
35  *
36  * @author Louis Wasserman
37  */
38 @GwtCompatible
39 public class ListMultimapRemoveTester<K, V> extends AbstractListMultimapTester<K, V> {
40   @SuppressWarnings("unchecked")
41   @MapFeature.Require(SUPPORTS_REMOVE)
42   @CollectionSize.Require(SEVERAL)
testMultimapRemoveDeletesFirstOccurrence()43   public void testMultimapRemoveDeletesFirstOccurrence() {
44     K k = sampleKeys().e0;
45     V v0 = sampleValues().e0;
46     V v1 = sampleValues().e2;
47     resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0));
48 
49     List<V> list = multimap().get(k);
50     multimap().remove(k, v0);
51     assertThat(list).has().exactly(v1, v0).inOrder();
52   }
53 
54   @SuppressWarnings("unchecked")
55   @MapFeature.Require(SUPPORTS_REMOVE)
56   @CollectionSize.Require(SEVERAL)
testRemoveAtIndexFromGetPropagates()57   public void testRemoveAtIndexFromGetPropagates() {
58     K k = sampleKeys().e0;
59     V v0 = sampleValues().e0;
60     V v1 = sampleValues().e2;
61     List<V> values = Arrays.asList(v0, v1, v0);
62 
63     for (int i = 0; i < 3; i++) {
64       resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0));
65       List<V> expectedValues = copyToList(values);
66 
67       multimap().get(k).remove(i);
68       expectedValues.remove(i);
69 
70       assertGet(k, expectedValues);
71     }
72   }
73 
74   @SuppressWarnings("unchecked")
75   @MapFeature.Require(SUPPORTS_REMOVE)
76   @CollectionSize.Require(SEVERAL)
testRemoveAtIndexFromAsMapPropagates()77   public void testRemoveAtIndexFromAsMapPropagates() {
78     K k = sampleKeys().e0;
79     V v0 = sampleValues().e0;
80     V v1 = sampleValues().e2;
81     List<V> values = Arrays.asList(v0, v1, v0);
82 
83     for (int i = 0; i < 3; i++) {
84       resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0));
85       List<V> expectedValues = copyToList(values);
86 
87       List<V> asMapValue = (List<V>) multimap().asMap().get(k);
88       asMapValue.remove(i);
89       expectedValues.remove(i);
90 
91       assertGet(k, expectedValues);
92     }
93   }
94 
95   @SuppressWarnings("unchecked")
96   @MapFeature.Require(SUPPORTS_REMOVE)
97   @CollectionSize.Require(SEVERAL)
testRemoveAtIndexFromAsMapEntrySetPropagates()98   public void testRemoveAtIndexFromAsMapEntrySetPropagates() {
99     K k = sampleKeys().e0;
100     V v0 = sampleValues().e0;
101     V v1 = sampleValues().e2;
102     List<V> values = Arrays.asList(v0, v1, v0);
103 
104     for (int i = 0; i < 3; i++) {
105       resetContainer(mapEntry(k, v0), mapEntry(k, v1), mapEntry(k, v0));
106       List<V> expectedValues = copyToList(values);
107 
108       Map.Entry<K, Collection<V>> asMapEntry = multimap().asMap().entrySet().iterator().next();
109       List<V> asMapValue = (List<V>) asMapEntry.getValue();
110       asMapValue.remove(i);
111       expectedValues.remove(i);
112 
113       assertGet(k, expectedValues);
114     }
115   }
116 }
117