package de.uni_goettingen.sub.commons.ocr.abbyy.server;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import de.uni_goettingen.sub.commons.ocr.api.OcrImage;
public class ProcessSplitterTest {
private ProcessSplitter splitterSut;
private ProcessMergingObserver mergerMock = mock(ProcessMergingObserver.class);
private AbbyyProcess processMock = mock(AbbyyProcess.class);
@Before
public void beforeEachTest() throws Exception {
splitterSut = new ProcessSplitter();
splitterSut.setProcessMergingObserver(mergerMock);
}
@Test
public void shouldNotSplitBecauseOfFewImages() {
when(processMock.getNumberOfImages()).thenReturn(2);
List<AbbyyProcess> splitResults = splitterSut.split(processMock, 2);
assertEquals("Should not split a small process", processMock, splitResults.get(0));
}
@Test(expected=IllegalArgumentException.class)
public void shouldRejectProcessWithoutImages() {
when(processMock.getNumberOfImages()).thenReturn(0);
splitterSut.split(processMock, 1);
}
@Test
public void shouldSplitOneProcessIntoTwo() throws URISyntaxException {
when(processMock.getNumberOfImages()).thenReturn(2);
when(processMock.getImages()).thenReturn(testImages());
when(processMock.getName()).thenReturn("testMock");
AbbyyProcess subProcessMock1 = mock(AbbyyProcess.class);
AbbyyProcess subProcessMock2 = mock(AbbyyProcess.class);
when(processMock.createSubProcess()).thenReturn(subProcessMock1, subProcessMock2);
List<AbbyyProcess> splitResults = splitterSut.split(processMock, 1);
assertEquals("Number of split subprocesses", 2, splitResults.size());
assertSame("First subprocess", subProcessMock1, splitResults.get(0));
assertSame("Second subprocess", subProcessMock2, splitResults.get(1));
verify(subProcessMock1).setName("testMock_1of2");
verify(subProcessMock2).setName("testMock_2of2");
}
private List<OcrImage> testImages() throws URISyntaxException {
AbbyyImage image1 = new AbbyyImage();
image1.setLocalUri(new URI("file:/1.tif"));
AbbyyImage image2 = new AbbyyImage();
image2.setLocalUri(new URI("file:/2.tif"));
return Arrays.asList(new OcrImage[]{image1, image2});
}
}