/*
* Copyright 2011 Henry Coles
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and limitations under the License.
*/
package org.pitest.mutationtest.build;
import java.util.Collection;
import java.util.List;
import java.util.logging.Logger;
import org.pitest.classinfo.ClassByteArraySource;
import org.pitest.classinfo.ClassName;
import org.pitest.coverage.TestInfo;
import org.pitest.mutationtest.MutationConfig;
import org.pitest.mutationtest.engine.Mutater;
import org.pitest.mutationtest.engine.MutationDetails;
import org.pitest.mutationtest.filter.MutationFilter;
import org.pitest.util.Log;
public class MutationSource {
private static final Logger LOG = Log.getLogger();
private final MutationConfig mutationConfig;
private final TestPrioritiser testPrioritiser;
private final MutationFilter filter;
private final ClassByteArraySource source;
public MutationSource(final MutationConfig mutationConfig,
final MutationFilter filter, final TestPrioritiser testPrioritiser,
final ClassByteArraySource source) {
this.mutationConfig = mutationConfig;
this.testPrioritiser = testPrioritiser;
this.filter = filter;
this.source = source;
}
public Collection<MutationDetails> createMutations(final ClassName clazz) {
final Mutater m = this.mutationConfig.createMutator(this.source);
final Collection<MutationDetails> availableMutations = this.filter.filter(m
.findMutations(clazz));
assignTestsToMutations(availableMutations);
return availableMutations;
}
private void assignTestsToMutations(
final Collection<MutationDetails> availableMutations) {
for (final MutationDetails mutation : availableMutations) {
final List<TestInfo> testDetails = this.testPrioritiser
.assignTests(mutation);
if (testDetails.isEmpty()) {
LOG.fine("According to coverage no tests hit the mutation " + mutation);
}
mutation.addTestsInOrder(testDetails);
}
}
}