10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2013 The Guava Authors 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License. 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software 110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License. 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect.testing.google; 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.collect.testing.features.CollectionSize.ZERO; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; 210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport static org.truth0.Truth.ASSERT; 220888a09821a98ac0680fad765217302858e70fa4Paul Duffin 230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.annotations.GwtCompatible; 240888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.Multimap; 250888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.features.CollectionSize; 260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.features.MapFeature; 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 280888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collection; 290888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map; 300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map.Entry; 310888a09821a98ac0680fad765217302858e70fa4Paul Duffin 320888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 330888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Tests for {@link Multimap#clear()}. 340888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 350888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Louis Wasserman 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin@GwtCompatible 380888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class MultimapClearTester<K, V> extends AbstractMultimapTester<K, V, Multimap<K, V>> { 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin @CollectionSize.Require(absent = ZERO) 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(absent = SUPPORTS_REMOVE) 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearUnsupported() { 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 440888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail("Expected UnsupportedOperationException"); 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (UnsupportedOperationException expected) {} 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin private void assertCleared() { 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(0, multimap().size()); 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(multimap().isEmpty()); 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(multimap(), getSubjectGenerator().create()); 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multimap().entries()).isEmpty(); 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multimap().asMap()).isEmpty(); 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multimap().keySet()).isEmpty(); 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multimap().keys()).isEmpty(); 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(multimap().values()).isEmpty(); 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (K key : sampleKeys()) { 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertGet(key); 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClear() { 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearThroughEntries() { 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().entries().clear(); 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearThroughAsMap() { 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().asMap().clear(); 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearThroughKeySet() { 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().keySet().clear(); 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearThroughKeys() { 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().keys().clear(); 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearThroughValues() { 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().values().clear(); 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertCleared(); 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin @CollectionSize.Require(absent = ZERO) 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearPropagatesToGet() { 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (K key : sampleKeys()) { 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin resetContainer(); 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin Collection<V> collection = multimap().get(key); 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(collection).isEmpty(); 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin @CollectionSize.Require(absent = ZERO) 1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearPropagatesToAsMapGet() { 1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (K key : sampleKeys()) { 1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin resetContainer(); 1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin Collection<V> collection = multimap().asMap().get(key); 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin if (collection != null) { 1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(collection).isEmpty(); 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearPropagatesToAsMap() { 1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<K, Collection<V>> asMap = multimap().asMap(); 1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(asMap).isEmpty(); 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin @MapFeature.Require(SUPPORTS_REMOVE) 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testClearPropagatesToEntries() { 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin Collection<Entry<K, V>> entries = multimap().entries(); 1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap().clear(); 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(entries).isEmpty(); 1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 136