11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2007 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 com.google.common.collect.testing.MapTestSuiteBuilder; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SafeTreeMap; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.TestStringMapGenerator; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.MapFeature; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.List; 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map; 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map.Entry; 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set; 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.SortedMap; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code ForwardingSortedMap}. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Robert Konigsberg 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class ForwardingSortedMapTest extends ForwardingMapTest { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static class StandardImplForwardingSortedMap<K, V> 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert extends ForwardingSortedMap<K, V> { 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final SortedMap<K, V> backingMap; 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert StandardImplForwardingSortedMap(SortedMap<K, V> backingMap) { 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert this.backingMap = backingMap; 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<K, V> delegate() { 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return backingMap; 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean containsKey(Object key) { 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardContainsKey(key); 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean containsValue(Object value) { 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardContainsValue(value); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void putAll(Map<? extends K, ? extends V> map) { 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert standardPutAll(map); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public V remove(Object object) { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardRemove(object); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean equals(Object object) { 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardEquals(object); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public int hashCode() { 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardHashCode(); 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Set<K> keySet() { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardKeySet(); 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Collection<V> values() { 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardValues(); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public String toString() { 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardToString(); 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Set<Entry<K, V>> entrySet() { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardEntrySet() { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public Iterator<Entry<K, V>> iterator() { 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return backingMap.entrySet().iterator(); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void clear() { 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert standardClear(); 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public boolean isEmpty() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardIsEmpty(); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public SortedMap<K, V> subMap(K fromKey, K toKey) { 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return standardSubMap(fromKey, toKey); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public static Test suite() { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TestSuite suite = new TestSuite(); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTestSuite(ForwardingSortedMapTest.class); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() { 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, String> create( 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, String>[] entries) { 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, String> map = new SafeTreeMap<String, String>(); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(entry.getKey(), entry.getValue()); 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardImplForwardingSortedMap<String, String>(map); 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterable<Entry<String, String>> order( 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, String>> insertionOrder) { 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sort(insertionOrder); 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("ForwardingSortedMap[SafeTreeMap] with no comparator and standard " 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "implementations").withFeatures(CollectionSize.ANY, 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES, 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapFeature.GENERAL_PURPOSE).createTestSuite()); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private final Comparator<String> comparator = 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Ordering.natural().nullsFirst(); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, String> create( 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, String>[] entries) { 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, String> map = 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new SafeTreeMap<String, String>(comparator); 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(entry.getKey(), entry.getValue()); 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardImplForwardingSortedMap<String, String>(map); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterable<Entry<String, String>> order( 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, String>> insertionOrder) { 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sort(insertionOrder); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("ForwardingSortedMap[SafeTreeMap] with natural comparator and " 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "standard implementations").withFeatures(CollectionSize.ANY, 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES, 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapFeature.ALLOWS_NULL_KEYS, MapFeature.GENERAL_PURPOSE) 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert suite.addTest(MapTestSuiteBuilder.using(new TestStringMapGenerator() { 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected Map<String, String> create( 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, String>[] entries) { 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.Builder<String, String> builder = 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.naturalOrder(); 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry.getKey(), entry.getValue()); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardImplForwardingSortedMap<String, String>( 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build()); 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public Iterable<Entry<String, String>> order( 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, String>> insertionOrder) { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sort(insertionOrder); 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("ForwardingSortedMap[ImmutableSortedMap] with standard " 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "implementations").withFeatures( 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, MapFeature.REJECTS_DUPLICATES_AT_CREATION, 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert MapFeature.ALLOWS_NULL_QUERIES) 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static Iterable<Entry<String, String>> sort( 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert List<Entry<String, String>> entries) { 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, String> map = 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new SafeTreeMap<String, String>(Ordering.natural().nullsFirst()); 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(entry.getKey(), entry.getValue()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return map.entrySet(); 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Class parameters must be raw, so we can't create a proxy with generic 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * type arguments. The created proxy only records calls and returns null, so 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * the type is irrelevant at runtime. 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final SortedMap<String, Boolean> sortedMap = 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createProxyInstance(SortedMap.class); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward = new ForwardingSortedMap<String, Boolean>() { 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Boolean> delegate() { 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sortedMap; 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComparator() { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().comparator(); 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[comparator]", getCalls()); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFirstKey() { 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().firstKey(); 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[firstKey]", getCalls()); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadMap_K() { 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().headMap("asdf"); 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[headMap(Object)]", getCalls()); 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLastKey() { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().lastKey(); 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[lastKey]", getCalls()); 2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMap_K_K() { 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().subMap("first", "last"); 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[subMap(Object,Object)]", getCalls()); 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailMap_K() { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().tailMap("last"); 2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[tailMap(Object)]", getCalls()); 2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override SortedMap<String, Boolean> forward() { 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (SortedMap<String, Boolean>) super.forward(); 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 245