package org.icij.extract.extractor; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.net.URISyntaxException; import java.nio.file.Paths; import java.util.concurrent.TimeUnit; import org.icij.extract.document.Document; import org.icij.extract.document.DocumentFactory; import org.icij.extract.document.PathIdentifier; import org.icij.extract.report.HashMapReportMap; import org.icij.extract.report.Reporter; import org.icij.extract.spewer.FieldNames; import org.icij.extract.spewer.PrintStreamSpewer; import org.icij.extract.spewer.Spewer; import org.junit.Test; import org.junit.Assert; public class DocumentConsumerTest { private final DocumentFactory factory = new DocumentFactory().withIdentifier(new PathIdentifier()); private Document getFile() throws URISyntaxException { return factory.create(Paths.get(getClass().getResource("/documents/text/plain.txt").toURI())); } @Test public void testConsume() throws Throwable { final Extractor extractor = new Extractor(); final ByteArrayOutputStream output = new ByteArrayOutputStream(); final PrintStream print = new PrintStream(output); final Spewer spewer = new PrintStreamSpewer(print, new FieldNames()); final DocumentConsumer consumer = new DocumentConsumer(spewer, extractor, 1); final Document document = getFile(); spewer.outputMetadata(false); consumer.accept(document); consumer.shutdown(); Assert.assertTrue(consumer.awaitTermination(1, TimeUnit.MINUTES)); Assert.assertEquals("This is a test.", output.toString().trim()); } @Test public void testSetReporter() throws Throwable { final Spewer spewer = new PrintStreamSpewer(new PrintStream(new ByteArrayOutputStream()), new FieldNames()); final DocumentConsumer consumer = new DocumentConsumer(spewer, new Extractor(), 1); final Reporter reporter = new Reporter(new HashMapReportMap()); final Document document = getFile(); // Assert that no reporter is set by default. Assert.assertNull(consumer.getReporter()); consumer.setReporter(reporter); Assert.assertEquals(reporter, consumer.getReporter()); // Assert that the extraction result is reported. Assert.assertNull(reporter.report(document)); spewer.outputMetadata(false); consumer.accept(document); consumer.shutdown(); Assert.assertTrue(consumer.awaitTermination(1, TimeUnit.MINUTES)); Assert.assertEquals(ExtractionStatus.SUCCESS, reporter.report(document).getStatus()); } }