10888a09821a98ac0680fad765217302858e70fa4Paul Duffin/* 20888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Copyright (C) 2008 The Guava Authors 30888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 40888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 50888a09821a98ac0680fad765217302858e70fa4Paul Duffin * you may not use this file except in compliance with the License. 60888a09821a98ac0680fad765217302858e70fa4Paul Duffin * You may obtain a copy of the License at 70888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 80888a09821a98ac0680fad765217302858e70fa4Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 90888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 100888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Unless required by applicable law or agreed to in writing, software 110888a09821a98ac0680fad765217302858e70fa4Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 120888a09821a98ac0680fad765217302858e70fa4Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130888a09821a98ac0680fad765217302858e70fa4Paul Duffin * See the License for the specific language governing permissions and 140888a09821a98ac0680fad765217302858e70fa4Paul Duffin * limitations under the License. 150888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 160888a09821a98ac0680fad765217302858e70fa4Paul Duffin 170888a09821a98ac0680fad765217302858e70fa4Paul Duffinpackage com.google.common.collect; 180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 190888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.annotations.GwtCompatible; 200888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.base.Joiner; 210888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.ImmutableMap.Builder; 220888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.AnEnum; 230888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.MapInterfaceTest; 240888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.MinimalSet; 250888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.collect.testing.SampleElements.Colliders; 260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport com.google.common.testing.EqualsTester; 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 280888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport junit.framework.TestCase; 290888a09821a98ac0680fad765217302858e70fa4Paul Duffin 300888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.io.Serializable; 310888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Collections; 320888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.EnumMap; 330888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.LinkedHashMap; 340888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map; 350888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.util.Map.Entry; 360888a09821a98ac0680fad765217302858e70fa4Paul Duffin 370888a09821a98ac0680fad765217302858e70fa4Paul Duffin/** 380888a09821a98ac0680fad765217302858e70fa4Paul Duffin * Tests for {@link ImmutableMap}. 390888a09821a98ac0680fad765217302858e70fa4Paul Duffin * 400888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Kevin Bourrillion 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin * @author Jesse Wilson 420888a09821a98ac0680fad765217302858e70fa4Paul Duffin */ 430888a09821a98ac0680fad765217302858e70fa4Paul Duffin@GwtCompatible(emulated = true) 440888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic class ImmutableMapTest extends TestCase { 450888a09821a98ac0680fad765217302858e70fa4Paul Duffin 460888a09821a98ac0680fad765217302858e70fa4Paul Duffin public abstract static class AbstractMapTests<K, V> 470888a09821a98ac0680fad765217302858e70fa4Paul Duffin extends MapInterfaceTest<K, V> { 480888a09821a98ac0680fad765217302858e70fa4Paul Duffin public AbstractMapTests() { 490888a09821a98ac0680fad765217302858e70fa4Paul Duffin super(false, false, false, false, false); 500888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 510888a09821a98ac0680fad765217302858e70fa4Paul Duffin 520888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<K, V> makeEmptyMap() { 530888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new UnsupportedOperationException(); 540888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 550888a09821a98ac0680fad765217302858e70fa4Paul Duffin 560888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static final Joiner joiner = Joiner.on(", "); 570888a09821a98ac0680fad765217302858e70fa4Paul Duffin 580888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected void assertMoreInvariants(Map<K, V> map) { 590888a09821a98ac0680fad765217302858e70fa4Paul Duffin // TODO: can these be moved to MapInterfaceTest? 600888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Entry<K, V> entry : map.entrySet()) { 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(entry.getKey() + "=" + entry.getValue(), 620888a09821a98ac0680fad765217302858e70fa4Paul Duffin entry.toString()); 630888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 640888a09821a98ac0680fad765217302858e70fa4Paul Duffin 650888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("{" + joiner.join(map.entrySet()) + "}", 660888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.toString()); 670888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("[" + joiner.join(map.entrySet()) + "]", 680888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.entrySet().toString()); 690888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("[" + joiner.join(map.keySet()) + "]", 700888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.keySet().toString()); 710888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals("[" + joiner.join(map.values()) + "]", 720888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.values().toString()); 730888a09821a98ac0680fad765217302858e70fa4Paul Duffin 740888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(MinimalSet.from(map.entrySet()), map.entrySet()); 750888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Sets.newHashSet(map.keySet()), map.keySet()); 760888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 770888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 780888a09821a98ac0680fad765217302858e70fa4Paul Duffin 790888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static class MapTests extends AbstractMapTests<String, Integer> { 800888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<String, Integer> makeEmptyMap() { 810888a09821a98ac0680fad765217302858e70fa4Paul Duffin return ImmutableMap.of(); 820888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 830888a09821a98ac0680fad765217302858e70fa4Paul Duffin 840888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<String, Integer> makePopulatedMap() { 850888a09821a98ac0680fad765217302858e70fa4Paul Duffin return ImmutableMap.of("one", 1, "two", 2, "three", 3); 860888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 870888a09821a98ac0680fad765217302858e70fa4Paul Duffin 880888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected String getKeyNotInPopulatedMap() { 890888a09821a98ac0680fad765217302858e70fa4Paul Duffin return "minus one"; 900888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 910888a09821a98ac0680fad765217302858e70fa4Paul Duffin 920888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Integer getValueNotInPopulatedMap() { 930888a09821a98ac0680fad765217302858e70fa4Paul Duffin return -1; 940888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 950888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 960888a09821a98ac0680fad765217302858e70fa4Paul Duffin 970888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static class SingletonMapTests 980888a09821a98ac0680fad765217302858e70fa4Paul Duffin extends AbstractMapTests<String, Integer> { 990888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<String, Integer> makePopulatedMap() { 1000888a09821a98ac0680fad765217302858e70fa4Paul Duffin return ImmutableMap.of("one", 1); 1010888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1030888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected String getKeyNotInPopulatedMap() { 1040888a09821a98ac0680fad765217302858e70fa4Paul Duffin return "minus one"; 1050888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1060888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Integer getValueNotInPopulatedMap() { 1080888a09821a98ac0680fad765217302858e70fa4Paul Duffin return -1; 1090888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1100888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1110888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static class MapTestsWithBadHashes 1130888a09821a98ac0680fad765217302858e70fa4Paul Duffin extends AbstractMapTests<Object, Integer> { 1140888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1150888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<Object, Integer> makeEmptyMap() { 1160888a09821a98ac0680fad765217302858e70fa4Paul Duffin throw new UnsupportedOperationException(); 1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1190888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Map<Object, Integer> makePopulatedMap() { 1200888a09821a98ac0680fad765217302858e70fa4Paul Duffin Colliders colliders = new Colliders(); 1210888a09821a98ac0680fad765217302858e70fa4Paul Duffin return ImmutableMap.of( 1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin colliders.e0, 0, 1230888a09821a98ac0680fad765217302858e70fa4Paul Duffin colliders.e1, 1, 1240888a09821a98ac0680fad765217302858e70fa4Paul Duffin colliders.e2, 2, 1250888a09821a98ac0680fad765217302858e70fa4Paul Duffin colliders.e3, 3); 1260888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1280888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Object getKeyNotInPopulatedMap() { 1290888a09821a98ac0680fad765217302858e70fa4Paul Duffin return new Colliders().e4; 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override protected Integer getValueNotInPopulatedMap() { 1330888a09821a98ac0680fad765217302858e70fa4Paul Duffin return 4; 1340888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1350888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1360888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin public static class CreationTests extends TestCase { 1380888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEmptyBuilder() { 1390888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map 1400888a09821a98ac0680fad765217302858e70fa4Paul Duffin = new Builder<String, Integer>().build(); 1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Collections.<String, Integer>emptyMap(), map); 1420888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1430888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1440888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testSingletonBuilder() { 1450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = new Builder<String, Integer>() 1460888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("one", 1) 1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(map, "one", 1); 1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1500888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1510888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilder() { 1520888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = new Builder<String, Integer>() 1530888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("one", 1) 1540888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("two", 2) 1550888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("three", 3) 1560888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("four", 4) 1570888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("five", 5) 1580888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 1590888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(map, 1600888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 1610888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1620888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilder_withImmutableEntry() { 1640888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = new Builder<String, Integer>() 1650888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put(Maps.immutableEntry("one", 1)) 1660888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 1670888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(map, "one", 1); 1680888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1690888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1700888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilder_withImmutableEntryAndNullContents() { 1710888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 1720888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1730888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(Maps.immutableEntry("one", (Integer) null)); 1740888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1750888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 1760888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1770888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 1780888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(Maps.immutableEntry((String) null, 1)); 1790888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 1800888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 1810888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1820888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1830888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1840888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static class StringHolder { 1850888a09821a98ac0680fad765217302858e70fa4Paul Duffin String string; 1860888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1870888a09821a98ac0680fad765217302858e70fa4Paul Duffin 1880888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilder_withMutableEntry() { 1890888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.Builder<String, Integer> builder = 1900888a09821a98ac0680fad765217302858e70fa4Paul Duffin new Builder<String, Integer>(); 1910888a09821a98ac0680fad765217302858e70fa4Paul Duffin final StringHolder holder = new StringHolder(); 1920888a09821a98ac0680fad765217302858e70fa4Paul Duffin holder.string = "one"; 1930888a09821a98ac0680fad765217302858e70fa4Paul Duffin Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() { 1940888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override public String getKey() { 1950888a09821a98ac0680fad765217302858e70fa4Paul Duffin return holder.string; 1960888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 1970888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override public Integer getValue() { 1980888a09821a98ac0680fad765217302858e70fa4Paul Duffin return 1; 1990888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2000888a09821a98ac0680fad765217302858e70fa4Paul Duffin }; 2010888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2020888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(entry); 2030888a09821a98ac0680fad765217302858e70fa4Paul Duffin holder.string = "two"; 2040888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(builder.build(), "one", 1); 2050888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2060888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2070888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutAllWithEmptyMap() { 2080888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = new Builder<String, Integer>() 2090888a09821a98ac0680fad765217302858e70fa4Paul Duffin .putAll(Collections.<String, Integer>emptyMap()) 2100888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 2110888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Collections.<String, Integer>emptyMap(), map); 2120888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2130888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2140888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutAll() { 2150888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<String, Integer> toPut = new LinkedHashMap<String, Integer>(); 2160888a09821a98ac0680fad765217302858e70fa4Paul Duffin toPut.put("one", 1); 2170888a09821a98ac0680fad765217302858e70fa4Paul Duffin toPut.put("two", 2); 2180888a09821a98ac0680fad765217302858e70fa4Paul Duffin toPut.put("three", 3); 2190888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>(); 2200888a09821a98ac0680fad765217302858e70fa4Paul Duffin moreToPut.put("four", 4); 2210888a09821a98ac0680fad765217302858e70fa4Paul Duffin moreToPut.put("five", 5); 2220888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2230888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = new Builder<String, Integer>() 2240888a09821a98ac0680fad765217302858e70fa4Paul Duffin .putAll(toPut) 2250888a09821a98ac0680fad765217302858e70fa4Paul Duffin .putAll(moreToPut) 2260888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 2270888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(map, 2280888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 2290888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2300888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2310888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderReuse() { 2320888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 2330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> mapOne = builder 2340888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("one", 1) 2350888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("two", 2) 2360888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 2370888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> mapTwo = builder 2380888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("three", 3) 2390888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("four", 4) 2400888a09821a98ac0680fad765217302858e70fa4Paul Duffin .build(); 2410888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2420888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(mapOne, "one", 1, "two", 2); 2430888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4); 2440888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2450888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2460888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutNullKeyFailsAtomically() { 2470888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 2480888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 2490888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(null, 1); 2500888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 2510888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) {} 2520888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put("foo", 2); 2530888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(builder.build(), "foo", 2); 2540888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2550888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2560888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutImmutableEntryWithNullKeyFailsAtomically() { 2570888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 2580888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 2590888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(Maps.immutableEntry((String) null, 1)); 2600888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 2610888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) {} 2620888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put("foo", 2); 2630888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(builder.build(), "foo", 2); 2640888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2650888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2660888a09821a98ac0680fad765217302858e70fa4Paul Duffin // for GWT compatibility 2670888a09821a98ac0680fad765217302858e70fa4Paul Duffin static class SimpleEntry<K, V> extends AbstractMapEntry<K, V> { 2680888a09821a98ac0680fad765217302858e70fa4Paul Duffin public K key; 2690888a09821a98ac0680fad765217302858e70fa4Paul Duffin public V value; 2700888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2710888a09821a98ac0680fad765217302858e70fa4Paul Duffin SimpleEntry(K key, V value) { 2720888a09821a98ac0680fad765217302858e70fa4Paul Duffin this.key = key; 2730888a09821a98ac0680fad765217302858e70fa4Paul Duffin this.value = value; 2740888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2750888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2760888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override 2770888a09821a98ac0680fad765217302858e70fa4Paul Duffin public K getKey() { 2780888a09821a98ac0680fad765217302858e70fa4Paul Duffin return key; 2790888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2800888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2810888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override 2820888a09821a98ac0680fad765217302858e70fa4Paul Duffin public V getValue() { 2830888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value; 2840888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2850888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2860888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2870888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutMutableEntryWithNullKeyFailsAtomically() { 2880888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 2890888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 2900888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(new SimpleEntry<String, Integer>(null, 1)); 2910888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 2920888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) {} 2930888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put("foo", 2); 2940888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(builder.build(), "foo", 2); 2950888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 2960888a09821a98ac0680fad765217302858e70fa4Paul Duffin 2970888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutNullKey() { 2980888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 2990888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3000888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put(null, 1); 3010888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3020888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3030888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3040888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3050888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3060888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutNullValue() { 3070888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 3080888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3090888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.put("one", null); 3100888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3110888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3120888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3130888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3140888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3150888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutNullKeyViaPutAll() { 3160888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 3170888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3180888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.putAll(Collections.<String, Integer>singletonMap(null, 1)); 3190888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3200888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3210888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3220888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3230888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3240888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testBuilderPutNullValueViaPutAll() { 3250888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>(); 3260888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3270888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.putAll(Collections.<String, Integer>singletonMap("one", null)); 3280888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3290888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3300888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3310888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3320888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3330888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testPuttingTheSameKeyTwiceThrowsOnBuild() { 3340888a09821a98ac0680fad765217302858e70fa4Paul Duffin Builder<String, Integer> builder = new Builder<String, Integer>() 3350888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("one", 1) 3360888a09821a98ac0680fad765217302858e70fa4Paul Duffin .put("one", 1); // throwing on this line would be even better 3370888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3380888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3390888a09821a98ac0680fad765217302858e70fa4Paul Duffin builder.build(); 3400888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3410888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) { 3420888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3430888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3440888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3450888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testOf() { 3460888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals( 3470888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1), 3480888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1); 3490888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals( 3500888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "two", 2), 3510888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2); 3520888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals( 3530888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "two", 2, "three", 3), 3540888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2, "three", 3); 3550888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals( 3560888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4), 3570888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2, "three", 3, "four", 4); 3580888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals( 3590888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 3600888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 3610888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3620888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testOfNullKey() { 3640888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3650888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of(null, 1); 3660888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3670888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3680888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3690888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3700888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3710888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, null, 2); 3720888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3730888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3740888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3750888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3760888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3770888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testOfNullValue() { 3780888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3790888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", null); 3800888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3810888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3820888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3830888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3840888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3850888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "two", null); 3860888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3870888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (NullPointerException expected) { 3880888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3890888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3900888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3910888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testOfWithDuplicateKey() { 3920888a09821a98ac0680fad765217302858e70fa4Paul Duffin try { 3930888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap.of("one", 1, "one", 1); 3940888a09821a98ac0680fad765217302858e70fa4Paul Duffin fail(); 3950888a09821a98ac0680fad765217302858e70fa4Paul Duffin } catch (IllegalArgumentException expected) { 3960888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3970888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 3980888a09821a98ac0680fad765217302858e70fa4Paul Duffin 3990888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCopyOfEmptyMap() { 4000888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> copy 4010888a09821a98ac0680fad765217302858e70fa4Paul Duffin = ImmutableMap.copyOf(Collections.<String, Integer>emptyMap()); 4020888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(Collections.<String, Integer>emptyMap(), copy); 4030888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(copy, ImmutableMap.copyOf(copy)); 4040888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4050888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4060888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCopyOfSingletonMap() { 4070888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> copy 4080888a09821a98ac0680fad765217302858e70fa4Paul Duffin = ImmutableMap.copyOf(Collections.singletonMap("one", 1)); 4090888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(copy, "one", 1); 4100888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(copy, ImmutableMap.copyOf(copy)); 4110888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4120888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4130888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCopyOf() { 4140888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<String, Integer> original = new LinkedHashMap<String, Integer>(); 4150888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.put("one", 1); 4160888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.put("two", 2); 4170888a09821a98ac0680fad765217302858e70fa4Paul Duffin original.put("three", 3); 4180888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4190888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> copy = ImmutableMap.copyOf(original); 4200888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertMapEquals(copy, "one", 1, "two", 2, "three", 3); 4210888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(copy, ImmutableMap.copyOf(copy)); 4220888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4230888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4240888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4250888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testNullGet() { 4260888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = ImmutableMap.of("one", 1); 4270888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertNull(map.get(null)); 4280888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4290888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4300888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testAsMultimap() { 4310888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = ImmutableMap.of( 4320888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "won", 1, "two", 2, "too", 2, "three", 3); 4330888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableSetMultimap<String, Integer> expected = ImmutableSetMultimap.of( 4340888a09821a98ac0680fad765217302858e70fa4Paul Duffin "one", 1, "won", 1, "two", 2, "too", 2, "three", 3); 4350888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, map.asMultimap()); 4360888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4370888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4380888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testAsMultimapWhenEmpty() { 4390888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = ImmutableMap.of(); 4400888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableSetMultimap<String, Integer> expected = ImmutableSetMultimap.of(); 4410888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(expected, map.asMultimap()); 4420888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4430888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4440888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testAsMultimapCaches() { 4450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableMap<String, Integer> map = ImmutableMap.of("one", 1); 4460888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableSetMultimap<String, Integer> multimap1 = map.asMultimap(); 4470888a09821a98ac0680fad765217302858e70fa4Paul Duffin ImmutableSetMultimap<String, Integer> multimap2 = map.asMultimap(); 4480888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(1, multimap1.asMap().size()); 4490888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertSame(multimap1, multimap2); 4500888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4510888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4520888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static <K, V> void assertMapEquals(Map<K, V> map, 4530888a09821a98ac0680fad765217302858e70fa4Paul Duffin Object... alternatingKeysAndValues) { 4540888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(map.size(), alternatingKeysAndValues.length / 2); 4550888a09821a98ac0680fad765217302858e70fa4Paul Duffin int i = 0; 4560888a09821a98ac0680fad765217302858e70fa4Paul Duffin for (Entry<K, V> entry : map.entrySet()) { 4570888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 4580888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 4590888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4600888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4610888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4620888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static class IntHolder implements Serializable { 4630888a09821a98ac0680fad765217302858e70fa4Paul Duffin public int value; 4640888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4650888a09821a98ac0680fad765217302858e70fa4Paul Duffin public IntHolder(int value) { 4660888a09821a98ac0680fad765217302858e70fa4Paul Duffin this.value = value; 4670888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4680888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4690888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override public boolean equals(Object o) { 4700888a09821a98ac0680fad765217302858e70fa4Paul Duffin return (o instanceof IntHolder) && ((IntHolder) o).value == value; 4710888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4720888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4730888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override public int hashCode() { 4740888a09821a98ac0680fad765217302858e70fa4Paul Duffin return value; 4750888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4760888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4770888a09821a98ac0680fad765217302858e70fa4Paul Duffin private static final long serialVersionUID = 5; 4780888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4790888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4800888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testMutableValues() { 4810888a09821a98ac0680fad765217302858e70fa4Paul Duffin IntHolder holderA = new IntHolder(1); 4820888a09821a98ac0680fad765217302858e70fa4Paul Duffin IntHolder holderB = new IntHolder(2); 4830888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<String, IntHolder> map = ImmutableMap.of("a", holderA, "b", holderB); 4840888a09821a98ac0680fad765217302858e70fa4Paul Duffin holderA.value = 3; 4850888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(map.entrySet().contains( 4860888a09821a98ac0680fad765217302858e70fa4Paul Duffin Maps.immutableEntry("a", new IntHolder(3)))); 4870888a09821a98ac0680fad765217302858e70fa4Paul Duffin Map<String, Integer> intMap = ImmutableMap.of("a", 3, "b", 2); 4880888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(intMap.hashCode(), map.entrySet().hashCode()); 4890888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertEquals(intMap.hashCode(), map.hashCode()); 4900888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4910888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4920888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testCopyOfEnumMap() { 4930888a09821a98ac0680fad765217302858e70fa4Paul Duffin EnumMap<AnEnum, String> map = new EnumMap<AnEnum, String>(AnEnum.class); 4940888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.put(AnEnum.B, "foo"); 4950888a09821a98ac0680fad765217302858e70fa4Paul Duffin map.put(AnEnum.C, "bar"); 4960888a09821a98ac0680fad765217302858e70fa4Paul Duffin assertTrue(ImmutableMap.copyOf(map) instanceof ImmutableEnumMap); 4970888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 4980888a09821a98ac0680fad765217302858e70fa4Paul Duffin 4990888a09821a98ac0680fad765217302858e70fa4Paul Duffin public void testEquals() { 5000888a09821a98ac0680fad765217302858e70fa4Paul Duffin new EqualsTester() 5010888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(), ImmutableList.of()) 5020888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1), ImmutableList.of(1)) 5030888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2), ImmutableList.of(1, 2)) 5040888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3)) 5050888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4)) 5060888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5)) 5070888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6)) 5080888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7)) 5090888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8)) 5100888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9)) 5110888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) 5120888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)) 5130888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) 5140888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(100, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) 5150888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 200, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) 5160888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 300, 4, 5, 6, 7, 8, 9, 10, 11, 12)) 5170888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 400, 5, 6, 7, 8, 9, 10, 11, 12)) 5180888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 500, 6, 7, 8, 9, 10, 11, 12)) 5190888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 600, 7, 8, 9, 10, 11, 12)) 5200888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 700, 8, 9, 10, 11, 12)) 5210888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 800, 9, 10, 11, 12)) 5220888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 900, 10, 11, 12)) 5230888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 1000, 11, 12)) 5240888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1100, 12)) 5250888a09821a98ac0680fad765217302858e70fa4Paul Duffin .addEqualityGroup(ImmutableList.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1200)) 5260888a09821a98ac0680fad765217302858e70fa4Paul Duffin .testEquals(); 5270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 5280888a09821a98ac0680fad765217302858e70fa4Paul Duffin } 5290888a09821a98ac0680fad765217302858e70fa4Paul Duffin} 5300888a09821a98ac0680fad765217302858e70fa4Paul Duffin 531