MultimapPutTester.java revision 7dd252788645e940eada959bdde927426e2531c9
1/* 2 * Copyright (C) 2012 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 17package com.google.common.collect.testing.google; 18 19import static com.google.common.collect.testing.features.CollectionSize.ZERO; 20import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_KEYS; 21import static com.google.common.collect.testing.features.MapFeature.ALLOWS_NULL_VALUES; 22import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_PUT; 23import static org.truth0.Truth.ASSERT; 24 25import com.google.common.annotations.GwtCompatible; 26import com.google.common.collect.ImmutableList; 27import com.google.common.collect.Lists; 28import com.google.common.collect.Multimap; 29import com.google.common.collect.testing.Helpers; 30import com.google.common.collect.testing.features.CollectionSize; 31import com.google.common.collect.testing.features.MapFeature; 32 33import java.util.Arrays; 34import java.util.Collection; 35import java.util.Iterator; 36import java.util.List; 37import java.util.Map.Entry; 38 39/** 40 * Tester for {@link Multimap#put}. 41 * 42 * @author Louis Wasserman 43 */ 44@GwtCompatible 45public class MultimapPutTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { 46 @MapFeature.Require(SUPPORTS_PUT) 47 public void testPutEmpty() { 48 int size = getNumElements(); 49 50 K key = sampleKeys().e3; 51 V value = sampleValues().e3; 52 53 assertGet(key, ImmutableList.<V>of()); 54 55 assertTrue(multimap().put(key, value)); 56 57 assertGet(key, value); 58 assertEquals(size + 1, multimap().size()); 59 } 60 61 @MapFeature.Require(SUPPORTS_PUT) 62 @CollectionSize.Require(absent = ZERO) 63 public void testPutPresent() { 64 int size = getNumElements(); 65 66 K key = sampleKeys().e0; 67 V oldValue = sampleValues().e0; 68 V newValue = sampleValues().e3; 69 70 assertGet(key, oldValue); 71 72 assertTrue(multimap().put(key, newValue)); 73 74 assertGet(key, oldValue, newValue); 75 assertEquals(size + 1, multimap().size()); 76 } 77 78 @MapFeature.Require(SUPPORTS_PUT) 79 public void testPutTwoElements() { 80 int size = getNumElements(); 81 82 K key = sampleKeys().e0; 83 V v1 = sampleValues().e3; 84 V v2 = sampleValues().e4; 85 86 List<V> values = Helpers.copyToList(multimap().get(key)); 87 88 assertTrue(multimap().put(key, v1)); 89 assertTrue(multimap().put(key, v2)); 90 91 values.add(v1); 92 values.add(v2); 93 94 assertGet(key, values); 95 assertEquals(size + 2, multimap().size()); 96 } 97 98 @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES}) 99 public void testPutNullValue() { 100 int size = getNumElements(); 101 102 multimap().put(sampleKeys().e3, null); 103 104 assertGet(sampleKeys().e3, Lists.newArrayList((V)null)); // ImmutableList.of can't take null. 105 assertEquals(size + 1, multimap().size()); 106 } 107 108 @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS}) 109 public void testPutNullKey() { 110 int size = getNumElements(); 111 112 multimap().put(null, sampleValues().e3); 113 114 assertGet(null, sampleValues().e3); 115 assertEquals(size + 1, multimap().size()); 116 } 117 118 @MapFeature.Require(SUPPORTS_PUT) 119 public void testPutNotPresentKeyPropagatesToGet() { 120 int size = getNumElements(); 121 Collection<V> collection = multimap().get(sampleKeys().e3); 122 ASSERT.<V, Collection<V>>that(collection).isEmpty(); 123 multimap().put(sampleKeys().e3, sampleValues().e3); 124 ASSERT.<V, Collection<V>>that(collection).has().item(sampleValues().e3); 125 assertEquals(size + 1, multimap().size()); 126 } 127 128 @MapFeature.Require(SUPPORTS_PUT) 129 @CollectionSize.Require(absent = ZERO) 130 public void testPutPresentKeyPropagatesToGet() { 131 List<K> keys = Helpers.copyToList(multimap().keySet()); 132 for (K key : keys) { 133 resetContainer(); 134 135 int size = getNumElements(); 136 137 Collection<V> collection = multimap().get(key); 138 Collection<V> expectedCollection = Helpers.copyToList(collection); 139 140 multimap().put(key, sampleValues().e3); 141 expectedCollection.add(sampleValues().e3); 142 ASSERT.<V, Collection<V>>that(collection).has().allFrom(expectedCollection); 143 assertEquals(size + 1, multimap().size()); 144 } 145 } 146 147 @MapFeature.Require(SUPPORTS_PUT) 148 @CollectionSize.Require(absent = ZERO) 149 public void testPutPresentKeyPropagatesToAsMapGet() { 150 List<K> keys = Helpers.copyToList(multimap().keySet()); 151 for (K key : keys) { 152 resetContainer(); 153 154 int size = getNumElements(); 155 156 Collection<V> collection = multimap().asMap().get(key); 157 assertNotNull(collection); 158 Collection<V> expectedCollection = Helpers.copyToList(collection); 159 160 multimap().put(key, sampleValues().e3); 161 expectedCollection.add(sampleValues().e3); 162 ASSERT.<V, Collection<V>>that(collection).has().allFrom(expectedCollection); 163 assertEquals(size + 1, multimap().size()); 164 } 165 } 166 167 @MapFeature.Require(SUPPORTS_PUT) 168 @CollectionSize.Require(absent = ZERO) 169 public void testPutPresentKeyPropagatesToAsMapEntrySet() { 170 List<K> keys = Helpers.copyToList(multimap().keySet()); 171 for (K key : keys) { 172 resetContainer(); 173 174 int size = getNumElements(); 175 176 Iterator<Entry<K, Collection<V>>> asMapItr = multimap().asMap().entrySet().iterator(); 177 Collection<V> collection = null; 178 while (asMapItr.hasNext()) { 179 Entry<K, Collection<V>> asMapEntry = asMapItr.next(); 180 if (key.equals(asMapEntry.getKey())) { 181 collection = asMapEntry.getValue(); 182 break; 183 } 184 } 185 assertNotNull(collection); 186 Collection<V> expectedCollection = Helpers.copyToList(collection); 187 188 multimap().put(key, sampleValues().e3); 189 expectedCollection.add(sampleValues().e3); 190 ASSERT.<V, Collection<V>>that(collection).has().allFrom(expectedCollection); 191 assertEquals(size + 1, multimap().size()); 192 } 193 } 194} 195