@Test
public void shouldChainModifiedMutantListsThroughChildrenInCorrectOrder() {
this.testee = new CompoundMutationInterceptor(Arrays.asList(this.cosmeticChild, this.otherChild, this.modifyChild, this.reportChild, this.filterChild));
final Collection<MutationDetails> original = aMutationDetail().build(1);
final Collection<MutationDetails> modifyResult = aMutationDetail().build(2);
final Collection<MutationDetails> filterResult = aMutationDetail().build(3);
final Collection<MutationDetails> reportResult = aMutationDetail().build(3);
final Collection<MutationDetails> cosmeticResult = aMutationDetail().build(3);
final Collection<MutationDetails> otherResult = aMutationDetail().build(3);
when(this.modifyChild.intercept(any(Collection.class), any(Mutater.class))).thenReturn(modifyResult);
when(this.filterChild.intercept(any(Collection.class), any(Mutater.class))).thenReturn(filterResult);
when(this.reportChild.intercept(any(Collection.class), any(Mutater.class))).thenReturn(reportResult);
when(this.cosmeticChild.intercept(any(Collection.class), any(Mutater.class))).thenReturn(cosmeticResult);
when(this.otherChild.intercept(any(Collection.class), any(Mutater.class))).thenReturn(otherResult);
final Collection<MutationDetails> actual = this.testee.intercept(original, this.mutater);
assertThat(actual).isEqualTo(reportResult);
verify(this.otherChild).intercept(original,this.mutater);
verify(this.modifyChild).intercept(otherResult,this.mutater);
verify(this.filterChild).intercept(modifyResult,this.mutater);
verify(this.cosmeticChild).intercept(cosmeticResult,this.mutater);
verify(this.reportChild).intercept(cosmeticResult,this.mutater);
}