package org.pitest.coverage.execute;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.pitest.coverage.CoverageResult;
import org.pitest.functional.SideEffect1;
import org.pitest.testapi.Description;
import org.pitest.util.Id;
import org.pitest.util.SafeDataInputStream;
import sun.pitest.CodeCoverageStore;
// does this test add any value?
public class ReceiveTest {
private Receive testee;
private SideEffect1<CoverageResult> handler;
private CoverageResult result;
private Description description;
@Mock
private SafeDataInputStream is;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.handler = stubHandler();
this.testee = new Receive(this.handler);
this.description = new Description("foo", "bar");
}
private SideEffect1<CoverageResult> stubHandler() {
return new SideEffect1<CoverageResult>() {
@Override
public void apply(final CoverageResult a) {
ReceiveTest.this.result = a;
}
};
}
@Test
public void shouldReportNoCoverageWhenNoTestsRun() {
this.testee.apply(Id.DONE, this.is);
assertNull(this.result);
}
@Test
public void shouldReportWhenTestFails() {
recordTestCoverage(0, 0, 0, false);
assertEquals(false, this.result.isGreenTest());
}
@Test
public void shouldReportWhenTestPasses() {
recordTestCoverage(0, 0, 0, true);
assertEquals(true, this.result.isGreenTest());
}
private void recordTestCoverage(final int executionTime, final int classId,
final int probeNumber, final boolean testPassed) {
when(this.is.readInt()).thenReturn(classId, executionTime);
when(this.is.readString()).thenReturn("foo");
this.testee.apply(Id.CLAZZ, this.is);
when(this.is.read(Description.class)).thenReturn(this.description);
when(this.is.readInt()).thenReturn(1);
when(this.is.readLong()).thenReturn(1l,
CodeCoverageStore.encode(classId, probeNumber));
when(this.is.readBoolean()).thenReturn(testPassed);
this.testee.apply(Id.OUTCOME, this.is);
}
}