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 org.junit.contrib.truth.Truth.ASSERT; 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.ImmutableBiMap.Builder; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.MapInterfaceTest; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.ReserializingTestSetGenerator; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SetTestSuiteBuilder; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapEntrySetGenerator; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseEntrySetGenerator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseKeySetGenerator; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapInverseValuesGenerator; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapKeySetGenerator; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.google.BiMapGenerators.ImmutableBiMapValuesGenerator; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedHashMap; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableBiMap}. 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableBiMapTest extends TestCase { 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Reduce duplication of ImmutableMapTest code 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(MapTests.class); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(InverseMapTests.class); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(CreationTests.class); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(BiMapSpecificTests.class); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new ImmutableBiMapKeySetGenerator()) 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.keySet") 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapEntrySetGenerator()) 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.entrySet") 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using(new ImmutableBiMapValuesGenerator()) 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.values") 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapInverseKeySetGenerator()) 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.inverse.keys") 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapInverseEntrySetGenerator()) 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.inverse.entrySet") 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapInverseValuesGenerator()) 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.inverse.values") 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestSetGenerator.newInstance( 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapKeySetGenerator())) 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.keySet, reserialized") 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestSetGenerator.newInstance( 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapEntrySetGenerator())) 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER, 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.entrySet, reserialized") 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(SetTestSuiteBuilder.using( 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ReserializingTestSetGenerator.newInstance( 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableBiMapValuesGenerator())) 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .withFeatures( 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .named("ImmutableBiMap.values, reserialized") 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static abstract class AbstractMapTests<K, V> 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends MapInterfaceTest<K, V> { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public AbstractMapTests() { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<K, V> makeEmptyMap() { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Joiner joiner = Joiner.on(", "); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void assertMoreInvariants(Map<K, V> map) { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BiMap<K, V> bimap = (BiMap<K, V>) map; 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(entry.getKey() + "=" + entry.getValue(), 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.toString()); 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(entry.getKey(), bimap.inverse().get(entry.getValue())); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{" + joiner.join(map.entrySet()) + "}", 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.toString()); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.entrySet()) + "]", 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entrySet().toString()); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.keySet()) + "]", 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.keySet().toString()); 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.values()) + "]", 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.values().toString()); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet()); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(map.keySet()), map.keySet()); 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTests extends AbstractMapTests<String, Integer> { 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableBiMap.of(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableBiMap.of("one", 1, "two", 2, "three", 3); 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class InverseMapTests 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<String, Integer> { 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makeEmptyMap() { 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableBiMap.of(); 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, Integer> makePopulatedMap() { 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableBiMap.of(1, "one", 2, "two", 3, "three").inverse(); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class CreationTests extends TestCase { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyBuilder() { 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> map 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new Builder<String, Integer>().build(); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<Integer, String>emptyMap(), map.inverse()); 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(ImmutableBiMap.of(), map); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonBuilder() { 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> map = new Builder<String, Integer>() 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, "one", 1); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map.inverse(), 1, "one"); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder() { 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> map 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableBiMap.<String, Integer>builder() 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map.inverse(), 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four", 5, "five"); 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllWithEmptyMap() { 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> map = new Builder<String, Integer>() 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(Collections.<String, Integer>emptyMap()) 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAll() { 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> toPut = new LinkedHashMap<String, Integer>(); 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("one", 1); 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("two", 2); 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("three", 3); 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>(); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("four", 4); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("five", 5); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> map = new Builder<String, Integer>() 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(toPut) 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(moreToPut) 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map.inverse(), 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four", 5, "five"); 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderReuse() { 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> mapOne = builder 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> mapTwo = builder 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapOne, "one", 1, "two", 2); 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapOne.inverse(), 1, "one", 2, "two"); 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapTwo, "one", 1, "two", 2, "three", 3, "four", 4); 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapTwo.inverse(), 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four"); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKey() { 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1); 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValue() { 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("one", null); 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKeyViaPutAll() { 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap(null, 1)); 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValueViaPutAll() { 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>(); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap("one", null)); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPuttingTheSameKeyTwiceThrowsOnBuild() { 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = new Builder<String, Integer>() 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1); // throwing on this line would be even better 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("duplicate key: one", expected.getMessage()); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf() { 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1), 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1); 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1).inverse(), 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one"); 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", 2), 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2); 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", 2).inverse(), 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two"); 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", 2, "three", 3), 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", 2, "three", 3).inverse(), 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three"); 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", 2, "three", 3, "four", 4), 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of( 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4).inverse(), 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four"); 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of( 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of( 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5).inverse(), 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four", 5, "five"); 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullKey() { 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of(null, 1); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, null, 2); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullValue() { 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", null); 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "two", null); 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfWithDuplicateKey() { 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.of("one", 1, "one", 1); 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("duplicate key: one", expected.getMessage()); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfEmptyMap() { 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> copy 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableBiMap.copyOf(Collections.<String, Integer>emptyMap()); 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), copy); 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableBiMap.copyOf(copy)); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(ImmutableBiMap.of(), copy); 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSingletonMap() { 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> copy 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableBiMap.copyOf(Collections.singletonMap("one", 1)); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1); 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableBiMap.copyOf(copy)); 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> original = new LinkedHashMap<String, Integer>(); 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> copy = ImmutableBiMap.copyOf(original); 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1, "two", 2, "three", 3); 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableBiMap.copyOf(copy)); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmpty() { 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of(); 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), bimap); 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), bimap.inverse()); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFromHashMap() { 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> hashMap = Maps.newLinkedHashMap(); 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashMap.put("one", 1); 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert hashMap.put("two", 2); 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2)); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(bimap, "one", 1, "two", 2); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(bimap.inverse(), 1, "one", 2, "two"); 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFromImmutableMap() { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new ImmutableMap.Builder<String, Integer>() 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build()); 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(bimap, 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(bimap.inverse(), 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1, "one", 2, "two", 3, "three", 4, "four", 5, "five"); 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDuplicateValues() { 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap<String, Integer> map 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new ImmutableMap.Builder<String, Integer>() 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("uno", 1) 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("dos", 2) 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap.copyOf(map); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("duplicate key: 1", expected.getMessage()); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class BiMapSpecificTests extends TestCase { 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testForcePut() { 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2)); 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert bimap.forcePut("three", 3); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (UnsupportedOperationException expected) {} 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testKeySet() { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4)); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<String> keys = bimap.keySet(); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet("one", "two", "three", "four"), keys); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(keys).hasContentsInOrder("one", "two", "three", "four"); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testValues() { 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2, "three", 3, "four", 4)); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Set<Integer> values = bimap.values(); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(1, 2, 3, 4), values); 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ASSERT.that(values).hasContentsInOrder(1, 2, 3, 4); 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDoubleInverse() { 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2)); 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(bimap, bimap.inverse().inverse()); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptySerialization() { 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.of(); 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(bimap, SerializableTester.reserializeAndAssert(bimap)); 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of("one", 1, "two", 2)); 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> copy = 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(bimap); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), copy.get("one")); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", copy.inverse().get(1)); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, copy.inverse().inverse()); 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 5401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testInverseSerialization() { 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> bimap = ImmutableBiMap.copyOf( 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableMap.of(1, "one", 2, "two")).inverse(); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableBiMap<String, Integer> copy = 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(bimap); 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Integer.valueOf(1), copy.get("one")); 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("one", copy.inverse().get(1)); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, copy.inverse().inverse()); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <K, V> void assertMapEquals(Map<K, V> map, 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... alternatingKeysAndValues) { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 560