diff options
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.java | 42 |
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(); |