package de.uni_goettingen.sub.commons.ocr.abbyy.ocrsdk;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Locale;
import org.apache.commons.io.IOUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import de.uni_goettingen.sub.commons.ocr.api.OcrFormat;
import de.uni_goettingen.sub.commons.ocr.api.OcrTextType;
public class OcrsdkProcessTest {
private byte[] fakeImage = {0};
private String resultXml = "<xml-document/>";
private String resultTxt = "txt-document";
private OcrsdkImage imageMock = mock(OcrsdkImage.class);
private OcrsdkOutput outputXmlMock = mock(OcrsdkOutput.class);
private OcrsdkOutput outputTxtMock = mock(OcrsdkOutput.class);
private OcrsdkClient clientMock = mock(OcrsdkClient.class);
private OcrsdkProcess process;
@Before
public void setUp() throws Exception {
when(imageMock.getAsBytes()).thenReturn(fakeImage);
InputStream xmlOutput = new ByteArrayInputStream(resultXml.getBytes());
when(clientMock.getResultForFormat("xml")).thenReturn(xmlOutput);
InputStream txtOutput = new ByteArrayInputStream(resultTxt.getBytes());
when(clientMock.getResultForFormat("txt")).thenReturn(txtOutput);
when(outputXmlMock.getFormat()).thenReturn(OcrFormat.XML);
when(outputTxtMock.getFormat()).thenReturn(OcrFormat.TXT);
process = new OcrsdkProcess("user", "pass");
process.setClient(clientMock);
}
//@Test
public void test() {
OcrsdkImage image = new OcrsdkImage();
image.setLocalUri(new File("src/test/resources/Picture_010.tif").toURI());
OcrsdkOutput outputXml = new OcrsdkOutput();
outputXml.setLocalUri(new File("target/testResult.xml").toURI());
outputXml.setFormat(OcrFormat.XML);
OcrsdkOutput outputTxt = new OcrsdkOutput();
outputTxt.setLocalUri(new File("target/testResult.txt").toURI());
outputTxt.setFormat(OcrFormat.TXT);
OcrsdkProcess process = new OcrsdkProcess("", "");
process.addImage(image.getLocalUri());
// process.addOutput(outputXml);
// process.addOutput(outputTxt);
process.addLanguage(Locale.ENGLISH);
process.addLanguage(Locale.GERMAN);
process.start();
}
//@Test
public void usesTheRestClientCorrectly() {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
process.start();
verify(clientMock, times(1)).submitImage(fakeImage);
verify(clientMock, times(1)).addExportFormat("xml");
verify(clientMock, times(1)).processDocument();
}
//@Test
public void forwardsSeveralOutputFormats() {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
// process.addOutput(outputTxtMock);
process.start();
verify(clientMock, times(1)).addExportFormat("xml");
verify(clientMock, times(1)).addExportFormat("txt");
}
//@Test
public void forwardsTwoImages() {
// process.addImage(imageMock);
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
process.start();
verify(clientMock, times(2)).submitImage(fakeImage);
}
//@Test
public void forwardsTwoLanguages() {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
process.addLanguage(Locale.ENGLISH);
process.addLanguage(Locale.GERMAN);
process.start();
verify(clientMock, times(1)).addLanguage("English");
verify(clientMock, times(1)).addLanguage("German");
}
// @Test
public void forwardsTextType() {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
process.setTextType(OcrTextType.GOTHIC);
process.start();
verify(clientMock, times(1)).addTextType("gothic");
}
// @Test
public void canSaveReceivedXmlResult() throws IOException {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
process.start();
ArgumentCaptor<InputStream> argument = ArgumentCaptor.forClass(InputStream.class);
verify(outputXmlMock, times(1)).save(argument.capture());
InputStream is = argument.getValue();
assertEquals("saved result document", "<xml-document/>", IOUtils.toString(is));
}
// @Test
public void canSaveTwoReceivedResults() throws IOException {
// process.addImage(imageMock);
// process.addOutput(outputXmlMock);
// process.addOutput(outputTxtMock);
process.start();
ArgumentCaptor<InputStream> argument = ArgumentCaptor.forClass(InputStream.class);
verify(outputXmlMock, times(1)).save(argument.capture());
InputStream iss = argument.getValue();
assertEquals("saved xml document", "<xml-document/>", IOUtils.toString(iss));
verify(outputTxtMock, times(1)).save(argument.capture());
iss = argument.getValue();
assertEquals("saved text document", "txt-document", IOUtils.toString(iss));
}
}