11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ArrayList; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.ConcurrentModificationException; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.NoSuchElementException; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code Multimap} implementations. Caution: when subclassing avoid 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * accidental naming collisions with tests in this class! 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class AbstractMultimapTest extends TestCase { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected abstract Multimap<String, Integer> create(); 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Multimap<String, Integer> createSample() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> sample = create(); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sample.putAll("foo", asList(3, -1, 2, 4, 1)); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sample.putAll("bar", asList(1, 2, 3, 1)); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sample; 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // public for GWT 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Multimap<String, Integer> getMultimap() { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap; 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the key to use as a null placeholder in tests. The default 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * implementation returns {@code null}, but tests for multimaps that don't 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * support null keys should override it. 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected String nullKey() { 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return null; 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Returns the value to use as a null placeholder in tests. The default 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * implementation returns {@code null}, but tests for multimaps that don't 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * support null values should override it. 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected Integer nullValue() { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return null; 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Validate multimap size by calling {@code size()} and also by iterating 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * through the entries. This tests cases where the {@code entries()} list is 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * stored separately, such as the {@link LinkedHashMultimap}. It also 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * verifies that the multimap contains every multimap entry. 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected void assertSize(int expectedSize) { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expectedSize, multimap.size()); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int size = 0; 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, Integer> entry : multimap.entries()) { 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(entry.getKey(), entry.getValue())); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert size++; 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expectedSize, size); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int size2 = 0; 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, Collection<Integer>> entry2 : 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet()) { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert size2 += entry2.getValue().size(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expectedSize, size2); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert protected boolean removedCollectionsAreModifiable() { 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return false; 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize0() { 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize1() { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize2Keys() { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 5); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSize2Values() { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 7); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSizeNull() { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 5); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 5); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(5); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmptyYes() { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmptyNo() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.isEmpty()); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmptyNull() { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.isEmpty()); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIsEmptyRemoved() { 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.remove("foo", 1); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKeyTrue() { 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("foo")); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKeyFalse() { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("bar")); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey(nullKey())); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKeyNull() { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 1); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey(nullKey())); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsValueTrue() { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsValue(1)); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsValueFalse() { 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(2)); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(nullValue())); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsValueNull() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsValue(nullValue())); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKeyValueTrue() { 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testContainsKeyValueRemoved() { 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.remove("foo", 1); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet0() { 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("bar"); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, values.size()); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet1() { 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("bar"); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, values.size()); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(3)); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(5)); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGet2() { 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, values.size()); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(1)); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(3)); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetNull() { 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get(nullKey()); 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, values.size()); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(nullValue())); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(3)); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllIterable() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> iterable = new Iterable<Integer>() { 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<Integer> iterator() { 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Lists.newArrayList(1, 3).iterator(); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", iterable); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 3)); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterable<Integer> emptyIterable = new Iterable<Integer>() { 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<Integer> iterator() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Iterators.emptyIterator(); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", emptyIterable); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("foo"), multimap.keySet()); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllCollection() { 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> collection = Lists.newArrayList(1, 3); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", collection); 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 3)); 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> emptyCollection = Lists.newArrayList(); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", emptyCollection); 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.singleton("foo"), multimap.keySet()); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllCollectionNull() { 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> collection = Lists.newArrayList(1, nullValue()); 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll(nullKey(), collection); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 1)); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), nullValue())); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllEmptyCollection() { 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> collection = Lists.newArrayList(); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", collection); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllMultimap() { 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("cow", 5); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 2); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap2 = create(); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("foo", 1); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("bar", 3); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put(nullKey(), nullValue()); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll(multimap2); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 2)); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("cow", 5)); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), nullValue())); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 2)); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(6); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllReturn_emptyCollection() { 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.putAll("foo", new ArrayList<Integer>())); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.putAll(create())); 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutAllReturn_nonEmptyCollection() { 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.putAll("foo", asList(1, 2, 3))); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.putAll("foo", asList(4, 5, 6))); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.putAll(create())); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> other = create(); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert other.putAll("bar", asList(7, 8, 9)); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.putAll(other)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void checkRemovedCollection(Collection<Integer> collection) { 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (removedCollectionsAreModifiable()) { 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.add(9876); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.remove(9876); 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(collection.contains(9876)); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert collection.add(9876); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) { 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValues() { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = asList(2, nullValue()); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> oldValues = multimap.replaceValues("foo", values); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 2)); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", nullValue())); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(oldValues.contains(1)); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, oldValues.size()); 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(oldValues); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValuesEmpty() { 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = asList(); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> oldValues = multimap.replaceValues("foo", values); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(oldValues.contains(1)); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, oldValues.size()); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(oldValues); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValuesNull() { 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 1); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = asList(2, nullValue()); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> oldValues = multimap.replaceValues(nullKey(), values); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 2)); 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), nullValue())); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(oldValues.contains(1)); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, oldValues.size()); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(oldValues); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValuesNotPresent() { 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = asList(2, 4); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> oldValues = multimap.replaceValues("foo", values); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 2)); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 4)); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotNull(oldValues); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(oldValues.isEmpty()); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(oldValues); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testReplaceValuesDuplicates() { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = Lists.newArrayList(1, 2, 3, 2, 1); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> oldValues = multimap.replaceValues("bar", values); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> replacedValues = multimap.get("bar"); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(multimap.size()); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(replacedValues.size(), multimap.size()); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, oldValues.size()); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(oldValues.contains(3)); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(oldValues); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemove() { 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove("foo", 1)); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 3)); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.remove("bar", 3)); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 3)); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.remove("foo", 2)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 3)); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove("foo", 3)); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveNull() { 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 1); 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove(nullKey(), 1)); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry(nullKey(), 1)); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 3)); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), nullValue())); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove(nullKey(), nullValue())); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry(nullKey(), 1)); 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 3)); 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry(nullKey(), nullValue())); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAll() { 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> removed = multimap.removeAll("foo"); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(removed.contains(1)); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(removed.contains(3)); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, removed.size()); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(removed); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllNull() { 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 1); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> removed = multimap.removeAll(nullKey()); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey(nullKey())); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(removed.contains(1)); 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(removed.contains(nullValue())); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, removed.size()); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(removed); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveAllNotPresent() { 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> removed = multimap.removeAll("bar"); 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotNull(removed); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(removed.isEmpty()); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert checkRemovedCollection(removed); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testClear() { 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.clear(); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.keySet().size()); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySet() { 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> keys = multimap.keySet(); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, keys.size()); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keys.contains("foo")); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keys.contains(nullKey())); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keys.containsAll(Lists.newArrayList("foo", nullKey()))); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(keys.containsAll(Lists.newArrayList("foo", "bar"))); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValues() { 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.values(); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, values.size()); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(1)); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(3)); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(nullValue())); 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(5)); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesClear() { 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.values(); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert values.clear(); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.isEmpty()); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesRemoveAllNullFromEmpty() { 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.values().removeAll(null); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesRetainAllNullFromEmpty() { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.values().retainAll(null); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // the entries collection is more thoroughly tested in MultimapCollectionTest 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntries() { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entries).hasContentsAnyOrder( 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 1), 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", nullValue()), 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry(nullKey(), 3)); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNoSuchElementException() { 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Integer>> entries = 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.entries().iterator(); 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.next(); 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NoSuchElementException expected) {} 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsMap() { 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Collection<Integer>> map = multimap.asMap(); 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, map.size()); 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(map.get("foo")).hasContentsAnyOrder(1, nullValue()); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(map.get(nullKey())).hasContentsAnyOrder(3); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(map.get("bar")); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(map.containsKey("foo")); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(map.containsKey(nullKey())); 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("bar")); 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(map.remove("foo")).hasContentsAnyOrder(1, nullValue()); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, multimap.size()); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(map.remove("bar")); 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get(nullKey()).add(5); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 5)); 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multimap.size()); 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get(nullKey()).clear(); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.size()); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", asList(4, 8)); 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected UnsupportedOperationException"); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 5); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.clear(); 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsMapEntries() { 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Collection<Integer>>> entries = 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet(); 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, entries.size()); 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.contains( 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", multimap.get("foo")))); 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains( 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", multimap.get("foo")))); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains( 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", null))); 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains( 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", null))); 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains( 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", asList(1, 4)))); 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains("foo")); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Collection<Integer>>> iterator = 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.iterator(); 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 2; i++) { 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Collection<Integer>> entry = iterator.next(); 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if ("foo".equals(entry.getKey())) { 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, entry.getValue().size()); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entry.getValue().contains(1)); 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entry.getValue().contains(nullValue())); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } else { 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(nullKey(), entry.getKey()); 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, entry.getValue().size()); 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entry.getValue().contains(3)); 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsMapToString() { 6331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[1]}", multimap.asMap().toString()); 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeys() { 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = multimap.keys(); 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multiset.count("foo")); 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, multiset.count(nullKey())); 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multiset.elementSet()).hasContentsAnyOrder("foo", nullKey()); 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multiset.entrySet().size()); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, multiset.size()); 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Multiset.Entry<String>> entries = multimap.keys().entrySet(); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.contains(Multisets.immutableEntry("foo", 3))); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains(Multisets.immutableEntry("foo", 2))); 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.contains(Maps.immutableEntry("foo", 3))); 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> foo3null1 = 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("foo", "foo", nullKey(), "foo")); 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(foo3null1, multiset); 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multiset, foo3null1); 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.equals( 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(asList("foo", "foo", nullKey(), nullKey())))); 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(foo3null1.hashCode(), multiset.hashCode()); 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(foo3null1.entrySet(), multiset.entrySet()); 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multiset.entrySet(), foo3null1.entrySet()); 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(foo3null1.entrySet().hashCode(), 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.entrySet().hashCode()); 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.remove("bar", 1)); 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, multiset.remove(nullKey(), 4)); 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey(nullKey())); 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entries.iterator().next().getElement()); 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multiset.remove("foo", 1)); 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("foo")); 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multiset.setCount("foo", 0)); 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multiset.setCount("bar", 0)); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysAdd() { 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = multimap.keys(); 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("bar"); 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.add("bar", 2); 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysContainsAll() { 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 6991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = multimap.keys(); 7001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.containsAll(asList("foo", nullKey()))); 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multiset.containsAll(asList("foo", "bar"))); 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysClear() { 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 7081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multiset<String> multiset = multimap.keys(); 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multiset.clear(); 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multiset.isEmpty()); 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 7151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 7161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey(nullKey())); 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysToString() { 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 7); 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 8); 7231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 2]", multimap.keys().toString()); 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysEntrySetIterator() { 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 7); 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 8); 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Multiset.Entry<String>> iterator 7301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = multimap.keys().entrySet().iterator(); 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Multisets.immutableEntry("foo", 2), iterator.next()); 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysEntrySetToString() { 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 7); 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 8); 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 2]", multimap.keys().entrySet().toString()); 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysEntrySetRemove() { 7451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(1, 2, 3)); 7461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Multiset.Entry<String>> entries = multimap.keys().entrySet(); 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.remove(Multisets.immutableEntry("bar", 2))); 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 3]", multimap.keys().entrySet().toString()); 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // doesn't exist in entries, should have no effect 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.remove(Multisets.immutableEntry("foo", 2))); 7531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 3]", multimap.keys().entrySet().toString()); 7541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("Multimap size after keys().entrySet().remove(entry)", 7551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3, multimap.size()); 7561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEqualsTrue() { 7591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 7601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 7611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 7621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, multimap); 7631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap2 = create(); 7651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put(nullKey(), 3); 7661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("foo", 1); 7671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("foo", nullValue()); 7681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, multimap2); 7701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.hashCode(), multimap2.hashCode()); 7711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEqualsFalse() { 7741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 7751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 7761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 7771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap2 = create(); 7791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("bar", 3); 7801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("bar", 1); 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.equals(multimap2)); 7821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("foo", 3); 7841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.equals(multimap2)); 7851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.equals(nullValue())); 7871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.equals("foo")); 7881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIterator() { 7911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 7921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 7931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 4); 7941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int sum = 0; 7951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i : multimap.values()) { 7961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sum += i; 7971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, sum); 7991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteratorEmpty() { 8021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int sum = 0; 8031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i : multimap.values()) { 8041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert sum += i; 8051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, sum); 8071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetAddQuery() { 8101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 8111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 8121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 8131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 8141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 8151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 6); 8161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Verify that values includes effect of put. */ 8181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, values.size()); 8191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(1)); 8201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(5)); 8211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(6)); 8221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsAnyOrder(1, 3, 5); 8231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.containsAll(asList(3, 5))); 8241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.isEmpty()); 8251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo"), values); 8261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").hashCode(), values.hashCode()); 8271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").toString(), values.toString()); 8281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetAddAll() { 8311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 8321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 8331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("foo").addAll(asList(5, 7)); 8341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("bar").addAll(asList(6, 8)); 8351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.get("cow").addAll(Arrays.<Integer>asList()); 8361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(6); 8371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(1, 3, 5, 7); 8381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("bar")).hasContentsAnyOrder(6, 8); 8391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("cow")).isEmpty(); 8401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetRemoveAddQuery() { 8431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 8441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 8451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 8461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 8471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = values.iterator(); 8481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.remove("foo", 1); 8491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.remove("foo", 3); 8501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Verify that values includes effect of remove */ 8521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, values.size()); 8531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(1)); 8541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(6)); 8551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.isEmpty()); 8561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo"), values); 8571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").hashCode(), values.hashCode()); 8581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").toString(), values.toString()); 8591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 8611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* Verify that values includes effect of put. */ 8631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, values.size()); 8641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(1)); 8651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(5)); 8661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.contains(6)); 8671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, values.iterator().next().intValue()); 8681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.isEmpty()); 8691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo"), values); 8701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").hashCode(), values.hashCode()); 8711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.get("foo").toString(), values.toString()); 8721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 8741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.hasNext(); 8751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ConcurrentModificationException expected) {} 8761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 8771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testModifyCollectionFromGet() { 8791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 8801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 8811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 8821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 8831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.add(5)); 8851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(4); 8861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multimap.get("foo").size()); 8871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 5)); 8881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert values.clear(); 8901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 8911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 8921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 8931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.addAll(asList(7, 9))); 8941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 8951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, multimap.get("foo").size()); 8961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 7)); 8971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 9)); 8981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.addAll(Collections.<Integer>emptyList())); 8991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 9001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.remove(7)); 9021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 9031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, multimap.get("foo").size()); 9041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 7)); 9051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 9)); 9061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.remove(77)); 9071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 9081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.add(11)); 9101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.add(13)); 9111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.add(15)); 9121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.add(17)); 9131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.removeAll(asList(11, 15))); 9151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(4); 9161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(9, 13, 17); 9171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.removeAll(asList(21, 25))); 9181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(4); 9191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.retainAll(asList(13, 17, 19))); 9211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 9221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("foo")).hasContentsAnyOrder(13, 17); 9231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(values.retainAll(asList(13, 17, 19))); 9241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 9251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert values.remove(13); 9271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert values.remove(17); 9281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("foo").isEmpty()); 9291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 9301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 9311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetIterator() { 9341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 9351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 9361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 9371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 9381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 9391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = values.iterator(); 9411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer v1 = iterator.next(); 9431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer v2 = iterator.next(); 9451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 9461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer v3 = iterator.next(); 9481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 9491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(asList(v1, v2, v3)).hasContentsAnyOrder(1, 3, 5); 9511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 9521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", v1)); 9531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", v2)); 9541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", v3)); 9551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator = values.iterator(); 9571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer n1 = iterator.next(); 9591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 9601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 9611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer n3 = iterator.next(); 9621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 9631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 9641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(asList(n1, n3)).hasContentsAnyOrder(v1, v3); 9661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 9671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 9681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetClear() { 9711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 9721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 9731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 9741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.clear(); 9751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.isEmpty()); 9761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetPutAllCollection() { 9791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 9801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> collection = Lists.newArrayList(1, 3); 9811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", collection); 9821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsAnyOrder(1, 3); 9831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 9841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetPutAllMultimap() { 9861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 9871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("cow", 5); 9881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 2); 9891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesFoo = multimap.get("foo"); 9901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesBar = multimap.get("bar"); 9911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesCow = multimap.get("cow"); 9921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesNull = multimap.get(nullKey()); 9931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap2 = create(); 9941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("foo", 1); 9951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put("bar", 3); 9961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap2.put(nullKey(), nullValue()); 9971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll(multimap2); 9981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 9991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(valuesFoo).hasContentsAnyOrder(1, 2); 10001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(valuesBar).hasContentsAnyOrder(3); 10011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(valuesCow).hasContentsAnyOrder(5); 10021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(valuesNull).hasContentsAnyOrder(nullValue(), 2); 10031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetRemove() { 10061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 10081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 10091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.remove("foo", 1); 10101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsAnyOrder(3); 10111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetRemoveAll() { 10141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 10161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 10171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.removeAll("foo"); 10181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.isEmpty()); 10191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetReplaceValues() { 10221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 10241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = multimap.get("foo"); 10251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.replaceValues("foo", asList(1, 5)); 10261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsAnyOrder(1, 5); 10271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.replaceValues("foo", new ArrayList<Integer>()); 10291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 10301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 10311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.isEmpty()); 10321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesUpdate() { 10351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 10371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Integer>> iterator = entries.iterator(); 10381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 10401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entry = iterator.next(); 10411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entry.getKey()); 10421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, entry.getValue().intValue()); 10431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 10441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 10451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 10461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 10471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.add(Maps.immutableEntry("bar", 2)); 10501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("UnsupportedOperationException expected"); 10511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 10521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 10531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("bar", 2)); 10541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 10561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 10571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.contains(Maps.immutableEntry("bar", 2))); 10581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.clear(); 10601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 10611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 10621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRemove() { 10651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 10671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 10681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 10691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.remove(Maps.immutableEntry("foo", nullValue()))); 10711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 10721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", nullValue())); 10731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.remove(Maps.immutableEntry("foo", 3))); 10751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.remove(3.5)); 10761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 10771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 10801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRemoveAll() { 10811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 10821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 10831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 10841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.entries().removeAll( 10861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collections.singleton(Maps.immutableEntry("foo", 3)))); 10871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 10881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.entries().removeAll(asList( 10901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3)))); 10911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(2); 10921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("bar")); 10931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 10941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 10951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRemoveAllNullFromEmpty() { 10961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 10971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.entries().removeAll(null); 10981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 10991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 11001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 11031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRetainAll() { 11041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 11051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 11061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 11071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.entries().retainAll(asList( 11091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 1), Maps.immutableEntry("foo", 2), 11101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3)))); 11111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(3); 11121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.entries().retainAll(asList( 11141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), Maps.immutableEntry("bar", 3)))); 11151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 11161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 3)); 11171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesRetainAllNullFromEmpty() { 11201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.entries().retainAll(null); 11221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 11231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 11241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesIterator() { 11271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 11281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Integer>> iterator 11291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = multimap.entries().iterator(); 11301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 11311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("foo", 3), iterator.next()); 11321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 11331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 11341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 11351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesToString() { 11381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 11391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 11401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo=3]", entries.toString()); 11411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesToArray() { 11441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 11451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 11461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<?, ?>[] array = new Entry<?, ?>[3]; 11471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(array, entries.toArray(array)); 11481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("foo", 3), array[0]); 11491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(array[1]); 11501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** 11531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Test calling setValue() on an entry returned by multimap.entries(). 11541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 11551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntrySetValue() { 11561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 11571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 11581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Integer>> entries = multimap.entries(); 11591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Integer>> iterator = entries.iterator(); 11601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entrya = iterator.next(); 11611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entryb = iterator.next(); 11621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 11631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entrya.setValue(3); 11641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 11651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 11661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 11671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("bar", 1)); 11681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 2)); 11691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("bar", 2)); 11701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) entrya.getValue()); 11711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, (int) entryb.getValue()); 11721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /** Verify that the entries remain valid after iterating past them. */ 11751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesCopy() { 11761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 11771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 11781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 11791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Integer>> copy = Sets.newHashSet(multimap.entries()); 11811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, copy.size()); 11821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("foo", 1))); 11831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("foo", 2))); 11841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("bar", 3))); 11851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(copy.contains(Maps.immutableEntry("bar", 1))); 11861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.removeAll("foo"); 11881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, copy.size()); 11891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("foo", 1))); 11901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("foo", 2))); 11911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(copy.contains(Maps.immutableEntry("bar", 3))); 11921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(copy.contains(Maps.immutableEntry("bar", 1))); 11931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 11941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 11951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetRemove() { 11961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 11971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 11981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 11991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> keys = multimap.keySet(); 12001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(keys.remove("foo")); 12011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(keys.remove("bar")); 12021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 12031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 12041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 3)); 12051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetRemoveAllNullFromEmpty() { 12081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.keySet().removeAll(null); 12101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 12111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 12121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetRetainAllNullFromEmpty() { 12151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 12161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.keySet().retainAll(null); 12171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Returning successfully is not ideal, but tolerated. 12181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 12191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetIterator() { 12221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 12231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 12241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 12251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<String> iterator = multimap.keySet().iterator(); 12271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert while (iterator.hasNext()) { 12281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String key = iterator.next(); 12291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if ("foo".equals(key)) { 12301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 12311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 12341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 12351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry(nullKey(), 3)); 12361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator = multimap.keySet().iterator(); 12381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(nullKey(), iterator.next()); 12391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 12401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 12411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 12421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetClear() { 12451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 12461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 12471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 3); 12481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.keySet().clear(); 12501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 12511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 12521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteratorRemove() { 12551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 12561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 12571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 4); 12581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Integer> iterator = multimap.values().iterator(); 12601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert while (iterator.hasNext()) { 12611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int value = iterator.next(); 12621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if ((value % 2) == 0) { 12631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 12641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 12681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 12691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 12701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsMapEntriesUpdate() { 12721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 12731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 12741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Entry<String, Collection<Integer>>> entries = 12751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet(); 12761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Collection<Integer>> entry = entries.iterator().next(); 12771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> values = entry.getValue(); 12781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 12801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, values.size()); 12811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(values.contains(5)); 12821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert values.add(7); 12841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(4); 12851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsValue(7)); 12861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 12881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, entries.size()); 12891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(5); 12901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 12911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(entries.remove(entry)); 12921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 12931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 12941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("bar")); 12951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.remove("foo")); 12961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(entries.remove( 12971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", Collections.singleton(2)))); 12981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 12991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Entry<String, Collection<Integer>>> iterator = 13011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.iterator(); 13021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(iterator.hasNext()); 13031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.next(); 13041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert iterator.remove(); 13051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(iterator.hasNext()); 13061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 13071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 13081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 8); 13101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(1); 13111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entries.clear(); 13121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSize(0); 13131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringNull() { 13161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 13171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", -1); 13181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), nullValue()); 13191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 13201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 13211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), 0); 13221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 13231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", nullValue()); 13241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", nullValue()); 13251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 4); 13261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(nullKey(), -1); 13271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 13281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 13291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 13301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // This test is brittle. The original test was meant to validate the 13321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // contents of the string itself, but key and value ordering tend 13331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // to change under unpredictable circumstances. Instead, we're just ensuring 13341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // that the string not return null and, implicitly, not throw an exception. 13351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNotNull(multimap.toString()); 13361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 13391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerializable() { 13401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = createSample(); 13411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, SerializableTester.reserialize(multimap)); 13421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyToString() { 13451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 13461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", map.toString()); 13471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", map.entries().toString()); 13481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyGetToString() { 13511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 13521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.get("foo"); // shouldn't have any side-effect 13531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", map.toString()); 13541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[]", map.entries().toString()); 13551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetRemoveToString() { 13581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 13591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 1); 13601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 13611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("bar", 3); 13621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.get("foo").remove(2); 13631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.get("bar").remove(1); 13641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{bar=[3]}", map.toString()); 13651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[bar=3]", map.entries().toString()); 13661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 13681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemoveToString() { 13691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> map = create(); 13701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 1); 13711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put("foo", 2); 13721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.remove("foo", 1); 13731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo=2]", map.entries().toString()); 13741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 13751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 1376