11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2008 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.testing.SerializableTester.reserialize; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.base.Joiner; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableMap.Builder; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.CollectionTestSuiteBuilder; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ListTestSuiteBuilder; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MapInterfaceTest; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MinimalSet; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ReserializingTestCollectionGenerator; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ReserializingTestSetGenerator; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements.Colliders; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SampleElements.Unhashables; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SetTestSuiteBuilder; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.UnhashableObject; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MapGenerators.ImmutableMapEntrySetGenerator; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MapGenerators.ImmutableMapKeySetGenerator; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MapGenerators.ImmutableMapUnhashableValuesGenerator; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MapGenerators.ImmutableMapValueListGenerator; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.MapGenerators.ImmutableMapValuesGenerator; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedHashMap; 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableMap}. 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jesse Wilson 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableMapTest extends TestCase { 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ImmutableMapTest.class); 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new ImmutableMapKeySetGenerator()) 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.keySet") 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new ImmutableMapEntrySetGenerator()) 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.entrySet") 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapValuesGenerator()) 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.values") 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestSetGenerator.newInstance( 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapKeySetGenerator())) 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.keySet, reserialized") 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestSetGenerator.newInstance( 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapKeySetGenerator())) 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.entrySet, reserialized") 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestCollectionGenerator.newInstance( 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapValuesGenerator())) 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.values, reserialized") 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(CollectionTestSuiteBuilder.using( 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapUnhashableValuesGenerator()) 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.values, unhashable") 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(ListTestSuiteBuilder.using( 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMapValueListGenerator()) 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableMap.values.asList") 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public abstract static class AbstractMapTests<K, V> 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<K, V> { 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public AbstractMapTests() { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<K, V> makeEmptyMap() { 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Joiner joiner = Joiner.on(", "); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void assertMoreInvariants(Map<K, V> map) { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: can these be moved to MapInterfaceTest? 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(entry.getKey() + "=" + entry.getValue(), 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.toString()); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{" + joiner.join(map.entrySet()) + "}", 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.toString()); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.entrySet()) + "]", 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entrySet().toString()); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.keySet()) + "]", 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.keySet().toString()); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.values()) + "]", 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.values().toString()); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(MinimalSet.from(map.entrySet()), map.entrySet()); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(map.keySet()), map.keySet()); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTests extends AbstractMapTests<String, Integer> { 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of(); 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of("one", 1, "two", 2, "three", 3); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class SingletonMapTests 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<String, Integer> { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of("one", 1); 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ReserializedMapTests 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<String, Integer> { 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return SerializableTester.reserialize( 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3)); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTestsWithBadHashes 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<Object, Integer> { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Object, Integer> makeEmptyMap() { 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Object, Integer> makePopulatedMap() { 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Colliders colliders = new Colliders(); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of( 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert colliders.e0, 0, 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert colliders.e1, 1, 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert colliders.e2, 2, 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert colliders.e3, 3); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Object getKeyNotInPopulatedMap() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Colliders().e4; 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("GWT's ImmutableMap emulation is backed by java.util.HashMap.") 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTestsWithUnhashableValues 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<Integer, UnhashableObject> { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Integer, UnhashableObject> makeEmptyMap() { 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of(); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Integer, UnhashableObject> makePopulatedMap() { 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Unhashables unhashables = new Unhashables(); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of( 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 0, unhashables.e0, 1, unhashables.e1, 2, unhashables.e2); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getKeyNotInPopulatedMap() { 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 3; 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected UnhashableObject getValueNotInPopulatedMap() { 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new Unhashables().e3; 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("GWT's ImmutableMap emulation is backed by java.util.HashMap.") 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTestsWithSingletonUnhashableValue 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapTestsWithUnhashableValues { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<Integer, UnhashableObject> makePopulatedMap() { 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Unhashables unhashables = new Unhashables(); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableMap.of(0, unhashables.e0); 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class CreationTests extends TestCase { 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyBuilder() { 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Builder<String, Integer>().build(); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonBuilder() { 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = new Builder<String, Integer>() 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, "one", 1); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder() { 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = new Builder<String, Integer>() 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntry() { 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = new Builder<String, Integer>() 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put(Maps.immutableEntry("one", 1)) 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, "one", 1); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntryAndNullContents() { 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry("one", (Integer) null)); 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry((String) null, 1)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class StringHolder { 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string; 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withMutableEntry() { 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.Builder<String, Integer> builder = 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new Builder<String, Integer>(); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final StringHolder holder = new StringHolder(); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "one"; 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() { 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String getKey() { 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return holder.string; 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer getValue() { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "two"; 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(builder.build(), "one", 1); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllWithEmptyMap() { 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = new Builder<String, Integer>() 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(Collections.<String, Integer>emptyMap()) 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAll() { 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> toPut = new LinkedHashMap<String, Integer>(); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("one", 1); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("two", 2); 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("three", 3); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>(); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("four", 4); 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("five", 5); 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = new Builder<String, Integer>() 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(toPut) 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(moreToPut) 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderReuse() { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> mapOne = builder 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> mapTwo = builder 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapOne, "one", 1, "two", 2); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKey() { 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValue() { 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("one", null); 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKeyViaPutAll() { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap(null, 1)); 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValueViaPutAll() { 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap("one", null)); 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPuttingTheSameKeyTwiceThrowsOnBuild() { 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>() 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1); // throwing on this line would be even better 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("duplicate key: one", expected.getMessage()); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf() { 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1), 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2), 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2); 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3), 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4), 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullKey() { 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of(null, 1); 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, null, 2); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullValue() { 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", null); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", null); 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfWithDuplicateKey() { 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "one", 1); 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("duplicate key: one", expected.getMessage()); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfEmptyMap() { 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> copy 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableMap.copyOf(Collections.<String, Integer>emptyMap()); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), copy); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableMap.copyOf(copy)); 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSingletonMap() { 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> copy 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableMap.copyOf(Collections.singletonMap("one", 1)); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableMap.copyOf(copy)); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> original = new LinkedHashMap<String, Integer>(); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> copy = ImmutableMap.copyOf(original); 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1, "two", 2, "three", 3); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableMap.copyOf(copy)); 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullGet() { 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map = ImmutableMap.of("one", 1); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(map.get(null)); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullPointers() throws Exception { 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(ImmutableMap.class); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods( 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMap.Builder<Object, Object>()); 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(ImmutableMap.of()); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(ImmutableMap.of("one", 1)); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods( 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3)); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <K, V> void assertMapEquals(Map<K, V> map, 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... alternatingKeysAndValues) { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(map.size(), alternatingKeysAndValues.length / 2); 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class IntHolder implements Serializable { 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int value; 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public IntHolder(int value) { 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.value = value; 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean equals(Object o) { 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (o instanceof IntHolder) && ((IntHolder) o).value == value; 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int hashCode() { 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value; 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 5; 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMutableValues() { 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntHolder holderA = new IntHolder(1); 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntHolder holderB = new IntHolder(2); 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, IntHolder> map = ImmutableMap.of("a", holderA, "b", holderB); 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holderA.value = 3; 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(map.entrySet().contains( 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Maps.immutableEntry("a", new IntHolder(3)))); 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> intMap = ImmutableMap.of("a", 3, "b", 2); 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(intMap.hashCode(), map.entrySet().hashCode()); 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(intMap.hashCode(), map.hashCode()); 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testViewSerialization() { 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = ImmutableMap.of("one", 1, "two", 2, "three", 3); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LenientSerializableTester.reserializeAndAssertLenient(map.entrySet()); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert LenientSerializableTester.reserializeAndAssertLenient(map.keySet()); 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Collection<Integer> reserializedValues = reserialize(map.values()); 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Lists.newArrayList(map.values()), 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList(reserializedValues)); 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(reserializedValues instanceof ImmutableCollection); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 589