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 com.google.common.collect.Lists.newArrayList; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newHashSet; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.Sets.newLinkedHashSet; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.collect.testing.IteratorFeature.MODIFIABLE; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static java.util.Arrays.asList; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static org.junit.contrib.truth.Truth.ASSERT; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.IteratorTester; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unit tests for {@code LinkedHashMultimap}. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class LinkedHashMultimapTest extends AbstractSetMultimapTest { 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Multimap<String, Integer> create() { 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return LinkedHashMultimap.create(); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> initializeMultimap5() { 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = getMultimap(); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 5); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 4); 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("cow", 2); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap; 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[3, -1, 2, 4, 1], bar=[1, 2, 3]}", 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createSample().toString()); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderingReadOnly() { 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertOrderingReadOnly(multimap); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderingUnmodifiable() { 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertOrderingReadOnly(Multimaps.unmodifiableMultimap(multimap)); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderingSynchronized() { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertOrderingReadOnly(Multimaps.synchronizedMultimap(multimap)); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SeriazableTester") 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerializationOrdering() { 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> copy 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = SerializableTester.reserializeAndAssert(multimap); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertOrderingReadOnly(copy); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private void assertOrderingReadOnly(Multimap<String, Integer> multimap) { 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("foo")).hasContentsInOrder(5, 3); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("bar")).hasContentsInOrder(4, 1); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.get("cow")).hasContentsInOrder(2); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "bar", "cow"); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.values()).hasContentsInOrder(5, 4, 3, 2, 1); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Integer>> entryIterator = 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.entries().iterator(); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("foo", 5), entryIterator.next()); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("bar", 4), entryIterator.next()); 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("foo", 3), entryIterator.next()); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("cow", 2), entryIterator.next()); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Maps.immutableEntry("bar", 1), entryIterator.next()); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Iterator<Map.Entry<String, Collection<Integer>>> collectionIterator = 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.asMap().entrySet().iterator(); 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map.Entry<String, Collection<Integer>> entry = collectionIterator.next(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("foo", entry.getKey()); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsInOrder(5, 3); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = collectionIterator.next(); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("bar", entry.getKey()); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsInOrder(4, 1); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry = collectionIterator.next(); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("cow", entry.getKey()); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(entry.getValue()).hasContentsInOrder(2); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOrderingUpdates() { 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.replaceValues("foo", asList(6, 7))).hasContentsInOrder(5, 3); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("foo", "bar", "cow"); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.removeAll("foo")).hasContentsInOrder(6, 7); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("bar", "cow"); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove("bar", 4)); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("bar", "cow"); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.remove("bar", 1)); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("cow"); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 9); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(multimap.keySet()).hasContentsInOrder("cow", "bar"); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringNullExact() { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = getMultimap(); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", -1); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, null); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 2); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, 0); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", null); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", null); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 4); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put(null, -1); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 3); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 1); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "{foo=[3, -1, 2, null, 4, 1], null=[null, 0, -1], bar=[1, 2, null, 3]}", 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.toString()); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPutMultimapOrdered() { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = LinkedHashMultimap.create(); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll(initializeMultimap5()); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertOrderingReadOnly(multimap); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysToString_ordering() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = initializeMultimap5(); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[foo x 2, bar x 2, cow]", multimap.keys().toString()); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreate() { 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap<String, Integer> multimap = LinkedHashMultimap.create(); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1, 3), multimap.get("foo")); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, multimap.expectedValuesPerKey); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromMultimap() { 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createSample(); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap<String, Integer> copy = 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap.create(multimap); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, copy); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, copy.expectedValuesPerKey); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromSizes() { 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap<String, Integer> multimap 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = LinkedHashMultimap.create(20, 15); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 1); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("bar", 2); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.put("foo", 3); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1, 3), multimap.get("foo")); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(15, multimap.expectedValuesPerKey); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCreateFromIllegalSizes() { 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap.create(-20, 15); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LinkedHashMultimap.create(20, -15); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) {} 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testGetIteration() { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, MODIFIABLE, 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newLinkedHashSet(asList(2, 3, 4, 7, 8)), 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3, 4)); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(5, 6)); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(7, 8)); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.get("foo").iterator(); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Integer> elements) { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.get("foo")); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEntriesIteration() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Integer>> set = Sets.newLinkedHashSet(asList( 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 2), 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3), 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 4), 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 5), 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 6))); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Entry<String, Integer>>(6, MODIFIABLE, set, 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Entry<String, Integer>> newTargetIterator() { 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.entries().iterator(); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Entry<String, Integer>> elements) { 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.entries()); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeysIteration() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, newArrayList("foo", "foo", "bar", 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keys().iterator(); 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(multimap.keys())); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValuesIteration() { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Integer>(6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6), 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Integer> newTargetIterator() { 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.values().iterator(); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<Integer> elements) { 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(elements, Lists.newArrayList(multimap.values())); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySetIteration() { 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<String>(6, MODIFIABLE, newLinkedHashSet(asList( 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "foo", "bar", "baz", "dog", "cat")), 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<String> newTargetIterator() { 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.keySet().iterator(); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify(List<String> elements) { 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.keySet()); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("unreasonable slow") 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testAsSetIteration() { 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Entry<String, Collection<Integer>>> set = newLinkedHashSet(asList( 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("foo", 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(2, 3, 6)), 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("bar", 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(4, 5, 10, 11)), 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("baz", 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(7, 8)), 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("dog", 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(9)), 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("cat", 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert (Collection<Integer>) Sets.newHashSet(12, 13, 14)) 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert )); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IteratorTester<Entry<String, Collection<Integer>>>(6, MODIFIABLE, set, 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IteratorTester.KnownOrder.KNOWN_ORDER) { 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> multimap; 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Iterator<Entry<String, Collection<Integer>>> 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert newTargetIterator() { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap = create(); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(2, 3)); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(4, 5)); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("foo", asList(6)); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("baz", asList(7, 8)); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("dog", asList(9)); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("bar", asList(10, 11)); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap.putAll("cat", asList(12, 13, 14)); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return multimap.asMap().entrySet().iterator(); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void verify( 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, Collection<Integer>>> elements) { 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(newHashSet(elements), multimap.asMap().entrySet()); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }.test(); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 359