package org.pitest.mutationtest.build;
import static org.assertj.core.api.Assertions.assertThat;
import static org.pitest.mutationtest.LocationMother.aMutationId;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.pitest.classinfo.ClassName;
import org.pitest.mutationtest.DetectionStatus;
import org.pitest.mutationtest.MutationConfig;
import org.pitest.mutationtest.MutationMetaData;
import org.pitest.mutationtest.MutationResult;
import org.pitest.mutationtest.MutationStatusTestPair;
import org.pitest.mutationtest.TimeoutLengthStrategy;
import org.pitest.mutationtest.engine.MutationDetails;
import org.pitest.mutationtest.engine.MutationDetailsMother;
import org.pitest.mutationtest.engine.MutationEngine;
import org.pitest.process.JavaAgent;
import org.pitest.process.LaunchOptions;
import org.pitest.testapi.Configuration;
public class MutationTestUnitTest {
private MutationTestUnit testee;
private List<MutationDetails> mutations;
private Collection<ClassName> tests;
@Mock
private Configuration config;
private MutationConfig mutationConfig;
@Mock
private TimeoutLengthStrategy timeout;
@Mock
private JavaAgent javaAgent;
@Mock
private MutationEngine engine;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.mutationConfig = new MutationConfig(this.engine, new LaunchOptions(
this.javaAgent));
this.mutations = new ArrayList<MutationDetails>();
this.tests = new ArrayList<ClassName>();
this.testee = new MutationTestUnit(this.mutations, this.tests,
new WorkerFactory(null, this.config, this.mutationConfig, this.timeout,
false, null));
}
@Test
public void shouldReportWhenMutationsNotCoveredByAnyTest() throws Exception {
addMutation();
this.tests.add(new ClassName("foo"));
MutationMetaData actual = this.testee.call();
final MutationResult expected = new MutationResult(this.mutations.get(0),
new MutationStatusTestPair(0, DetectionStatus.NO_COVERAGE));
assertThat(actual.getMutations()).contains(expected);
}
@Test
public void shouldReportPriorityBasedOnNumberOfMutations() {
this.mutations.add(MutationDetailsMother.aMutationDetail().build());
this.testee = new MutationTestUnit(MutationDetailsMother.aMutationDetail()
.build(42), this.tests, null);
assertThat(this.testee.priority()).isEqualTo(42);
}
private void addMutation() {
this.mutations.add(new MutationDetails(aMutationId().build(), null, null,
0, 0));
}
}