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 }