package org.pitest.mutationtest.engine.gregor.inlinedcode; import static org.junit.Assert.assertEquals; import static org.pitest.mutationtest.LocationMother.aLocation; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.pitest.mutationtest.engine.MutationDetails; import org.pitest.mutationtest.engine.MutationIdentifier; public class InlinedFinallyBlockDetectorTest { private InlinedFinallyBlockDetector testee; @Before public void setUp() { this.testee = new InlinedFinallyBlockDetector(); } @Test public void shouldNotCombineMutantsWhenOnSameLineAndDifferentBlocksButFromDifferentMutators() { final int line = 100; final int block = 1; final List<MutationDetails> mutations = Arrays.asList( makeMutant(line, block, "Foo", 0), makeMutant(line, block + 1, "NotFoo", 1)); assertEquals(mutations, this.testee.process(mutations)); } @Test public void shouldNotCombineMutantsWhenOnSameLineAndBlock() { final int line = 100; final int block = 1; final String mutator = "foo"; final List<MutationDetails> mutations = Arrays.asList( makeMutant(line, block, mutator, 0), makeMutant(line, block, mutator, 1)); assertEquals(mutations, this.testee.process(mutations)); } @Test public void shouldCreateSingleMutantWhenSameMutationCreatedOnSameLineInDifferentBlocksAndOneIsInAHandlerBlock() { final int line = 100; final String mutator = "foo"; final int block = 1000; final List<MutationDetails> mutations = Arrays.asList( makeMutantInHandlerBlock(line, block, mutator, 0), makeMutant(line, block + 1, mutator, 1)); assertEquals( Arrays.asList(makeMutantInHandlerBlock(line, block, mutator, Arrays.asList(0, 1))), this.testee.process(mutations)); } @Test public void shouldNotCombineMutationsWhenMoreThanOneInAHandlerBlock() { final int line = 100; final String mutator = "foo"; final int block = 1000; final List<MutationDetails> mutations = Arrays.asList( makeMutantInHandlerBlock(line, block, mutator, 0), makeMutantInHandlerBlock(line, block, mutator, 2), makeMutant(line, block + 1, mutator, 1)); final Collection<MutationDetails> actual = this.testee.process(mutations); assertEquals(mutations, actual); } private MutationDetails makeMutantInHandlerBlock(final int line, final int block, final String mutator, final int index) { return new MutationDetails(makeId(Collections.singleton(index), mutator), "file", "desc", line, block, true, false); } private MutationDetails makeMutantInHandlerBlock(final int line, final int block, final String mutator, final Collection<Integer> indexes) { return new MutationDetails(makeId(new HashSet<Integer>(indexes), mutator), "file", "desc", line, block, true, false); } private MutationDetails makeMutant(final int line, final int block, final String mutator, final Collection<Integer> indexes) { return new MutationDetails(makeId(new HashSet<Integer>(indexes), mutator), "file", "desc", line, block); } private MutationDetails makeMutant(final int line, final int block, final String mutator, final int index) { return makeMutant(line, block, mutator, Arrays.asList(index)); } private MutationIdentifier makeId(final Set<Integer> indexes, final String mutator) { return new MutationIdentifier(aLocation().build(), indexes, mutator); } }