Coverage Summary for Class: NavigableMapNavigationTester (com.google.common.collect.testing.testers)

Class Class, % Method, % Line, %
NavigableMapNavigationTester 100% (1/1) 92.9% (26/28) 91.6% (109/119)


1 /* 2  * Copyright (C) 2010 The Guava Authors 3  * 4  * Licensed under the Apache License, Version 2.0 (the "License"); 5  * you may not use this file except in compliance with the License. 6  * You may obtain a copy of the License at 7  * 8  * http://www.apache.org/licenses/LICENSE-2.0 9  * 10  * Unless required by applicable law or agreed to in writing, software 11  * distributed under the License is distributed on an "AS IS" BASIS, 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13  * See the License for the specific language governing permissions and 14  * limitations under the License. 15  */ 16  17 package com.google.common.collect.testing.testers; 18  19 import static com.google.common.collect.testing.features.CollectionSize.ONE; 20 import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 21 import static com.google.common.collect.testing.features.CollectionSize.ZERO; 22 import static com.google.common.collect.testing.features.MapFeature.SUPPORTS_REMOVE; 23  24 import com.google.common.annotations.GwtIncompatible; 25 import com.google.common.collect.testing.AbstractMapTester; 26 import com.google.common.collect.testing.Helpers; 27 import com.google.common.collect.testing.features.CollectionSize; 28 import com.google.common.collect.testing.features.MapFeature; 29 import java.util.ArrayList; 30 import java.util.Collections; 31 import java.util.List; 32 import java.util.Map.Entry; 33 import java.util.NavigableMap; 34 import org.junit.Ignore; 35  36 /** 37  * A generic JUnit test which tests operations on a NavigableMap. Can't be invoked directly; please 38  * see {@code NavigableMapTestSuiteBuilder}. 39  * 40  * @author Jesse Wilson 41  * @author Louis Wasserman 42  */ 43 @GwtIncompatible 44 @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 45 public class NavigableMapNavigationTester<K, V> extends AbstractMapTester<K, V> { 46  47  private NavigableMap<K, V> navigableMap; 48  private List<Entry<K, V>> entries; 49  private Entry<K, V> a; 50  private Entry<K, V> b; 51  private Entry<K, V> c; 52  53  @Override 54  public void setUp() throws Exception { 55  super.setUp(); 56  navigableMap = (NavigableMap<K, V>) getMap(); 57  entries = 58  Helpers.copyToList( 59  getSubjectGenerator() 60  .getSampleElements(getSubjectGenerator().getCollectionSize().getNumElements())); 61  Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); 62  63  // some tests assume SEVERAL == 3 64  if (entries.size() >= 1) { 65  a = entries.get(0); 66  if (entries.size() >= 3) { 67  b = entries.get(1); 68  c = entries.get(2); 69  } 70  } 71  } 72  73  /** Resets the contents of navigableMap to have entries a, c, for the navigation tests. */ 74  @SuppressWarnings("unchecked") // Needed to stop Eclipse whining 75  private void resetWithHole() { 76  Entry<K, V>[] entries = new Entry[] {a, c}; 77  super.resetMap(entries); 78  navigableMap = (NavigableMap<K, V>) getMap(); 79  } 80  81  @CollectionSize.Require(ZERO) 82  public void testEmptyMapFirst() { 83  assertNull(navigableMap.firstEntry()); 84  } 85  86  @MapFeature.Require(SUPPORTS_REMOVE) 87  @CollectionSize.Require(ZERO) 88  public void testEmptyMapPollFirst() { 89  assertNull(navigableMap.pollFirstEntry()); 90  } 91  92  @CollectionSize.Require(ZERO) 93  public void testEmptyMapNearby() { 94  assertNull(navigableMap.lowerEntry(k0())); 95  assertNull(navigableMap.lowerKey(k0())); 96  assertNull(navigableMap.floorEntry(k0())); 97  assertNull(navigableMap.floorKey(k0())); 98  assertNull(navigableMap.ceilingEntry(k0())); 99  assertNull(navigableMap.ceilingKey(k0())); 100  assertNull(navigableMap.higherEntry(k0())); 101  assertNull(navigableMap.higherKey(k0())); 102  } 103  104  @CollectionSize.Require(ZERO) 105  public void testEmptyMapLast() { 106  assertNull(navigableMap.lastEntry()); 107  } 108  109  @MapFeature.Require(SUPPORTS_REMOVE) 110  @CollectionSize.Require(ZERO) 111  public void testEmptyMapPollLast() { 112  assertNull(navigableMap.pollLastEntry()); 113  } 114  115  @CollectionSize.Require(ONE) 116  public void testSingletonMapFirst() { 117  assertEquals(a, navigableMap.firstEntry()); 118  } 119  120  @MapFeature.Require(SUPPORTS_REMOVE) 121  @CollectionSize.Require(ONE) 122  public void testSingletonMapPollFirst() { 123  assertEquals(a, navigableMap.pollFirstEntry()); 124  assertTrue(navigableMap.isEmpty()); 125  } 126  127  @CollectionSize.Require(ONE) 128  public void testSingletonMapNearby() { 129  assertNull(navigableMap.lowerEntry(k0())); 130  assertNull(navigableMap.lowerKey(k0())); 131  assertEquals(a, navigableMap.floorEntry(k0())); 132  assertEquals(a.getKey(), navigableMap.floorKey(k0())); 133  assertEquals(a, navigableMap.ceilingEntry(k0())); 134  assertEquals(a.getKey(), navigableMap.ceilingKey(k0())); 135  assertNull(navigableMap.higherEntry(k0())); 136  assertNull(navigableMap.higherKey(k0())); 137  } 138  139  @CollectionSize.Require(ONE) 140  public void testSingletonMapLast() { 141  assertEquals(a, navigableMap.lastEntry()); 142  } 143  144  @MapFeature.Require(SUPPORTS_REMOVE) 145  @CollectionSize.Require(ONE) 146  public void testSingletonMapPollLast() { 147  assertEquals(a, navigableMap.pollLastEntry()); 148  assertTrue(navigableMap.isEmpty()); 149  } 150  151  @CollectionSize.Require(SEVERAL) 152  public void testFirst() { 153  assertEquals(a, navigableMap.firstEntry()); 154  } 155  156  @MapFeature.Require(SUPPORTS_REMOVE) 157  @CollectionSize.Require(SEVERAL) 158  public void testPollFirst() { 159  assertEquals(a, navigableMap.pollFirstEntry()); 160  assertEquals(entries.subList(1, entries.size()), Helpers.copyToList(navigableMap.entrySet())); 161  } 162  163  @MapFeature.Require(absent = SUPPORTS_REMOVE) 164  public void testPollFirstUnsupported() { 165  try { 166  navigableMap.pollFirstEntry(); 167  fail(); 168  } catch (UnsupportedOperationException e) { 169  } 170  } 171  172  @CollectionSize.Require(SEVERAL) 173  public void testLower() { 174  resetWithHole(); 175  assertEquals(null, navigableMap.lowerEntry(a.getKey())); 176  assertEquals(null, navigableMap.lowerKey(a.getKey())); 177  assertEquals(a, navigableMap.lowerEntry(b.getKey())); 178  assertEquals(a.getKey(), navigableMap.lowerKey(b.getKey())); 179  assertEquals(a, navigableMap.lowerEntry(c.getKey())); 180  assertEquals(a.getKey(), navigableMap.lowerKey(c.getKey())); 181  } 182  183  @CollectionSize.Require(SEVERAL) 184  public void testFloor() { 185  resetWithHole(); 186  assertEquals(a, navigableMap.floorEntry(a.getKey())); 187  assertEquals(a.getKey(), navigableMap.floorKey(a.getKey())); 188  assertEquals(a, navigableMap.floorEntry(b.getKey())); 189  assertEquals(a.getKey(), navigableMap.floorKey(b.getKey())); 190  assertEquals(c, navigableMap.floorEntry(c.getKey())); 191  assertEquals(c.getKey(), navigableMap.floorKey(c.getKey())); 192  } 193  194  @CollectionSize.Require(SEVERAL) 195  public void testCeiling() { 196  resetWithHole(); 197  assertEquals(a, navigableMap.ceilingEntry(a.getKey())); 198  assertEquals(a.getKey(), navigableMap.ceilingKey(a.getKey())); 199  assertEquals(c, navigableMap.ceilingEntry(b.getKey())); 200  assertEquals(c.getKey(), navigableMap.ceilingKey(b.getKey())); 201  assertEquals(c, navigableMap.ceilingEntry(c.getKey())); 202  assertEquals(c.getKey(), navigableMap.ceilingKey(c.getKey())); 203  } 204  205  @CollectionSize.Require(SEVERAL) 206  public void testHigher() { 207  resetWithHole(); 208  assertEquals(c, navigableMap.higherEntry(a.getKey())); 209  assertEquals(c.getKey(), navigableMap.higherKey(a.getKey())); 210  assertEquals(c, navigableMap.higherEntry(b.getKey())); 211  assertEquals(c.getKey(), navigableMap.higherKey(b.getKey())); 212  assertEquals(null, navigableMap.higherEntry(c.getKey())); 213  assertEquals(null, navigableMap.higherKey(c.getKey())); 214  } 215  216  @CollectionSize.Require(SEVERAL) 217  public void testLast() { 218  assertEquals(c, navigableMap.lastEntry()); 219  } 220  221  @MapFeature.Require(SUPPORTS_REMOVE) 222  @CollectionSize.Require(SEVERAL) 223  public void testPollLast() { 224  assertEquals(c, navigableMap.pollLastEntry()); 225  assertEquals( 226  entries.subList(0, entries.size() - 1), Helpers.copyToList(navigableMap.entrySet())); 227  } 228  229  @MapFeature.Require(absent = SUPPORTS_REMOVE) 230  @CollectionSize.Require(SEVERAL) 231  public void testPollLastUnsupported() { 232  try { 233  navigableMap.pollLastEntry(); 234  fail(); 235  } catch (UnsupportedOperationException e) { 236  } 237  } 238  239  @CollectionSize.Require(SEVERAL) 240  public void testDescendingNavigation() { 241  List<Entry<K, V>> descending = new ArrayList<>(navigableMap.descendingMap().entrySet()); 242  Collections.reverse(descending); 243  assertEquals(entries, descending); 244  } 245  246  @CollectionSize.Require(absent = ZERO) 247  public void testHeadMapExclusive() { 248  assertFalse(navigableMap.headMap(a.getKey(), false).containsKey(a.getKey())); 249  } 250  251  @CollectionSize.Require(absent = ZERO) 252  public void testHeadMapInclusive() { 253  assertTrue(navigableMap.headMap(a.getKey(), true).containsKey(a.getKey())); 254  } 255  256  @CollectionSize.Require(absent = ZERO) 257  public void testTailMapExclusive() { 258  assertFalse(navigableMap.tailMap(a.getKey(), false).containsKey(a.getKey())); 259  } 260  261  @CollectionSize.Require(absent = ZERO) 262  public void testTailMapInclusive() { 263  assertTrue(navigableMap.tailMap(a.getKey(), true).containsKey(a.getKey())); 264  } 265 }