11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors 31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License. 61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static org.truth0.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.ImmutableSortedMap.Builder; 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.ListTestSuiteBuilder; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SortedMapInterfaceTest; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 297dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapEntryListGenerator; 307dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapKeyListGenerator; 317dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.google.SortedMapGenerators.ImmutableSortedMapValueListGenerator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.io.Serializable; 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collections; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.LinkedHashMap; 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedMap; 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@link ImmutableSortedMap}. 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Kevin Bourrillion 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jesse Wilson 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Jared Levy 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ImmutableSortedMapTest extends TestCase { 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: Avoid duplicating code in ImmutableMapTest 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("suite") 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ImmutableSortedMapTest.class); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 637dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListTestSuiteBuilder.using( 647dd252788645e940eada959bdde927426e2531c9Paul Duffin new ImmutableSortedMapEntryListGenerator()) 657dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableSortedMap.entrySet.asList") 667dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 677dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.ALLOWS_NULL_QUERIES) 70dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin .createTestSuite()); 71dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin 727dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListTestSuiteBuilder.using( 737dd252788645e940eada959bdde927426e2531c9Paul Duffin new ImmutableSortedMapKeyListGenerator()) 747dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableSortedMap.keySet.asList") 757dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 767dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 77dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 78dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin CollectionFeature.ALLOWS_NULL_QUERIES) 79dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin .createTestSuite()); 80dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin 817dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(ListTestSuiteBuilder.using( 827dd252788645e940eada959bdde927426e2531c9Paul Duffin new ImmutableSortedMapValueListGenerator()) 837dd252788645e940eada959bdde927426e2531c9Paul Duffin .named("ImmutableSortedMap.values.asList") 847dd252788645e940eada959bdde927426e2531c9Paul Duffin .withFeatures(CollectionSize.ANY, 857dd252788645e940eada959bdde927426e2531c9Paul Duffin CollectionFeature.SERIALIZABLE, 86dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin CollectionFeature.REJECTS_DUPLICATES_AT_CREATION, 87dbd967a6e5c96cc1a97c5521f88dc1564ba2f81bPaul Duffin CollectionFeature.ALLOWS_NULL_QUERIES) 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public abstract static class AbstractMapTests<K, V> 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends SortedMapInterfaceTest<K, V> { 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public AbstractMapTests() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super(false, false, false, false, false); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<K, V> makeEmptyMap() { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert throw new UnsupportedOperationException(); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final Joiner joiner = Joiner.on(", "); 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected void assertMoreInvariants(Map<K, V> map) { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // TODO: can these be moved to MapInterfaceTest? 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(entry.getKey() + "=" + entry.getValue(), 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert entry.toString()); 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("{" + joiner.join(map.entrySet()) + "}", 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.toString()); 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.entrySet()) + "]", 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.entrySet().toString()); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.keySet()) + "]", 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.keySet().toString()); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[" + joiner.join(map.values()) + "]", 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.values().toString()); 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(map.entrySet()), map.entrySet()); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Sets.newHashSet(map.keySet()), map.keySet()); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class MapTests extends AbstractMapTests<String, Integer> { 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makeEmptyMap() { 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of(); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class SingletonMapTests 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<String, Integer> { 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("one", 1); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class ReserializedMapTests 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends AbstractMapTests<String, Integer> { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return SerializableTester.reserialize( 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3)); 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "minus one"; 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return -1; 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HeadMapTests extends AbstractMapTests<String, Integer> { 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5) 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .headMap("d"); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "d"; 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class HeadMapInclusiveTests extends AbstractMapTests<String, Integer> { 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5) 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .headMap("c", true); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "d"; 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2057dd252788645e940eada959bdde927426e2531c9Paul Duffin 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TailMapTests extends AbstractMapTests<String, Integer> { 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5) 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .tailMap("b"); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "a"; 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class TailExclusiveMapTests extends AbstractMapTests<String, Integer> { 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5) 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .tailMap("a", false); 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "a"; 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class SubMapTests extends AbstractMapTests<String, Integer> { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Integer> makePopulatedMap() { 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return ImmutableSortedMap.of("a", 1, "b", 2, "c", 3, "d", 4, "e", 5) 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .subMap("b", "d"); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected String getKeyNotInPopulatedMap() { 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return "a"; 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Integer getValueNotInPopulatedMap() { 2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 4; 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static class CreationTests extends TestCase { 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testEmptyBuilder() { 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder().build(); 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSingletonBuilder() { 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 2601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder() 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, "one", 1); 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder() { 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder() 2691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 2741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "five", 5, "four", 4, "one", 1, "three", 3, "two", 2); 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntry() { 2801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map = 2811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.<String, Integer>naturalOrder() 2821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put(Maps.immutableEntry("one", 1)) 2831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 2841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, "one", 1); 2851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withImmutableEntryAndNullContents() { 2881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = 2891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.naturalOrder(); 2901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry("one", (Integer) null)); 2921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 2941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(Maps.immutableEntry((String) null, 1)); 2971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 2981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 2991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class StringHolder { 3031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String string; 3041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilder_withMutableEntry() { 3071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.Builder<String, Integer> builder = 3081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.naturalOrder(); 3091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final StringHolder holder = new StringHolder(); 3101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "one"; 3111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, Integer> entry = new AbstractMapEntry<String, Integer>() { 3121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String getKey() { 3131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return holder.string; 3141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Integer getValue() { 3161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return 1; 3171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 3191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry); 3211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holder.string = "two"; 3221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(builder.build(), "one", 1); 3231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAllWithEmptyMap() { 3261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 3271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder() 3281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(Collections.<String, Integer>emptyMap()) 3291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), map); 3311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutAll() { 3341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> toPut = new LinkedHashMap<String, Integer>(); 3351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("one", 1); 3361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("two", 2); 3371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert toPut.put("three", 3); 3381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> moreToPut = new LinkedHashMap<String, Integer>(); 3391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("four", 4); 3401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert moreToPut.put("five", 5); 3411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 3431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder() 3441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(toPut) 3451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .putAll(moreToPut) 3461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 3481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "five", 5, "four", 4, "one", 1, "three", 3, "two", 2); 3491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderReuse() { 3521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 3531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> mapOne = builder 3541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 3551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 3561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> mapTwo = builder 3581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 3591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 3601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 3611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapOne, "one", 1, "two", 2); 3631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(mapTwo, "four", 4, "one", 1, "three", 3, "two", 2); 3641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKey() { 3671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 3681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(null, 1); 3701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValue() { 3761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 3771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put("one", null); 3791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullKeyViaPutAll() { 3851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 3861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap(null, 1)); 3881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 3921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 3931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderPutNullValueViaPutAll() { 3941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder = ImmutableSortedMap.naturalOrder(); 3951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 3961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.putAll(Collections.<String, Integer>singletonMap("one", null)); 3971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 3981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 3991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testPuttingTheSameKeyTwiceThrowsOnBuild() { 4031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Builder<String, Integer> builder 4041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>naturalOrder() 4051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 4061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 2); // throwing on this line would be even better 4071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build(); 4101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOf() { 4161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1), 4181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1); 4191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2), 4211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2); 4221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3), 4241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "three", 3, "two", 2); 4251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3, "four", 4), 4271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "four", 4, "one", 1, "three", 3, "two", 2); 4281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals( 4291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of( 4301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "one", 1, "two", 2, "three", 3, "four", 4, "five", 5), 4311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "five", 5, "four", 4, "one", 1, "three", 3, "two", 2); 4321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullKey() { 4351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Integer n = null; 4361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of(n, 1); 4381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, null, 2); 4441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfNullValue() { 4501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", null); 4521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", null); 4581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NullPointerException expected) { 4601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testOfWithDuplicateKey() { 4641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 4651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "one", 1); 4661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 4671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 4681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfEmptyMap() { 4721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 4731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOf(Collections.<String, Integer>emptyMap()); 4741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Collections.<String, Integer>emptyMap(), copy); 4751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOf(copy)); 4761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copy.comparator()); 4771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSingletonMap() { 4801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 4811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOf(Collections.singletonMap("one", 1)); 4821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1); 4831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOf(copy)); 4841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copy.comparator()); 4851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOf() { 4881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> original = new LinkedHashMap<String, Integer>(); 4891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 4901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 4911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 4921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 4931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 4941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOf(original); 4951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1, "three", 3, "two", 2); 4961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOf(copy)); 4971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copy.comparator()); 4981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 4991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfExplicitComparator() { 5011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = Ordering.natural().reverse(); 5021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> original = new LinkedHashMap<String, Integer>(); 5031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 5041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 5051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 5061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 5081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOf(original, comparator); 5091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "two", 2, "three", 3, "one", 1); 5101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator)); 5111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(comparator, copy.comparator()); 5121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfImmutableSortedSetDifferentComparator() { 5151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = Ordering.natural().reverse(); 5161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> original 5171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); 5181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 5191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOf(original, comparator); 5201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "two", 2, "three", 3, "one", 1); 5211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOf(copy, comparator)); 5221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(comparator, copy.comparator()); 5231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSortedNatural() { 5261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, Integer> original = Maps.newTreeMap(); 5271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 5281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 5291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 5301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 5321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOfSorted(original); 5331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "one", 1, "three", 3, "two", 2); 5341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOfSorted(copy)); 5351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(Ordering.natural(), copy.comparator()); 5361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfSortedExplicit() { 5391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = Ordering.natural().reverse(); 5400888a09821a98ac0680fad765217302858e70fa4Paul Duffin SortedMap<String, Integer> original = Maps.newTreeMap(comparator); 5411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("one", 1); 5421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("two", 2); 5431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert original.put("three", 3); 5441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> copy 5461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.copyOfSorted(original); 5471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(copy, "two", 2, "three", 3, "one", 1); 5481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(copy, ImmutableSortedMap.copyOfSorted(copy)); 5491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(comparator, copy.comparator()); 5501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class IntegerDiv10 implements Comparable<IntegerDiv10> { 5531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final int value; 5541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntegerDiv10(int value) { 5561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.value = value; 5571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 5601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int compareTo(IntegerDiv10 o) { 5611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value / 10 - o.value / 10; 5621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String toString() { 5651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return Integer.toString(value); 5661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCopyOfDuplicateKey() { 5701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<IntegerDiv10, String> original = ImmutableMap.of( 5711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IntegerDiv10(3), "three", 5721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IntegerDiv10(20), "twenty", 5731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IntegerDiv10(11), "eleven", 5741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IntegerDiv10(35), "thirty five", 5751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new IntegerDiv10(12), "twelve" 5761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ); 5771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 5791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.copyOf(original); 5801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected IllegalArgumentException"); 5811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (IllegalArgumentException expected) { 5821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testImmutableMapCopyOfImmutableSortedMap() { 5861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntegerDiv10 three = new IntegerDiv10(3); 5871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntegerDiv10 eleven = new IntegerDiv10(11); 5881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntegerDiv10 twelve = new IntegerDiv10(12); 5891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntegerDiv10 twenty = new IntegerDiv10(20); 5901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<IntegerDiv10, String> original = ImmutableSortedMap.of( 5911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert three, "three", eleven, "eleven", twenty, "twenty"); 5921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<IntegerDiv10, String> copy = ImmutableMap.copyOf(original); 5931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(original.containsKey(twelve)); 5941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertFalse(copy.containsKey(twelve)); 5951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 5961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 5971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderReverseOrder() { 5981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 5991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.<String, Integer>reverseOrder() 6001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 6011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 6021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 6031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 6041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 6051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 6061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 6071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "two", 2, "three", 3, "one", 1, "four", 4, "five", 5); 6081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Ordering.natural().reverse(), map.comparator()); 6091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testBuilderComparator() { 6121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Comparator<String> comparator = Ordering.natural().reverse(); 6131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map 6141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = new ImmutableSortedMap.Builder<String, Integer>(comparator) 6151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("one", 1) 6161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("two", 2) 6171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("three", 3) 6181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("four", 4) 6191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .put("five", 5) 6201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .build(); 6211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertMapEquals(map, 6221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "two", 2, "three", 3, "one", 1, "four", 4, "five", 5); 6231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertSame(comparator, map.comparator()); 6241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNullGet() { 6281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap<String, Integer> map = ImmutableSortedMap.of("one", 1); 6291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertNull(map.get(null)); 6301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 6337dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNullPointers() { 6341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 6351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(ImmutableSortedMap.class); 6361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods( 6371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.<String, Integer>naturalOrder()); 6381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(ImmutableSortedMap.of()); 6391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods(ImmutableSortedMap.of("one", 1)); 6401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicInstanceMethods( 6411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3)); 6421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static <K, V> void assertMapEquals(Map<K, V> map, 6451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Object... alternatingKeysAndValues) { 6461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(map.size(), alternatingKeysAndValues.length / 2); 6471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int i = 0; 6481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<K, V> entry : map.entrySet()) { 6491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getKey()); 6501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(alternatingKeysAndValues[i++], entry.getValue()); 6511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static class IntHolder implements Serializable { 6551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public int value; 6561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public IntHolder(int value) { 6581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.value = value; 6591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean equals(Object o) { 6621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (o instanceof IntHolder) && ((IntHolder) o).value == value; 6631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int hashCode() { 6661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value; 6671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final long serialVersionUID = 5; 6701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testMutableValues() { 6731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntHolder holderA = new IntHolder(1); 6741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert IntHolder holderB = new IntHolder(2); 6751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, IntHolder> map 6761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.of("a", holderA, "b", holderB); 6771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert holderA.value = 3; 6787dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(map.entrySet().contains(Maps.immutableEntry("a", new IntHolder(3)))); 6791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> intMap 6801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.of("a", 3, "b", 2); 6811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(intMap.hashCode(), map.entrySet().hashCode()); 6821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(intMap.hashCode(), map.hashCode()); 6831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("SerializableTester") 6861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testViewSerialization() { 6871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map 6881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); 6891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(map.entrySet()); 6901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SerializableTester.reserializeAndAssert(map.keySet()); 6911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(Lists.newArrayList(map.values()), 6921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Lists.newArrayList(SerializableTester.reserialize(map.values()))); 6931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 6941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 6951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 6961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadMapInclusive() { 6971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 6981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", true); 6990888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly( 7007dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("one", 1), 7017dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("three", 3)).inOrder(); 7021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadMapExclusive() { 7061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", false); 7080888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("one", 1)).inOrder(); 7091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailMapInclusive() { 7131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", true); 7150888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("three", 3), 7167dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("two", 2)).inOrder(); 7171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailMapExclusive() { 7211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", false); 7230888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("two", 2)).inOrder(); 7241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMapExclusiveExclusive() { 7281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", false); 7300888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("three", 3)).inOrder(); 7311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMapInclusiveExclusive() { 7351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", false); 7370888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("one", 1), 7387dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("three", 3)).inOrder(); 7391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMapExclusiveInclusive() { 7431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", true); 7450888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("three", 3), 7467dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("two", 2)).inOrder(); 7471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 7481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 7491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") // varargs 7501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMapInclusiveInclusive() { 7511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Map<String, Integer> map = 7521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", true); 7530888a09821a98ac0680fad765217302858e70fa4Paul Duffin ASSERT.that(map.entrySet()).has().exactly(Maps.immutableEntry("one", 1), 7547dd252788645e940eada959bdde927426e2531c9Paul Duffin Maps.immutableEntry("three", 3), Maps.immutableEntry("two", 2)).inOrder(); 7557dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7567dd252788645e940eada959bdde927426e2531c9Paul Duffin 7577dd252788645e940eada959bdde927426e2531c9Paul Duffin private static class SelfComparableExample implements Comparable<SelfComparableExample> { 7587dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 7597dd252788645e940eada959bdde927426e2531c9Paul Duffin public int compareTo(SelfComparableExample o) { 7607dd252788645e940eada959bdde927426e2531c9Paul Duffin return 0; 7617dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7627dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7637dd252788645e940eada959bdde927426e2531c9Paul Duffin 7647dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testBuilderGenerics_SelfComparable() { 7657dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<SelfComparableExample, Object> natural = 7667dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.naturalOrder(); 7677dd252788645e940eada959bdde927426e2531c9Paul Duffin 7687dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<SelfComparableExample, Object> reverse = 7697dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.reverseOrder(); 7707dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7717dd252788645e940eada959bdde927426e2531c9Paul Duffin 7727dd252788645e940eada959bdde927426e2531c9Paul Duffin private static class SuperComparableExample extends SelfComparableExample {} 7737dd252788645e940eada959bdde927426e2531c9Paul Duffin 7747dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testBuilderGenerics_SuperComparable() { 7757dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<SuperComparableExample, Object> natural = 7767dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.naturalOrder(); 7777dd252788645e940eada959bdde927426e2531c9Paul Duffin 7787dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.Builder<SuperComparableExample, Object> reverse = 7797dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSortedMap.reverseOrder(); 7807dd252788645e940eada959bdde927426e2531c9Paul Duffin } 7811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 782