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 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.Helpers.NullsBeforeTwo; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.SafeTreeMap; 217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.SortedMapTestSuiteBuilder; 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.collect.testing.TestStringSortedMapGenerator; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionFeature; 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.CollectionSize; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.testing.features.MapFeature; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.Test; 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestSuite; 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection; 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Comparator; 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Iterator; 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); 1187dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() { 1197dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected SortedMap<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 }).named("ForwardingSortedMap[SafeTreeMap] with no comparator and standard " 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "implementations").withFeatures(CollectionSize.ANY, 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES, 1300888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.GENERAL_PURPOSE, CollectionFeature.SUPPORTS_ITERATOR_REMOVE) 1310888a09821a98ac0680fad765217302858e70fa4Paul Duffin .createTestSuite()); 1323ecfa412eddc4b084663f38d562537b86b9734d5Paul Duffin suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() { 1337dd252788645e940eada959bdde927426e2531c9Paul Duffin private final Comparator<String> comparator = NullsBeforeTwo.INSTANCE; 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1357dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected SortedMap<String, String> create( 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, String>[] entries) { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert SortedMap<String, String> map = 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert new SafeTreeMap<String, String>(comparator); 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert map.put(entry.getKey(), entry.getValue()); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardImplForwardingSortedMap<String, String>(map); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("ForwardingSortedMap[SafeTreeMap] with natural comparator and " 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "standard implementations").withFeatures(CollectionSize.ANY, 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionFeature.KNOWN_ORDER, MapFeature.ALLOWS_NULL_VALUES, 1470888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_ANY_NULL_QUERIES, 1480888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.GENERAL_PURPOSE, 1490888a09821a98ac0680fad765217302858e70fa4Paul Duffin CollectionFeature.SUPPORTS_ITERATOR_REMOVE).createTestSuite()); 1507dd252788645e940eada959bdde927426e2531c9Paul Duffin suite.addTest(SortedMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() { 1517dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override protected SortedMap<String, String> create( 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Entry<String, String>[] entries) { 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.Builder<String, String> builder = 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSortedMap.naturalOrder(); 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (Entry<String, String> entry : entries) { 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.put(entry.getKey(), entry.getValue()); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return new StandardImplForwardingSortedMap<String, String>( 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert builder.build()); 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }).named("ForwardingSortedMap[ImmutableSortedMap] with standard " 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + "implementations").withFeatures( 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert CollectionSize.ANY, MapFeature.REJECTS_DUPLICATES_AT_CREATION, 1640888a09821a98ac0680fad765217302858e70fa4Paul Duffin MapFeature.ALLOWS_ANY_NULL_QUERIES) 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .createTestSuite()); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return suite; 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override public void setUp() throws Exception { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert super.setUp(); 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert /* 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Class parameters must be raw, so we can't create a proxy with generic 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * type arguments. The created proxy only records calls and returns null, so 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * the type is irrelevant at runtime. 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @SuppressWarnings("unchecked") 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert final SortedMap<String, Boolean> sortedMap = 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert createProxyInstance(SortedMap.class); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward = new ForwardingSortedMap<String, Boolean>() { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override protected SortedMap<String, Boolean> delegate() { 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return sortedMap; 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert }; 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testComparator() { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().comparator(); 1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[comparator]", getCalls()); 1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFirstKey() { 1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().firstKey(); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[firstKey]", getCalls()); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testHeadMap_K() { 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().headMap("asdf"); 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[headMap(Object)]", getCalls()); 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testLastKey() { 2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().lastKey(); 2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[lastKey]", getCalls()); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSubMap_K_K() { 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().subMap("first", "last"); 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[subMap(Object,Object)]", getCalls()); 2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testTailMap_K() { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert forward().tailMap("last"); 2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals("[tailMap(Object)]", getCalls()); 2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @Override SortedMap<String, Boolean> forward() { 2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return (SortedMap<String, Boolean>) super.forward(); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 221