package uk.ac.ox.zoo.seeg.abraid.mp.modelwrapper.model; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.ModelRunStatus; import java.io.InputStream; import java.io.OutputStream; import static com.googlecode.catchexception.CatchException.catchException; import static com.googlecode.catchexception.CatchException.caughtException; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; /** * Tests for ModelProcessHandler. * Copyright (c) 2014 University of Oxford */ public class ModelProcessHandlerTest { @Rule public TemporaryFolder testFolder = new TemporaryFolder(); ///CHECKSTYLE:SUPPRESS VisibilityModifier @Test public void onProcessCompleteCallsStatusReporterCorrectly() throws Exception { // Arrange ModelStatusReporter mockStatusReporter = mock(ModelStatusReporter.class); ModelProcessHandler target = new ModelProcessHandler(mockStatusReporter); // Act target.onProcessComplete(); // Assert verify(mockStatusReporter).report(ModelRunStatus.COMPLETED, "", ""); } @Test public void onProcessFailedCallsStatusReporterCorrectly() throws Exception { // Arrange ModelStatusReporter mockStatusReporter = mock(ModelStatusReporter.class); ProcessException mockProcessException = mock(ProcessException.class); when(mockProcessException.getMessage()).thenReturn("expectedMessage"); ModelProcessHandler target = new ModelProcessHandler(mockStatusReporter); // Act target.onProcessFailed(mockProcessException); // Assert verify(mockStatusReporter).report(ModelRunStatus.FAILED, "", "Error message: expectedMessage. " + System.lineSeparator() + "Standard error: " + System.lineSeparator()); } @Test public void getOutputStreamReturnsValidStream() throws Exception { // Arrange ModelProcessHandler target = new ModelProcessHandler(mock(ModelStatusReporter.class)); // Act OutputStream result = target.getOutputStream(); // Assert assertThat(result).isNotNull(); } @Test public void getInputStreamReturnsValidStream() throws Exception { // Arrange ModelProcessHandler target = new ModelProcessHandler(mock(ModelStatusReporter.class)); // Act InputStream result = target.getInputStream(); // Assert assertThat(result).isNotNull(); } @Test public void getErrorStreamReturnsValidStream() throws Exception { // Arrange ModelProcessHandler target = new ModelProcessHandler(mock(ModelStatusReporter.class)); // Act OutputStream result = target.getErrorStream(); // Assert assertThat(result).isNotNull(); } @Test public void waitForCompletionShouldThrowIfWaiterHasNotBeenSet() throws Exception { // Arrange ModelProcessHandler target = new ModelProcessHandler(mock(ModelStatusReporter.class)); // Act catchException(target).waitForCompletion(); Exception result = caughtException(); // Assert assertThat(result).isInstanceOf(IllegalStateException.class); } }