11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 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; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSetMultimap.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.SetMultimapTestSuiteBuilder; 287dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.TestStringSetMultimapGenerator; 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 337dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.Test; 347dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestCase; 357dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestSuite; 367dd252788645e940eada959bdde927426e2531c9Paul Duffin 370888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Arrays; 380888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collection; 390888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collections; 400888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map.Entry; 417dd252788645e940eada959bdde927426e2531c9Paul Duffin 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableSetMultimap}. 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Mike Ward 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableSetMultimapTest extends TestCase { 497dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("suite") 507dd252788645e940eada959bdde927426e2531c9Paul Duffin public static Test suite() { 517dd252788645e940eada959bdde927426e2531c9Paul Duffin TestSuite suite = new TestSuite(); 527dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTestSuite(ImmutableSetMultimapTest.class); 537dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(SetMultimapTestSuiteBuilder.using(new TestStringSetMultimapGenerator() { 547dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 557dd252788645e940eada959bdde927426e2531c9Paul Duffin protected SetMultimap<String, String> create(Entry<String, String>[] entries) { 567dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSetMultimap.Builder<String, String> builder = ImmutableSetMultimap.builder(); 577dd252788645e940eada959bdde927426e2531c9Paul Duffin for (Entry<String, String> entry : entries) { 587dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put(entry.getKey(), entry.getValue()); 597dd252788645e940eada959bdde927426e2531c9Paul Duffin } 607dd252788645e940eada959bdde927426e2531c9Paul Duffin return builder.build(); 617dd252788645e940eada959bdde927426e2531c9Paul Duffin } 627dd252788645e940eada959bdde927426e2531c9Paul Duffin }) 637dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableSetMultimap") 647dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures( 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.ALLOWS_ANY_NULL_QUERIES, 667dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.KNOWN_ORDER, 677dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 687dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionSize.ANY) 697dd252788645e940eada959bdde927426e2531c9Paul Duffin .createTestSuite()); 707dd252788645e940eada959bdde927426e2531c9Paul Duffin return suite; 717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntry() { 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = new Builder<String, Integer>() 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put(Maps.immutableEntry("one", 1)) 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1), multimap.get("one")); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntryAndNullContents() { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry("one", (Integer) null)); 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry((String) null, 1)); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class StringHolder { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string; 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withMutableEntry() { 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder = 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Builder<String, Integer>(); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final StringHolder holder = new StringHolder(); 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "one"; 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() { 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String getKey() { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return holder.string; 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer getValue() { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry); 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "two"; 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1), builder.build().get("one")); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllIterable() { 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(1, 2, 3)); 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", Arrays.asList(4, 5)); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(6, 7)); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo")); 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(4, 5), multimap.get("bar")); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllVarargs() { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 6, 7); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo")); 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(4, 5), multimap.get("bar")); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllMultimap() { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 4); 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 2); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 3); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> moreToPut = LinkedListMultimap.create(); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 6); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("bar", 5); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("foo", 7); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(moreToPut); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = builder.build(); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(1, 2, 3, 6, 7), multimap.get("foo")); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(ImmutableSet.of(4, 5), multimap.get("bar")); 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllWithDuplicates() { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 6, 7); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(7, multimap.size()); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutWithDuplicates() { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 1, 2, 3); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("bar", 4, 5); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("foo", 1); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(5, multimap.size()); 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllMultimapWithDuplicates() { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 4); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 2); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", 1); 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("bar", 5); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, multimap.size()); 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKey() { 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("foo", null); 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1); 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(null, Arrays.asList(1, 2, 3)); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(null, 1, 2, 3); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValue() { 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> toPut = LinkedListMultimap.create(); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put(null, 1); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("foo", null); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", Arrays.asList(1, null, 3)); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll("foo", 4, null, 6); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(toPut); 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderKeysBy() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderKeysBy(Collections.reverseOrder()); 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 2523ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "c", "b", "a").inOrder(); 2533ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 4, 3, 6, 5, 2).inOrder(); 2543ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 2553ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(3, 6).inOrder(); 2567dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(multimap.get("a") instanceof ImmutableSortedSet); 2577dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(multimap.get("x") instanceof ImmutableSortedSet); 2587dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(multimap.asMap().get("a") instanceof ImmutableSortedSet); 2597dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2607dd252788645e940eada959bdde927426e2531c9Paul Duffin 2617dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testBuilderOrderKeysByDuplicates() { 2627dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSetMultimap.Builder<String, Integer> builder 2637dd252788645e940eada959bdde927426e2531c9Paul Duffin = ImmutableSetMultimap.builder(); 2647dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("bb", 3); 2657dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("d", 2); 2667dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("a", 5); 2677dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.orderKeysBy(new Ordering<String>() { 2687dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 2697dd252788645e940eada959bdde927426e2531c9Paul Duffin public int compare(String left, String right) { 2707dd252788645e940eada959bdde927426e2531c9Paul Duffin return left.length() - right.length(); 2717dd252788645e940eada959bdde927426e2531c9Paul Duffin } 2727dd252788645e940eada959bdde927426e2531c9Paul Duffin }); 2737dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("cc", 4); 2747dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("a", 2); 2757dd252788645e940eada959bdde927426e2531c9Paul Duffin builder.put("bb", 6); 2767dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSetMultimap<String, Integer> multimap = builder.build(); 2773ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "a", "bb", "cc").inOrder(); 2783ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 5, 2, 3, 6, 4).inOrder(); 2793ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 2803ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("bb")).has().exactly(3, 6).inOrder(); 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("a") instanceof ImmutableSortedSet); 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.get("x") instanceof ImmutableSortedSet); 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.asMap().get("a") instanceof ImmutableSortedSet); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderValuesBy() { 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderValuesBy(Collections.reverseOrder()); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 2973ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("b", "d", "a", "c").inOrder(); 2983ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(6, 3, 2, 5, 2, 4).inOrder(); 2993ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 3003ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(6, 3).inOrder(); 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("a") instanceof ImmutableSortedSet); 3027dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.get("a")).comparator()); 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("x") instanceof ImmutableSortedSet); 3057dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.get("x")).comparator()); 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.asMap().get("a") instanceof ImmutableSortedSet); 3087dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.asMap().get("a")).comparator()); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderOrderKeysAndValuesBy() { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.Builder<String, Integer> builder 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.builder(); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 3); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("d", 2); 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 5); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderKeysBy(Collections.reverseOrder()); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.orderValuesBy(Collections.reverseOrder()); 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("c", 4); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("a", 2); 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("b", 6); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Integer> multimap = builder.build(); 3243ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("d", "c", "b", "a").inOrder(); 3253ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.values()).has().exactly(2, 4, 6, 3, 5, 2).inOrder(); 3263ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(5, 2).inOrder(); 3273ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("b")).has().exactly(6, 3).inOrder(); 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("a") instanceof ImmutableSortedSet); 3297dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.get("a")).comparator()); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.get("x") instanceof ImmutableSortedSet); 3327dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.get("x")).comparator()); 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.asMap().get("a") instanceof ImmutableSortedSet); 3357dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(Collections.reverseOrder(), 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ((ImmutableSortedSet<Integer>) multimap.asMap().get("a")).comparator()); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3387dd252788645e940eada959bdde927426e2531c9Paul Duffin 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultimap<String, Integer> input = HashMultimap.create(); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("bar", 2); 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 3); 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, input); 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(input, multimap); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfWithDuplicates() { 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ArrayListMultimap<Object, Object> input = ArrayListMultimap.create(); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("bar", 2); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 3); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put("foo", 1); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<Object, Object> copy 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSetMultimap.copyOf(input); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, copy.size()); 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfEmpty() { 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultimap<String, Integer> input = HashMultimap.create(); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableSetMultimap.copyOf(input); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap, input); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(input, multimap); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfImmutableSetMultimap() { 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, ImmutableSetMultimap.copyOf(multimap)); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfNullKey() { 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultimap<String, Integer> input = HashMultimap.create(); 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.put(null, 1); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.copyOf(input); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfNullValue() { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultimap<String, Integer> input = HashMultimap.create(); 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert input.putAll("foo", Arrays.asList(1, null, 3)); 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.copyOf(input); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) {} 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultimapReads() { 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableSetMultimap.of(); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("foo")); 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(1)); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 1)); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.entries().isEmpty()); 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.equals(HashMultimap.create())); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptySet(), multimap.get("foo")); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.hashCode()); 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.isEmpty()); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(), multimap.keys()); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.emptySet(), multimap.keySet()); 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, multimap.size()); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.values().isEmpty()); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{}", multimap.toString()); 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyMultimapWrites() { 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableSetMultimap.of(); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultimapIsUnmodifiable( 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap, "foo", 1); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapReads() { 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsKey("foo")); 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsKey("cat")); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsValue(1)); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsValue(5)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(multimap.containsEntry("foo", 1)); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("cat", 1)); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.containsEntry("foo", 5)); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.entries().isEmpty()); 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3, multimap.size()); 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(multimap.isEmpty()); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{foo=[1, 3], bar=[2]}", multimap.toString()); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapWrites() { 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnmodifiableCollectionTests.assertMultimapIsUnmodifiable( 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap, "bar", 2); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMultimapEquals() { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> hashMultimap = HashMultimap.create(); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashMultimap.putAll("foo", Arrays.asList(1, 3)); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashMultimap.put("bar", 2); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new EqualsTester() 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup( 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert multimap, 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createMultimap(), 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashMultimap, 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.<String, Integer>builder() 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 1).put("foo", 3).build(), 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.<String, Integer>builder() 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 3).put("foo", 1).build()) 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(ImmutableSetMultimap.<String, Integer>builder() 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 2).put("foo", 3).put("foo", 1).build()) 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .addEqualityGroup(ImmutableSetMultimap.<String, Integer>builder() 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("bar", 2).put("foo", 3).build()) 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .testEquals(); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf() { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1), 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1, "two", 2), 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2); 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3), 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1, "two", 2, "three", 3, "four", 4), 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMultimapEquals( 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of( 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverse() { 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.<Integer, String>of(), 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.<String, Integer>of().inverse()); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of(1, "one"), 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1).inverse()); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of(1, "one", 2, "two"), 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("one", 1, "two", 2).inverse()); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals( 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of('o', "of", 'f', "of", 't', "to", 'o', "to"), 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o').inverse()); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverseMinimizesWork() { 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap<String, Character> multimap = 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSetMultimap.of("of", 'o', "of", 'f', "to", 't', "to", 'o'); 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap.inverse(), multimap.inverse()); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, multimap.inverse().inverse()); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <K, V> void assertMultimapEquals(Multimap<K, V> multimap, 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... alternatingKeysAndValues) { 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.size(), alternatingKeysAndValues.length / 2); 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : multimap.entries()) { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5057dd252788645e940eada959bdde927426e2531c9Paul Duffin } 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = createMultimap(); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(multimap.size(), 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserialize(multimap).size()); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap.get("foo")); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LenientSerializableTester.reserializeAndAssertLenient(multimap.keySet()); 5157dd252788645e940eada959bdde927426e2531c9Paul Duffin LenientSerializableTester.reserializeAndAssertLenient(multimap.keys()); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(multimap.asMap()); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> valuesCopy 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = SerializableTester.reserialize(multimap.values()); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(HashMultiset.create(multimap.values()), 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert HashMultiset.create(valuesCopy)); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptySerialization() { 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Multimap<String, Integer> multimap = ImmutableSetMultimap.of(); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(multimap, SerializableTester.reserialize(multimap)); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5290888a09821a98ac0680fad765217302858e70fa4Paul Duffin @GwtIncompatible("SerializableTester") 5300888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testSortedSerialization() { 5310888a09821a98ac0680fad765217302858e70fa4Paul Duffin Multimap<String, Integer> multimap = new ImmutableSetMultimap.Builder<String, Integer>() 5320888a09821a98ac0680fad765217302858e70fa4Paul Duffin .orderKeysBy(Ordering.natural().reverse()) 5330888a09821a98ac0680fad765217302858e70fa4Paul Duffin .orderValuesBy(Ordering.usingToString()) 5340888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("a", 2) 5350888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("a", 10) 5360888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("b", 1) 5370888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 5380888a09821a98ac0680fad765217302858e70fa4Paul Duffin multimap = SerializableTester.reserialize(multimap); 5393ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.keySet()).has().exactly("b", "a").inOrder(); 5403ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin assertThat(multimap.get("a")).has().exactly(10, 2).inOrder(); 5410888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Ordering.usingToString(), 5420888a09821a98ac0680fad765217302858e70fa4Paul Duffin ((ImmutableSortedSet<Integer>) multimap.get("a")).comparator()); 5430888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Ordering.usingToString(), 5440888a09821a98ac0680fad765217302858e70fa4Paul Duffin ((ImmutableSortedSet<Integer>) multimap.get("z")).comparator()); 5450888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 5460888a09821a98ac0680fad765217302858e70fa4Paul Duffin 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private ImmutableSetMultimap<String, Integer> createMultimap() { 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSetMultimap.<String, Integer>builder() 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("foo", 1).put("bar", 2).put("foo", 3).build(); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 552