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

Class Method, % Line, %
SortedMapTestSuiteBuilder 100% (8/8) 87.5% (28/32)
SortedMapTestSuiteBuilder$NoRecurse 100% (3/3) 100% (4/4)
Total 100% (11/11) 88.9% (32/36)


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; 18  19 import static com.google.common.collect.testing.features.CollectionFeature.KNOWN_ORDER; 20  21 import com.google.common.annotations.GwtIncompatible; 22 import com.google.common.collect.testing.DerivedCollectionGenerators.Bound; 23 import com.google.common.collect.testing.DerivedCollectionGenerators.SortedMapSubmapTestMapGenerator; 24 import com.google.common.collect.testing.features.Feature; 25 import com.google.common.collect.testing.testers.SortedMapNavigationTester; 26 import java.util.ArrayList; 27 import java.util.Collections; 28 import java.util.List; 29 import java.util.Map; 30 import java.util.Map.Entry; 31 import java.util.Set; 32 import junit.framework.TestSuite; 33  34 /** 35  * Creates, based on your criteria, a JUnit test suite that exhaustively tests a SortedMap 36  * implementation. 37  */ 38 @GwtIncompatible 39 public class SortedMapTestSuiteBuilder<K, V> extends MapTestSuiteBuilder<K, V> { 40  public static <K, V> SortedMapTestSuiteBuilder<K, V> using( 41  TestSortedMapGenerator<K, V> generator) { 42  SortedMapTestSuiteBuilder<K, V> result = new SortedMapTestSuiteBuilder<>(); 43  result.usingGenerator(generator); 44  return result; 45  } 46  47  @Override 48  protected List<Class<? extends AbstractTester>> getTesters() { 49  List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters()); 50  testers.add(SortedMapNavigationTester.class); 51  return testers; 52  } 53  54  @Override 55  public TestSuite createTestSuite() { 56  if (!getFeatures().contains(KNOWN_ORDER)) { 57  List<Feature<?>> features = Helpers.copyToList(getFeatures()); 58  features.add(KNOWN_ORDER); 59  withFeatures(features); 60  } 61  return super.createTestSuite(); 62  } 63  64  @Override 65  protected List<TestSuite> createDerivedSuites( 66  FeatureSpecificTestSuiteBuilder< 67  ?, ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> 68  parentBuilder) { 69  List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder); 70  71  if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMAP)) { 72  derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE)); 73  derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.NO_BOUND)); 74  derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.EXCLUSIVE)); 75  } 76  77  return derivedSuites; 78  } 79  80  @Override 81  protected SetTestSuiteBuilder<K> createDerivedKeySetSuite(TestSetGenerator<K> keySetGenerator) { 82  return keySetGenerator instanceof TestSortedSetGenerator 83  ? SortedSetTestSuiteBuilder.using((TestSortedSetGenerator<K>) keySetGenerator) 84  : SetTestSuiteBuilder.using(keySetGenerator); 85  } 86  87  /** 88  * To avoid infinite recursion, test suites with these marker features won't have derived suites 89  * created for them. 90  */ 91  enum NoRecurse implements Feature<Void> { 92  SUBMAP, 93  DESCENDING; 94  95  @Override 96  public Set<Feature<? super Void>> getImpliedFeatures() { 97  return Collections.emptySet(); 98  } 99  } 100  101  /** 102  * Creates a suite whose map has some elements filtered out of view. 103  * 104  * <p>Because the map may be ascending or descending, this test must derive the relative order of 105  * these extreme values rather than relying on their regular sort ordering. 106  */ 107  final TestSuite createSubmapSuite( 108  final FeatureSpecificTestSuiteBuilder< 109  ?, ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> 110  parentBuilder, 111  final Bound from, 112  final Bound to) { 113  final TestSortedMapGenerator<K, V> delegate = 114  (TestSortedMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator(); 115  116  List<Feature<?>> features = new ArrayList<>(); 117  features.add(NoRecurse.SUBMAP); 118  features.addAll(parentBuilder.getFeatures()); 119  120  return newBuilderUsing(delegate, to, from) 121  .named(parentBuilder.getName() + " subMap " + from + "-" + to) 122  .withFeatures(features) 123  .suppressing(parentBuilder.getSuppressedTests()) 124  .createTestSuite(); 125  } 126  127  /** Like using() but overrideable by NavigableMapTestSuiteBuilder. */ 128  SortedMapTestSuiteBuilder<K, V> newBuilderUsing( 129  TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) { 130  return using(new SortedMapSubmapTestMapGenerator<K, V>(delegate, to, from)); 131  } 132 }