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

Class Method, % Line, %
SortedMapNavigationTester 100% (15/15) 92.6% (75/81)
SortedMapNavigationTester$1 100% (2/2) 100% (2/2)
Total 100% (17/17) 92.8% (77/83)


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.Helpers.assertEqualInOrder; 20 import static com.google.common.collect.testing.features.CollectionSize.ONE; 21 import static com.google.common.collect.testing.features.CollectionSize.SEVERAL; 22 import static com.google.common.collect.testing.features.CollectionSize.ZERO; 23  24 import com.google.common.annotations.GwtCompatible; 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 java.util.Collections; 29 import java.util.Comparator; 30 import java.util.Iterator; 31 import java.util.List; 32 import java.util.Map.Entry; 33 import java.util.NoSuchElementException; 34 import java.util.SortedMap; 35 import org.junit.Ignore; 36  37 /** 38  * A generic JUnit test which tests operations on a SortedMap. Can't be invoked directly; please see 39  * {@code SortedMapTestSuiteBuilder}. 40  * 41  * @author Jesse Wilson 42  * @author Louis Wasserman 43  */ 44 @GwtCompatible 45 @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. 46 public class SortedMapNavigationTester<K, V> extends AbstractMapTester<K, V> { 47  48  private SortedMap<K, V> navigableMap; 49  private Entry<K, V> a; 50  private Entry<K, V> c; 51  52  @Override 53  public void setUp() throws Exception { 54  super.setUp(); 55  navigableMap = (SortedMap<K, V>) getMap(); 56  List<Entry<K, V>> entries = 57  Helpers.copyToList( 58  getSubjectGenerator() 59  .getSampleElements(getSubjectGenerator().getCollectionSize().getNumElements())); 60  Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); 61  62  // some tests assume SEVERAL == 3 63  if (entries.size() >= 1) { 64  a = entries.get(0); 65  if (entries.size() >= 3) { 66  c = entries.get(2); 67  } 68  } 69  } 70  71  @CollectionSize.Require(ZERO) 72  public void testEmptyMapFirst() { 73  try { 74  navigableMap.firstKey(); 75  fail(); 76  } catch (NoSuchElementException e) { 77  } 78  } 79  80  @CollectionSize.Require(ZERO) 81  public void testEmptyMapLast() { 82  try { 83  assertNull(navigableMap.lastKey()); 84  fail(); 85  } catch (NoSuchElementException e) { 86  } 87  } 88  89  @CollectionSize.Require(ONE) 90  public void testSingletonMapFirst() { 91  assertEquals(a.getKey(), navigableMap.firstKey()); 92  } 93  94  @CollectionSize.Require(ONE) 95  public void testSingletonMapLast() { 96  assertEquals(a.getKey(), navigableMap.lastKey()); 97  } 98  99  @CollectionSize.Require(SEVERAL) 100  public void testFirst() { 101  assertEquals(a.getKey(), navigableMap.firstKey()); 102  } 103  104  @CollectionSize.Require(SEVERAL) 105  public void testLast() { 106  assertEquals(c.getKey(), navigableMap.lastKey()); 107  } 108  109  @CollectionSize.Require(absent = ZERO) 110  public void testHeadMapExclusive() { 111  assertFalse(navigableMap.headMap(a.getKey()).containsKey(a.getKey())); 112  } 113  114  @CollectionSize.Require(absent = ZERO) 115  public void testTailMapInclusive() { 116  assertTrue(navigableMap.tailMap(a.getKey()).containsKey(a.getKey())); 117  } 118  119  public void testHeadMap() { 120  List<Entry<K, V>> entries = 121  Helpers.copyToList( 122  getSubjectGenerator() 123  .getSampleElements(getSubjectGenerator().getCollectionSize().getNumElements())); 124  Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); 125  for (int i = 0; i < entries.size(); i++) { 126  assertEqualInOrder( 127  entries.subList(0, i), navigableMap.headMap(entries.get(i).getKey()).entrySet()); 128  } 129  } 130  131  public void testTailMap() { 132  List<Entry<K, V>> entries = 133  Helpers.copyToList( 134  getSubjectGenerator() 135  .getSampleElements(getSubjectGenerator().getCollectionSize().getNumElements())); 136  Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); 137  for (int i = 0; i < entries.size(); i++) { 138  assertEqualInOrder( 139  entries.subList(i, entries.size()), 140  navigableMap.tailMap(entries.get(i).getKey()).entrySet()); 141  } 142  } 143  144  public void testSubMap() { 145  List<Entry<K, V>> entries = 146  Helpers.copyToList( 147  getSubjectGenerator() 148  .getSampleElements(getSubjectGenerator().getCollectionSize().getNumElements())); 149  Collections.sort(entries, Helpers.<K, V>entryComparator(navigableMap.comparator())); 150  for (int i = 0; i < entries.size(); i++) { 151  for (int j = i + 1; j < entries.size(); j++) { 152  assertEqualInOrder( 153  entries.subList(i, j), 154  navigableMap.subMap(entries.get(i).getKey(), entries.get(j).getKey()).entrySet()); 155  } 156  } 157  } 158  159  @CollectionSize.Require(SEVERAL) 160  public void testSubMapIllegal() { 161  try { 162  navigableMap.subMap(c.getKey(), a.getKey()); 163  fail("Expected IllegalArgumentException"); 164  } catch (IllegalArgumentException expected) { 165  } 166  } 167  168  @CollectionSize.Require(absent = ZERO) 169  public void testOrderedByComparator() { 170  @SuppressWarnings("unchecked") 171  Comparator<? super K> comparator = navigableMap.comparator(); 172  if (comparator == null) { 173  comparator = 174  new Comparator<K>() { 175  @SuppressWarnings("unchecked") 176  @Override 177  public int compare(K o1, K o2) { 178  return ((Comparable) o1).compareTo(o2); 179  } 180  }; 181  } 182  Iterator<Entry<K, V>> entryItr = navigableMap.entrySet().iterator(); 183  Entry<K, V> prevEntry = entryItr.next(); 184  while (entryItr.hasNext()) { 185  Entry<K, V> nextEntry = entryItr.next(); 186  assertTrue(comparator.compare(prevEntry.getKey(), nextEntry.getKey()) < 0); 187  prevEntry = nextEntry; 188  } 189  } 190 }