aboutsummaryrefslogtreecommitdiffstats
path: root/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java')
-rw-r--r--guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java42
1 files changed, 28 insertions, 14 deletions
diff --git a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
index 8163bb5..3cee7ce 100644
--- a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
+++ b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java
@@ -34,9 +34,10 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;
@@ -76,7 +77,7 @@ public abstract class FeatureSpecificTestSuiteBuilder<
return self();
}
- public G getSubjectGenerator() {
+ protected G getSubjectGenerator() {
return subjectGenerator;
}
@@ -100,25 +101,22 @@ public abstract class FeatureSpecificTestSuiteBuilder<
// Features
- private Set<Feature<?>> features = new LinkedHashSet<Feature<?>>();
+ private Set<Feature<?>> features;
/**
* Configures this builder to produce tests appropriate for the given
- * features. This method may be called more than once to add features
- * in multiple groups.
+ * features.
*/
public B withFeatures(Feature<?>... features) {
return withFeatures(Arrays.asList(features));
}
public B withFeatures(Iterable<? extends Feature<?>> features) {
- for (Feature<?> feature : features) {
- this.features.add(feature);
- }
+ this.features = Helpers.copyToSet(features);
return self();
}
- public Set<Feature<?>> getFeatures() {
+ protected Set<Feature<?>> getFeatures() {
return Collections.unmodifiableSet(features);
}
@@ -136,7 +134,7 @@ public abstract class FeatureSpecificTestSuiteBuilder<
return self();
}
- public String getName() {
+ protected String getName() {
return name;
}
@@ -161,7 +159,7 @@ public abstract class FeatureSpecificTestSuiteBuilder<
return self();
}
- public Set<Method> getSuppressedTests() {
+ protected Set<Method> getSuppressedTests() {
return suppressedTests;
}
@@ -274,10 +272,10 @@ public abstract class FeatureSpecificTestSuiteBuilder<
private static Method extractMethod(Test test) {
if (test instanceof AbstractTester) {
AbstractTester<?> tester = (AbstractTester<?>) test;
- return Helpers.getMethod(tester.getClass(), tester.getTestMethodName());
+ return Platform.getMethod(tester.getClass(), tester.getTestMethodName());
} else if (test instanceof TestCase) {
TestCase testCase = (TestCase) test;
- return Helpers.getMethod(testCase.getClass(), testCase.getName());
+ return Platform.getMethod(testCase.getClass(), testCase.getName());
} else {
throw new IllegalArgumentException(
"unable to extract method from test: not a TestCase.");
@@ -286,7 +284,7 @@ public abstract class FeatureSpecificTestSuiteBuilder<
protected TestSuite makeSuiteForTesterClass(
Class<? extends AbstractTester<?>> testerClass) {
- final TestSuite candidateTests = new TestSuite(testerClass);
+ final TestSuite candidateTests = getTemplateSuite(testerClass);
final TestSuite suite = filterSuite(candidateTests);
Enumeration<?> allTests = suite.tests();
@@ -302,6 +300,22 @@ public abstract class FeatureSpecificTestSuiteBuilder<
return suite;
}
+ private static final Map<Class<? extends AbstractTester<?>>, TestSuite>
+ templateSuiteForClass =
+ new HashMap<Class<? extends AbstractTester<?>>, TestSuite>();
+
+ private static TestSuite getTemplateSuite(
+ Class<? extends AbstractTester<?>> testerClass) {
+ synchronized (templateSuiteForClass) {
+ TestSuite suite = templateSuiteForClass.get(testerClass);
+ if (suite == null) {
+ suite = new TestSuite(testerClass);
+ templateSuiteForClass.put(testerClass, suite);
+ }
+ return suite;
+ }
+ }
+
private TestSuite filterSuite(TestSuite suite) {
TestSuite filtered = new TestSuite(suite.getName());
final Enumeration<?> tests = suite.tests();