package org.pitest.mutationtest.build;
import static org.junit.Assert.assertEquals;
import static org.pitest.mutationtest.LocationMother.aMutationId;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.pitest.classinfo.ClassName;
import org.pitest.mutationtest.LocationMother;
import org.pitest.mutationtest.LocationMother.LocationBuilder;
import org.pitest.mutationtest.engine.MutationDetails;
public class DefaultGrouperTest {
private DefaultGrouper testee;
@Test
public void shouldCreateSingleUnitPerClassWhenUnitSizeIsZero() {
makeTesteeWithUnitSizeOf(0);
assertCreatesOneUnitForTwoMutations();
}
@Test
public void shouldCreateSingleUnitPerClassWhenUnitSizeIsLessThanZero() {
makeTesteeWithUnitSizeOf(-1);
assertCreatesOneUnitForTwoMutations();
}
@Test
public void shouldCreateMultipleTestUnitsWhenUnitSizeIsLessThanNumberOfMutations() {
makeTesteeWithUnitSizeOf(1);
final List<List<MutationDetails>> actual = this.testee.groupMutations(
Arrays.asList(new ClassName("foo")), Arrays.asList(
createDetails("foo"), createDetails("foo"), createDetails("foo")));
assertEquals(3, actual.size());
}
private void assertCreatesOneUnitForTwoMutations() {
final MutationDetails mutation1 = createDetails("foo");
final MutationDetails mutation2 = createDetails("foo");
final List<List<MutationDetails>> actual = this.testee.groupMutations(null,
Arrays.asList(mutation1, mutation2));
assertEquals(1, actual.size());
}
private void makeTesteeWithUnitSizeOf(final int i) {
this.testee = new DefaultGrouper(i);
}
public static MutationDetails createDetails(final String clazz) {
LocationBuilder lb = LocationMother.aLocation().withClass(
ClassName.fromString(clazz));
return new MutationDetails(aMutationId().withLocation(lb).build(), "",
"desc", 42, 0);
}
}