Coverage Summary for Class: PerCollectionSizeTestSuiteBuilder (com.google.common.collect.testing)
| Class | Method, % | Line, % |
|---|---|---|
| PerCollectionSizeTestSuiteBuilder | 100% (4/4) | 97.6% (41/42) |
| PerCollectionSizeTestSuiteBuilder$OneSizeTestSuiteBuilder | 100% (2/2) | 100% (4/4) |
| Total | 100% (6/6) | 97.8% (45/46) |
1 /* 2 * Copyright (C) 2008 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 com.google.common.annotations.GwtIncompatible; 20 import com.google.common.collect.testing.features.CollectionSize; 21 import com.google.common.collect.testing.features.Feature; 22 import com.google.common.collect.testing.features.FeatureUtil; 23 import java.lang.reflect.Method; 24 import java.util.ArrayList; 25 import java.util.Arrays; 26 import java.util.List; 27 import java.util.Set; 28 import java.util.logging.Logger; 29 import junit.framework.TestSuite; 30 31 /** 32 * This builder creates a composite test suite, containing a separate test suite for each {@link 33 * CollectionSize} present in the features specified by {@link #withFeatures(Feature...)}. 34 * 35 * @param <B> The concrete type of this builder (the 'self-type'). All the Builder methods of this 36 * class (such as {@link #named(String)}) return this type, so that Builder methods of more 37 * derived classes can be chained onto them without casting. 38 * @param <G> The type of the generator to be passed to testers in the generated test suite. An 39 * instance of G should somehow provide an instance of the class under test, plus any other 40 * information required to parameterize the test. 41 * @see FeatureSpecificTestSuiteBuilder 42 * @author George van den Driessche 43 */ 44 @GwtIncompatible 45 public abstract class PerCollectionSizeTestSuiteBuilder< 46 B extends PerCollectionSizeTestSuiteBuilder<B, G, T, E>, 47 G extends TestContainerGenerator<T, E>, 48 T, 49 E> 50 extends FeatureSpecificTestSuiteBuilder<B, G> { 51 private static final Logger logger = 52 Logger.getLogger(PerCollectionSizeTestSuiteBuilder.class.getName()); 53 54 /** Creates a runnable JUnit test suite based on the criteria already given. */ 55 @Override 56 public TestSuite createTestSuite() { 57 checkCanCreate(); 58 59 String name = getName(); 60 // Copy this set, so we can modify it. 61 Set<Feature<?>> features = Helpers.copyToSet(getFeatures()); 62 List<Class<? extends AbstractTester>> testers = getTesters(); 63 64 logger.fine(" Testing: " + name); 65 66 // Split out all the specified sizes. 67 Set<Feature<?>> sizesToTest = Helpers.<Feature<?>>copyToSet(CollectionSize.values()); 68 sizesToTest.retainAll(features); 69 features.removeAll(sizesToTest); 70 71 FeatureUtil.addImpliedFeatures(sizesToTest); 72 sizesToTest.retainAll( 73 Arrays.asList(CollectionSize.ZERO, CollectionSize.ONE, CollectionSize.SEVERAL)); 74 75 logger.fine(" Sizes: " + formatFeatureSet(sizesToTest)); 76 77 if (sizesToTest.isEmpty()) { 78 throw new IllegalStateException( 79 name 80 + ": no CollectionSizes specified (check the argument to " 81 + "FeatureSpecificTestSuiteBuilder.withFeatures().)"); 82 } 83 84 TestSuite suite = new TestSuite(name); 85 for (Feature<?> collectionSize : sizesToTest) { 86 String oneSizeName = 87 Platform.format( 88 "%s [collection size: %s]", name, collectionSize.toString().toLowerCase()); 89 OneSizeGenerator<T, E> oneSizeGenerator = 90 new OneSizeGenerator<>(getSubjectGenerator(), (CollectionSize) collectionSize); 91 Set<Feature<?>> oneSizeFeatures = Helpers.copyToSet(features); 92 oneSizeFeatures.add(collectionSize); 93 Set<Method> oneSizeSuppressedTests = getSuppressedTests(); 94 95 OneSizeTestSuiteBuilder<T, E> oneSizeBuilder = 96 new OneSizeTestSuiteBuilder<T, E>(testers) 97 .named(oneSizeName) 98 .usingGenerator(oneSizeGenerator) 99 .withFeatures(oneSizeFeatures) 100 .withSetUp(getSetUp()) 101 .withTearDown(getTearDown()) 102 .suppressing(oneSizeSuppressedTests); 103 TestSuite oneSizeSuite = oneSizeBuilder.createTestSuite(); 104 suite.addTest(oneSizeSuite); 105 106 for (TestSuite derivedSuite : createDerivedSuites(oneSizeBuilder)) { 107 oneSizeSuite.addTest(derivedSuite); 108 } 109 } 110 return suite; 111 } 112 113 protected List<TestSuite> createDerivedSuites( 114 FeatureSpecificTestSuiteBuilder<?, ? extends OneSizeTestContainerGenerator<T, E>> 115 parentBuilder) { 116 return new ArrayList<>(); 117 } 118 119 /** Builds a test suite for one particular {@link CollectionSize}. */ 120 private static final class OneSizeTestSuiteBuilder<T, E> 121 extends FeatureSpecificTestSuiteBuilder< 122 OneSizeTestSuiteBuilder<T, E>, OneSizeGenerator<T, E>> { 123 private final List<Class<? extends AbstractTester>> testers; 124 125 public OneSizeTestSuiteBuilder(List<Class<? extends AbstractTester>> testers) { 126 this.testers = testers; 127 } 128 129 @Override 130 protected List<Class<? extends AbstractTester>> getTesters() { 131 return testers; 132 } 133 } 134 }