//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.testing;
import java.util.Collection;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.fit.pipeline.SimplePipeline;
import org.apache.uima.resource.ResourceInitializationException;
import org.junit.Before;
import uk.gov.dstl.baleen.uima.BaleenAnnotator;
/**
* A base class for testing annotators where multiple annotators are needed in a pipeline.
*
* For example in testing entity extraction annotator you might first need to perform POS tagging.
*
* This is more like an integration test than a unit test, but given the complexity of some
* annotators outputs it might be easier to use the real annotator than attempt to manually mock its
* output.
*
*/
public abstract class AbstractMultiAnnotatorTest extends AnnotatorTestBase {
private AnalysisEngine[] analysisEngines;
@Before
public void beforeMultiAnnotatorTest() throws ResourceInitializationException {
analysisEngines = createAnalysisEngines();
}
protected abstract AnalysisEngine[] createAnalysisEngines() throws ResourceInitializationException;
/**
* Get an analysis engine for the provided class.
*
* @param annotatorClass
* the class of the annotator to create as an analysis engine
* @return
* @throws ResourceInitializationException
*/
protected AnalysisEngine createAnalysisEngine(Class<? extends BaleenAnnotator> annotatorClass)
throws ResourceInitializationException {
return AnalysisEngineFactory.createEngine(annotatorClass);
}
/**
* Get an analysis engine for the provided class
*
* @param annotatorClass
* the class of the annotorat to create as an analysis engine
* @param args
* name-value pairs
* @return
* @throws ResourceInitializationException
*/
protected AnalysisEngine createAnalysisEngine(Class<? extends BaleenAnnotator> annotatorClass, Object... args)
throws ResourceInitializationException {
return AnalysisEngineFactory.createEngine(annotatorClass, args);
}
/**
* Convert variable argument to array.
*
* Helper for use with createAnalysisEngines() implementations.
*
* @param args
* analysis engines as variable arguments
* @return an array of the args
* @throws ResourceInitializationException
*/
protected AnalysisEngine[] asArray(AnalysisEngine... args) {
return args;
}
/**
* Convert list argument to array of analysisengines.
*
* Helper for use with createAnalysisEngines() implementations.
*
* @param aes
* analysis engines as collection
* @return an array of of analysis engines provided in the collection
* @throws ResourceInitializationException
*/
protected AnalysisEngine[] asArray(Collection<AnalysisEngine> aes) {
return aes.toArray(new AnalysisEngine[aes.size()]);
}
/**
* process the {@link AnnotatorTestBase}'s jCas with the annotator.
*
* @throws ResourceInitializationException
* @throws AnalysisEngineProcessException
*/
protected void processJCas() throws ResourceInitializationException, AnalysisEngineProcessException {
SimplePipeline.runPipeline(jCas, analysisEngines);
}
}