001/* 002 * Copyright (C) 2008 The Guava Authors 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.google.common.collect.testing.google; 018 019import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ADD; 020import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_ITERATOR_REMOVE; 021import static com.google.common.collect.testing.features.CollectionFeature.SUPPORTS_REMOVE; 022import static com.google.common.collect.testing.features.CollectionSize.ONE; 023import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 024import static com.google.common.collect.testing.features.CollectionSize.ZERO; 025import static com.google.common.collect.testing.google.MultisetFeature.ENTRIES_ARE_VIEWS; 026 027import com.google.common.annotations.GwtCompatible; 028import com.google.common.collect.Iterables; 029import com.google.common.collect.Multiset; 030import com.google.common.collect.Multisets; 031import com.google.common.collect.testing.features.CollectionFeature; 032import com.google.common.collect.testing.features.CollectionSize; 033import java.util.Collections; 034import java.util.Iterator; 035import org.junit.Ignore; 036 037/** 038 * Tests for {@code Multiset.entrySet}. 039 * 040 * @author Jared Levy 041 */ 042@GwtCompatible 043@Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 044@SuppressWarnings("JUnit4ClassUsedInJUnit3") 045public class MultisetEntrySetTester<E> extends AbstractMultisetTester<E> { 046 047 @CollectionFeature.Require(SUPPORTS_REMOVE) 048 public void testEntrySet_clear() { 049 getMultiset().entrySet().clear(); 050 assertTrue("multiset not empty after entrySet().clear()", getMultiset().isEmpty()); 051 } 052 053 @CollectionSize.Require(ONE) 054 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 055 public void testEntrySet_iteratorRemovePropagates() { 056 Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator(); 057 assertTrue( 058 "non-empty multiset.entrySet() iterator.hasNext() returned false", iterator.hasNext()); 059 assertEquals( 060 "multiset.entrySet() iterator.next() returned incorrect entry", 061 Multisets.immutableEntry(e0(), 1), 062 iterator.next()); 063 assertFalse( 064 "size 1 multiset.entrySet() iterator.hasNext() returned true after next()", 065 iterator.hasNext()); 066 iterator.remove(); 067 assertTrue( 068 "multiset isn't empty after multiset.entrySet() iterator.remove()", 069 getMultiset().isEmpty()); 070 } 071 072 @CollectionSize.Require(absent = ZERO) 073 @CollectionFeature.Require(SUPPORTS_REMOVE) 074 public void testEntrySet_removePresent() { 075 assertTrue( 076 "multiset.entrySet.remove(presentEntry) returned false", 077 getMultiset().entrySet().remove(Multisets.immutableEntry(e0(), 1))); 078 assertFalse("multiset contains element after removing its entry", getMultiset().contains(e0())); 079 } 080 081 @CollectionSize.Require(absent = ZERO) 082 @CollectionFeature.Require(SUPPORTS_REMOVE) 083 public void testEntrySet_removeAbsent() { 084 assertFalse( 085 "multiset.entrySet.remove(missingEntry) returned true", 086 getMultiset().entrySet().remove(Multisets.immutableEntry(e0(), 2))); 087 assertTrue( 088 "multiset didn't contain element after removing a missing entry", 089 getMultiset().contains(e0())); 090 } 091 092 @CollectionSize.Require(absent = ZERO) 093 @CollectionFeature.Require(SUPPORTS_REMOVE) 094 public void testEntrySet_removeAllPresent() { 095 assertTrue( 096 "multiset.entrySet.removeAll(presentEntry) returned false", 097 getMultiset() 098 .entrySet() 099 .removeAll(Collections.singleton(Multisets.immutableEntry(e0(), 1)))); 100 assertFalse("multiset contains element after removing its entry", getMultiset().contains(e0())); 101 } 102 103 @CollectionSize.Require(absent = ZERO) 104 @CollectionFeature.Require(SUPPORTS_REMOVE) 105 public void testEntrySet_removeAllAbsent() { 106 assertFalse( 107 "multiset.entrySet.remove(missingEntry) returned true", 108 getMultiset() 109 .entrySet() 110 .removeAll(Collections.singleton(Multisets.immutableEntry(e0(), 2)))); 111 assertTrue( 112 "multiset didn't contain element after removing a missing entry", 113 getMultiset().contains(e0())); 114 } 115 116 @CollectionSize.Require(ONE) 117 @CollectionFeature.Require(SUPPORTS_REMOVE) 118 public void testEntrySet_retainAllPresent() { 119 assertFalse( 120 "multiset.entrySet.retainAll(presentEntry) returned false", 121 getMultiset() 122 .entrySet() 123 .retainAll(Collections.singleton(Multisets.immutableEntry(e0(), 1)))); 124 assertTrue( 125 "multiset doesn't contains element after retaining its entry", 126 getMultiset().contains(e0())); 127 } 128 129 @CollectionSize.Require(ONE) 130 @CollectionFeature.Require(SUPPORTS_REMOVE) 131 public void testEntrySet_retainAllAbsent() { 132 assertTrue( 133 "multiset.entrySet.retainAll(missingEntry) returned true", 134 getMultiset() 135 .entrySet() 136 .retainAll(Collections.singleton(Multisets.immutableEntry(e0(), 2)))); 137 assertFalse( 138 "multiset contains element after retaining a different entry", 139 getMultiset().contains(e0())); 140 } 141 142 @CollectionSize.Require(SEVERAL) 143 @CollectionFeature.Require(SUPPORTS_REMOVE) 144 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 145 public void testEntryViewReflectsRemove() { 146 initThreeCopies(); 147 assertEquals(3, getMultiset().count(e0())); 148 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 149 assertEquals(3, entry.getCount()); 150 assertTrue(getMultiset().remove(e0())); 151 assertEquals(2, entry.getCount()); 152 assertTrue(getMultiset().elementSet().remove(e0())); 153 assertEquals(0, entry.getCount()); 154 } 155 156 @CollectionSize.Require(SEVERAL) 157 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 158 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 159 public void testEntryReflectsIteratorRemove() { 160 initThreeCopies(); 161 assertEquals(3, getMultiset().count(e0())); 162 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 163 assertEquals(3, entry.getCount()); 164 Iterator<E> itr = getMultiset().iterator(); 165 itr.next(); 166 itr.remove(); 167 assertEquals(2, entry.getCount()); 168 itr.next(); 169 itr.remove(); 170 itr.next(); 171 itr.remove(); 172 assertEquals(0, entry.getCount()); 173 } 174 175 @CollectionSize.Require(SEVERAL) 176 @CollectionFeature.Require(SUPPORTS_REMOVE) 177 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 178 public void testEntryReflectsClear() { 179 initThreeCopies(); 180 assertEquals(3, getMultiset().count(e0())); 181 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 182 assertEquals(3, entry.getCount()); 183 getMultiset().clear(); 184 assertEquals(0, entry.getCount()); 185 } 186 187 @CollectionSize.Require(SEVERAL) 188 @CollectionFeature.Require(SUPPORTS_REMOVE) 189 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 190 public void testEntryReflectsEntrySetClear() { 191 initThreeCopies(); 192 assertEquals(3, getMultiset().count(e0())); 193 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 194 assertEquals(3, entry.getCount()); 195 getMultiset().entrySet().clear(); 196 assertEquals(0, entry.getCount()); 197 } 198 199 @CollectionSize.Require(SEVERAL) 200 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 201 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 202 public void testEntryReflectsEntrySetIteratorRemove() { 203 initThreeCopies(); 204 assertEquals(3, getMultiset().count(e0())); 205 Iterator<Multiset.Entry<E>> entryItr = getMultiset().entrySet().iterator(); 206 Multiset.Entry<E> entry = entryItr.next(); 207 entryItr.remove(); 208 assertEquals(0, entry.getCount()); 209 } 210 211 @CollectionSize.Require(SEVERAL) 212 @CollectionFeature.Require(SUPPORTS_REMOVE) 213 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 214 public void testEntryReflectsElementSetClear() { 215 initThreeCopies(); 216 assertEquals(3, getMultiset().count(e0())); 217 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 218 assertEquals(3, entry.getCount()); 219 getMultiset().elementSet().clear(); 220 assertEquals(0, entry.getCount()); 221 } 222 223 @CollectionSize.Require(SEVERAL) 224 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 225 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 226 public void testEntryReflectsElementSetIteratorRemove() { 227 initThreeCopies(); 228 assertEquals(3, getMultiset().count(e0())); 229 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 230 assertEquals(3, entry.getCount()); 231 Iterator<E> elementItr = getMultiset().elementSet().iterator(); 232 elementItr.next(); 233 elementItr.remove(); 234 assertEquals(0, entry.getCount()); 235 } 236 237 @CollectionSize.Require(SEVERAL) 238 @CollectionFeature.Require({SUPPORTS_REMOVE, SUPPORTS_ADD}) 239 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 240 public void testEntryReflectsRemoveThenAdd() { 241 initThreeCopies(); 242 assertEquals(3, getMultiset().count(e0())); 243 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 244 assertEquals(3, entry.getCount()); 245 assertTrue(getMultiset().remove(e0())); 246 assertEquals(2, entry.getCount()); 247 assertTrue(getMultiset().elementSet().remove(e0())); 248 assertEquals(0, entry.getCount()); 249 getMultiset().add(e0(), 2); 250 assertEquals(2, entry.getCount()); 251 } 252 253 public void testToString() { 254 assertEquals(getMultiset().entrySet().toString(), getMultiset().toString()); 255 } 256}