11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 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 193ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffinimport static com.google.common.truth.Truth.assertThat; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffin 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableListMultimap.Builder; 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionFeature; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.CollectionSize; 267dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.features.MapFeature; 277dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.ListMultimapTestSuiteBuilder; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.TestStringListMultimapGenerator; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.UnmodifiableCollectionTests; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 330888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.Test; 340888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 350888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestSuite; 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Arrays; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableListMultimap}. 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableListMultimapTest extends TestCase { 497dd252788645e940eada959bdde927426e2531c9Paul Duffin public static class ImmutableListMultimapGenerator extends TestStringListMultimapGenerator { 507dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 517dd252788645e940eada959bdde927426e2531c9Paul Duffin protected ListMultimap<String, String> create(Entry<String, String>[] entries) { 527dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableListMultimap.Builder<String, String> builder = ImmutableListMultimap.builder(); 537dd252788645e940eada959bdde927426e2531c9Paul Duffin for (Entry<String, String> entry : entries) { 547dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(entry.getKey(), entry.getValue()); 557dd252788645e940eada959bdde927426e2531c9Paul Duffin } 567dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build(); 577dd252788645e940eada959bdde927426e2531c9Paul Duffin } 587dd252788645e940eada959bdde927426e2531c9Paul Duffin } 597dd252788645e940eada959bdde927426e2531c9Paul Duffin 607dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("suite") 617dd252788645e940eada959bdde927426e2531c9Paul Duffin public static Test suite() { 627dd252788645e940eada959bdde927426e2531c9Paul Duffin TestSuite suite = new TestSuite(); 637dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListMultimapTestSuiteBuilder.using(new ImmutableListMultimapGenerator()) 647dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableListMultimap") 657dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures( 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.ALLOWS_ANY_NULL_QUERIES, 677dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 687dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.KNOWN_ORDER, 697dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionSize.ANY) 707dd252788645e940eada959bdde927426e2531c9Paul Duffin .createTestSuite()); 717dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTestSuite(ImmutableListMultimapTest.class); 727dd252788645e940eada959bdde927426e2531c9Paul Duffin return suite; 737dd252788645e940eada959bdde927426e2531c9Paul Duffin } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntry() { 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = new Builder<String, Integer>() 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put(Maps.immutableEntry("one", 1)) 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1), multimap.get("one")); 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntryAndNullContents() { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry("one", (Integer) null)); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry((String) null, 1)); 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class StringHolder { 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string; 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withMutableEntry() { 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder = 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Builder<String, Integer>(); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final StringHolder holder = new StringHolder(); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "one"; 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String getKey() { 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return holder.string; 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer getValue() { 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "two"; 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1), builder.build().get("one")); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllIterable() { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(1, 2, 3)); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", Arrays.asList(4, 5)); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(6, 7)); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo")); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5), multimap.get("bar")); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllVarargs() { 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 6, 7); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo")); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5), multimap.get("bar")); 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllMultimap() { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 4); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 2); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 3); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> moreToPut = LinkedListMultimap.create(); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 6); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("bar", 5); 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 7); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(moreToPut); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 3, 6, 7), multimap.get("foo")); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5), multimap.get("bar")); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllWithDuplicates() { 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 6, 7); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = builder.build(); 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 3, 1, 6, 7), multimap.get("foo")); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5), multimap.get("bar")); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(8, multimap.size()); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutWithDuplicates() { 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("foo", 1); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = builder.build(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 3, 1), multimap.get("foo")); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5), multimap.get("bar")); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(6, multimap.size()); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllMultimapWithDuplicates() { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 4); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 2); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 5); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> moreToPut = LinkedListMultimap.create(); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 6); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("bar", 4); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 7); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 2); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(moreToPut); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(1, 2, 1, 6, 7, 2), multimap.get("foo")); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Arrays.asList(4, 5, 4), multimap.get("bar")); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(9, multimap.size()); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKey() { 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", null); 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(null, Arrays.asList(1, 2, 3)); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(null, 1, 2, 3); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValue() { 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put(null, 1); 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("foo", null); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(1, null, 3)); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, null, 3); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderKeysBy() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderKeysBy(Collections.reverseOrder()); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = builder.build(); 2663ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "c", "b", "a").inOrder(); 2673ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 4, 3, 6, 5, 2).inOrder(); 2683ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 2693ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(3, 6).inOrder(); 2707dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2717dd252788645e940eada959bdde927426e2531c9Paul Duffin 2727dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testBuilderOrderKeysByDuplicates() { 2737dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableListMultimap.Builder<String, Integer> builder 2747dd252788645e940eada959bdde927426e2531c9Paul Duffin = ImmutableListMultimap.builder(); 2757dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("bb", 3); 2767dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("d", 2); 2777dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("a", 5); 2787dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.orderKeysBy(new Ordering<String>() { 2797dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2807dd252788645e940eada959bdde927426e2531c9Paul Duffin public int compare(String left, String right) { 2817dd252788645e940eada959bdde927426e2531c9Paul Duffin return left.length() - right.length(); 2827dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2837dd252788645e940eada959bdde927426e2531c9Paul Duffin }); 2847dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("cc", 4); 2857dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("a", 2); 2867dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("bb", 6); 2877dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableListMultimap<String, Integer> multimap = builder.build(); 2883ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "a", "bb", "cc").inOrder(); 2893ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 5, 2, 3, 6, 4).inOrder(); 2903ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 2913ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("bb")).has().exactly(3, 6).inOrder(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderValuesBy() { 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderValuesBy(Collections.reverseOrder()); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = builder.build(); 3053ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("b", "d", "a", "c").inOrder(); 3063ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(6, 3, 2, 5, 2, 4).inOrder(); 3073ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 3083ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(6, 3).inOrder(); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderKeysAndValuesBy() { 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.Builder<String, Integer> builder 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableListMultimap.builder(); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderKeysBy(Collections.reverseOrder()); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderValuesBy(Collections.reverseOrder()); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Integer> multimap = builder.build(); 3233ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "c", "b", "a").inOrder(); 3243ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 4, 6, 3, 5, 2).inOrder(); 3253ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 3263ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(6, 3).inOrder(); 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<String, Integer> input = ArrayListMultimap.create(); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("bar", 2); 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 3); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, input); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(input, multimap); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfWithDuplicates() { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<String, Integer> input = ArrayListMultimap.create(); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("bar", 2); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 3); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, input); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(input, multimap); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfEmpty() { 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<String, Integer> input = ArrayListMultimap.create(); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.copyOf(input); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, input); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(input, multimap); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfImmutableListMultimap() { 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, ImmutableListMultimap.copyOf(multimap)); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfNullKey() { 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<String, Integer> input = ArrayListMultimap.create(); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put(null, 1); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.copyOf(input); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfNullValue() { 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<String, Integer> input = ArrayListMultimap.create(); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.putAll("foo", Arrays.asList(1, null, 3)); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.copyOf(input); 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultimapReads() { 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.of(); 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(1)); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.entries().isEmpty()); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.equals(ArrayListMultimap.create())); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptyList(), multimap.get("foo")); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.hashCode()); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(), multimap.keys()); 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptySet(), multimap.keySet()); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.size()); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.values().isEmpty()); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", multimap.toString()); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultimapWrites() { 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.of(); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultimapIsUnmodifiable( 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap, "foo", 1); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private Multimap<String, Integer> createMultimap() { 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableListMultimap.<String, Integer>builder() 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 1).put("bar", 2).put("foo", 3).build(); 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapReads() { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("foo")); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("cat")); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsValue(1)); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(5)); 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("cat", 1)); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 5)); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.entries().isEmpty()); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multimap.size()); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.isEmpty()); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString()); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapWrites() { 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultimapIsUnmodifiable( 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap, "bar", 2); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapEquals() { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> arrayListMultimap 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ArrayListMultimap.create(); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert arrayListMultimap.putAll("foo", Arrays.asList(1, 3)); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert arrayListMultimap.put("bar", 2); 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(multimap, createMultimap(), arrayListMultimap, 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.<String, Integer>builder() 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 1).put("foo", 3).build()) 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder() 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 3).put("foo", 1).build()) 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder() 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 2).put("foo", 3).put("foo", 1).build()) 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(ImmutableListMultimap.<String, Integer>builder() 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 3).build()) 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf() { 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1), 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1, "two", 2), 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2); 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1, "two", 2, "three", 3), 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1, "two", 2, "three", 3, "four", 4), 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4); 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of( 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverse() { 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.<Integer, String>of(), 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.<String, Integer>of().inverse()); 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of(1, "one"), 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1).inverse()); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of(1, "one", 2, "two"), 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("one", 1, "two", 2).inverse()); 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o').inverse(), 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of('o', "of", 'f', "of", 't', "to", 'o', "to")); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of('f', "foo", 'o', "foo", 'o', "foo"), 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.of("foo", 'f', "foo", 'o', "foo", 'o').inverse()); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverseMinimizesWork() { 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap<String, Character> multimap = 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableListMultimap.<String, Character>builder() 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 'f') 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 'o') 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 'o') 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("poo", 'p') 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("poo", 'o') 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("poo", 'o') 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap.inverse(), multimap.inverse()); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, multimap.inverse().inverse()); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap, 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... alternatingKeysAndValues) { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.size(), alternatingKeysAndValues.length / 2); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : multimap.entries()) { 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.size(), 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserialize(multimap).size()); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap.get("foo")); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LenientSerializableTester.reserializeAndAssertLenient(multimap.keySet()); 5187dd252788645e940eada959bdde927426e2531c9Paul Duffin LenientSerializableTester.reserializeAndAssertLenient(multimap.keys()); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap.asMap()); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesCopy 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = SerializableTester.reserialize(multimap.values()); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(multimap.values()), 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(valuesCopy)); 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptySerialization() { 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableListMultimap.of(); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, SerializableTester.reserialize(multimap)); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 532