package org.pitest.mutationtest; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Properties; import org.junit.Before; import org.pitest.classpath.ClassPathRoot; import org.pitest.classpath.CodeSource; import org.pitest.classpath.PathFilter; import org.pitest.classpath.ProjectClassPaths; import org.pitest.coverage.CoverageGenerator; import org.pitest.coverage.execute.CoverageOptions; import org.pitest.coverage.execute.DefaultCoverageGenerator; import org.pitest.coverage.export.NullCoverageExporter; import org.pitest.functional.predicate.Predicate; import org.pitest.functional.predicate.True; import org.pitest.junit.JUnitCompatibleConfiguration; import org.pitest.mutationtest.config.PluginServices; import org.pitest.mutationtest.config.ReportOptions; import org.pitest.mutationtest.config.SettingsFactory; import org.pitest.mutationtest.engine.gregor.config.GregorEngineFactory; import org.pitest.mutationtest.incremental.NullHistoryStore; import org.pitest.mutationtest.tooling.JarCreatingJarFinder; import org.pitest.mutationtest.tooling.MutationCoverage; import org.pitest.mutationtest.tooling.MutationStrategies; import org.pitest.process.DefaultJavaExecutableLocator; import org.pitest.process.JavaAgent; import org.pitest.process.LaunchOptions; import org.pitest.testapi.Configuration; import org.pitest.testapi.TestGroupConfig; import org.pitest.util.Glob; import org.pitest.util.Timings; import org.pitest.util.Unchecked; public abstract class ReportTestBase { protected MetaDataExtractor metaDataExtractor; protected ReportOptions data; private PluginServices plugins; @Before public void setUp() { this.metaDataExtractor = new MetaDataExtractor(); this.plugins = PluginServices.makeForContextLoader(); this.data = new ReportOptions(); this.data.setSourceDirs(Collections.<File> emptyList()); } protected MutationResultListenerFactory listenerFactory() { return new MutationResultListenerFactory() { @Override public MutationResultListener getListener(Properties props, ListenerArguments args) { return ReportTestBase.this.metaDataExtractor; } @Override public String name() { return null; } @Override public String description() { return null; } }; } protected void verifyResults(final DetectionStatus... detectionStatus) { final List<DetectionStatus> expected = Arrays.asList(detectionStatus); final List<DetectionStatus> actual = this.metaDataExtractor .getDetectionStatus(); Collections.sort(expected); Collections.sort(actual); assertEquals(expected, actual); } protected Collection<Predicate<String>> predicateFor(final String... glob) { return Glob.toGlobPredicates(Arrays.asList(glob)); } protected Collection<Predicate<String>> predicateFor(final Class<?> clazz) { return predicateFor(clazz.getName()); } protected void createAndRun() { createAndRun(new JUnitCompatibleConfiguration(new TestGroupConfig(), Collections.<String>emptyList())); } protected void createAndRun(final Configuration configuration) { final JavaAgent agent = new JarCreatingJarFinder(); try { final CoverageOptions coverageOptions = createCoverageOptions(configuration); final LaunchOptions launchOptions = new LaunchOptions(agent, new DefaultJavaExecutableLocator(), this.data.getJvmArgs(), new HashMap<String, String>()); final PathFilter pf = new PathFilter(new True<ClassPathRoot>(), new True<ClassPathRoot>()); final ProjectClassPaths cps = new ProjectClassPaths( this.data.getClassPath(), this.data.createClassesFilter(), pf); final Timings timings = new Timings(); final CodeSource code = new CodeSource(cps, coverageOptions .getPitConfig().testClassIdentifier()); final CoverageGenerator coverageDatabase = new DefaultCoverageGenerator( null, coverageOptions, launchOptions, code, new NullCoverageExporter(), timings, false); final HistoryStore history = new NullHistoryStore(); final MutationStrategies strategies = new MutationStrategies( new GregorEngineFactory(), history, coverageDatabase, listenerFactory(), null); final MutationCoverage testee = new MutationCoverage(strategies, null, code, this.data, new SettingsFactory(this.data, this.plugins), timings); testee.runReport(); } catch (final IOException e) { throw Unchecked.translateCheckedException(e); } finally { agent.close(); } } private CoverageOptions createCoverageOptions(Configuration configuration) { return new CoverageOptions(this.data.getTargetClassesFilter(), configuration, this.data.isVerbose(), this.data.getDependencyAnalysisMaxDistance()); } protected void setMutators(final String mutator) { this.data.setMutators(Arrays.asList(mutator)); } }