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. 044public class MultisetEntrySetTester<E> extends AbstractMultisetTester<E> { 045 046 @CollectionFeature.Require(SUPPORTS_REMOVE) 047 public void testEntrySet_clear() { 048 getMultiset().entrySet().clear(); 049 assertTrue("multiset not empty after entrySet().clear()", getMultiset().isEmpty()); 050 } 051 052 @CollectionSize.Require(ONE) 053 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 054 public void testEntrySet_iteratorRemovePropagates() { 055 Iterator<Multiset.Entry<E>> iterator = getMultiset().entrySet().iterator(); 056 assertTrue( 057 "non-empty multiset.entrySet() iterator.hasNext() returned false", iterator.hasNext()); 058 assertEquals( 059 "multiset.entrySet() iterator.next() returned incorrect entry", 060 Multisets.immutableEntry(e0(), 1), 061 iterator.next()); 062 assertFalse( 063 "size 1 multiset.entrySet() iterator.hasNext() returned true after next()", 064 iterator.hasNext()); 065 iterator.remove(); 066 assertTrue( 067 "multiset isn't empty after multiset.entrySet() iterator.remove()", 068 getMultiset().isEmpty()); 069 } 070 071 @CollectionSize.Require(absent = ZERO) 072 @CollectionFeature.Require(SUPPORTS_REMOVE) 073 public void testEntrySet_removePresent() { 074 assertTrue( 075 "multiset.entrySet.remove(presentEntry) returned false", 076 getMultiset().entrySet().remove(Multisets.immutableEntry(e0(), 1))); 077 assertFalse("multiset contains element after removing its entry", getMultiset().contains(e0())); 078 } 079 080 @CollectionSize.Require(absent = ZERO) 081 @CollectionFeature.Require(SUPPORTS_REMOVE) 082 public void testEntrySet_removeAbsent() { 083 assertFalse( 084 "multiset.entrySet.remove(missingEntry) returned true", 085 getMultiset().entrySet().remove(Multisets.immutableEntry(e0(), 2))); 086 assertTrue( 087 "multiset didn't contain element after removing a missing entry", 088 getMultiset().contains(e0())); 089 } 090 091 @CollectionSize.Require(absent = ZERO) 092 @CollectionFeature.Require(SUPPORTS_REMOVE) 093 public void testEntrySet_removeAllPresent() { 094 assertTrue( 095 "multiset.entrySet.removeAll(presentEntry) returned false", 096 getMultiset() 097 .entrySet() 098 .removeAll(Collections.singleton(Multisets.immutableEntry(e0(), 1)))); 099 assertFalse("multiset contains element after removing its entry", getMultiset().contains(e0())); 100 } 101 102 @CollectionSize.Require(absent = ZERO) 103 @CollectionFeature.Require(SUPPORTS_REMOVE) 104 public void testEntrySet_removeAllAbsent() { 105 assertFalse( 106 "multiset.entrySet.remove(missingEntry) returned true", 107 getMultiset() 108 .entrySet() 109 .removeAll(Collections.singleton(Multisets.immutableEntry(e0(), 2)))); 110 assertTrue( 111 "multiset didn't contain element after removing a missing entry", 112 getMultiset().contains(e0())); 113 } 114 115 @CollectionSize.Require(ONE) 116 @CollectionFeature.Require(SUPPORTS_REMOVE) 117 public void testEntrySet_retainAllPresent() { 118 assertFalse( 119 "multiset.entrySet.retainAll(presentEntry) returned false", 120 getMultiset() 121 .entrySet() 122 .retainAll(Collections.singleton(Multisets.immutableEntry(e0(), 1)))); 123 assertTrue( 124 "multiset doesn't contains element after retaining its entry", 125 getMultiset().contains(e0())); 126 } 127 128 @CollectionSize.Require(ONE) 129 @CollectionFeature.Require(SUPPORTS_REMOVE) 130 public void testEntrySet_retainAllAbsent() { 131 assertTrue( 132 "multiset.entrySet.retainAll(missingEntry) returned true", 133 getMultiset() 134 .entrySet() 135 .retainAll(Collections.singleton(Multisets.immutableEntry(e0(), 2)))); 136 assertFalse( 137 "multiset contains element after retaining a different entry", 138 getMultiset().contains(e0())); 139 } 140 141 @CollectionSize.Require(SEVERAL) 142 @CollectionFeature.Require(SUPPORTS_REMOVE) 143 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 144 public void testEntryViewReflectsRemove() { 145 initThreeCopies(); 146 assertEquals(3, getMultiset().count(e0())); 147 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 148 assertEquals(3, entry.getCount()); 149 assertTrue(getMultiset().remove(e0())); 150 assertEquals(2, entry.getCount()); 151 assertTrue(getMultiset().elementSet().remove(e0())); 152 assertEquals(0, entry.getCount()); 153 } 154 155 @CollectionSize.Require(SEVERAL) 156 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 157 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 158 public void testEntryReflectsIteratorRemove() { 159 initThreeCopies(); 160 assertEquals(3, getMultiset().count(e0())); 161 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 162 assertEquals(3, entry.getCount()); 163 Iterator<E> itr = getMultiset().iterator(); 164 itr.next(); 165 itr.remove(); 166 assertEquals(2, entry.getCount()); 167 itr.next(); 168 itr.remove(); 169 itr.next(); 170 itr.remove(); 171 assertEquals(0, entry.getCount()); 172 } 173 174 @CollectionSize.Require(SEVERAL) 175 @CollectionFeature.Require(SUPPORTS_REMOVE) 176 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 177 public void testEntryReflectsClear() { 178 initThreeCopies(); 179 assertEquals(3, getMultiset().count(e0())); 180 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 181 assertEquals(3, entry.getCount()); 182 getMultiset().clear(); 183 assertEquals(0, entry.getCount()); 184 } 185 186 @CollectionSize.Require(SEVERAL) 187 @CollectionFeature.Require(SUPPORTS_REMOVE) 188 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 189 public void testEntryReflectsEntrySetClear() { 190 initThreeCopies(); 191 assertEquals(3, getMultiset().count(e0())); 192 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 193 assertEquals(3, entry.getCount()); 194 getMultiset().entrySet().clear(); 195 assertEquals(0, entry.getCount()); 196 } 197 198 @CollectionSize.Require(SEVERAL) 199 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 200 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 201 public void testEntryReflectsEntrySetIteratorRemove() { 202 initThreeCopies(); 203 assertEquals(3, getMultiset().count(e0())); 204 Iterator<Multiset.Entry<E>> entryItr = getMultiset().entrySet().iterator(); 205 Multiset.Entry<E> entry = entryItr.next(); 206 entryItr.remove(); 207 assertEquals(0, entry.getCount()); 208 } 209 210 @CollectionSize.Require(SEVERAL) 211 @CollectionFeature.Require(SUPPORTS_REMOVE) 212 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 213 public void testEntryReflectsElementSetClear() { 214 initThreeCopies(); 215 assertEquals(3, getMultiset().count(e0())); 216 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 217 assertEquals(3, entry.getCount()); 218 getMultiset().elementSet().clear(); 219 assertEquals(0, entry.getCount()); 220 } 221 222 @CollectionSize.Require(SEVERAL) 223 @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) 224 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 225 public void testEntryReflectsElementSetIteratorRemove() { 226 initThreeCopies(); 227 assertEquals(3, getMultiset().count(e0())); 228 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 229 assertEquals(3, entry.getCount()); 230 Iterator<E> elementItr = getMultiset().elementSet().iterator(); 231 elementItr.next(); 232 elementItr.remove(); 233 assertEquals(0, entry.getCount()); 234 } 235 236 @CollectionSize.Require(SEVERAL) 237 @CollectionFeature.Require({SUPPORTS_REMOVE, SUPPORTS_ADD}) 238 @MultisetFeature.Require(ENTRIES_ARE_VIEWS) 239 public void testEntryReflectsRemoveThenAdd() { 240 initThreeCopies(); 241 assertEquals(3, getMultiset().count(e0())); 242 Multiset.Entry<E> entry = Iterables.getOnlyElement(getMultiset().entrySet()); 243 assertEquals(3, entry.getCount()); 244 assertTrue(getMultiset().remove(e0())); 245 assertEquals(2, entry.getCount()); 246 assertTrue(getMultiset().elementSet().remove(e0())); 247 assertEquals(0, entry.getCount()); 248 getMultiset().add(e0(), 2); 249 assertEquals(2, entry.getCount()); 250 } 251 252 public void testToString() { 253 assertEquals(getMultiset().entrySet().toString(), getMultiset().toString()); 254 } 255}