blob: 81803ba0ba196cfe802e06a46df22b9dac2cba8d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.analysis_engine.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.uima.UIMAException;
import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.ResultSpecification;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.Feature;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.cas.admin.CASFactory;
import org.apache.uima.cas.admin.TypeSystemMgr;
import org.apache.uima.test.junit_extension.JUnitExtension;
import org.apache.uima.util.XMLInputSource;
import junit.framework.TestCase;
public class ResultSpecTest extends TestCase {
private CAS cas;
private static final String EN = "en";
private static final String X = "x-unspecified";
private static final String EN_US = "en-us";
private static final String PTBR = "pt-br";
private static final String I = "I"; // split designator
// types
private static final TypeSystemMgr tsm = CASFactory.createTypeSystem();
private static final Type t1 = tsm.addType("T1", tsm.getTopType());
private static final Feature f1 = tsm.addFeature("F1", t1, t1);
private static final Feature f1a = tsm.addFeature("F1a", t1, t1);
private static final TypeSystem ts;
static {ts = tsm.commit();};
/**
* Tests for https://issues.apache.org/jira/browse/UIMA-1840
*/
public void testIntersection() {
checkl(X, I, X, I, X);
checkl(X, I, EN, I, EN);
checkl(EN, I, X, I, EN);
checkl(X, I, EN_US, I, EN_US);
checkl(EN_US, I, X, I, EN_US);
checkl(EN, I, EN, I, EN);
checkl(EN, I, EN_US, I, EN_US);
checkl(EN_US, I, EN, I, EN_US);
checkl(EN_US, I, EN_US, I, EN_US);
checkl(X, EN, I, EN, X, I, X);
checkl(X, EN, I, EN, I, EN);
checkl(EN, EN_US, I, X, I, EN, EN_US);
checkl(X, PTBR, I, EN, I, EN);
checkl(PTBR, I, EN, I, null);
}
private void checkl(String... args) {
List<String> rs1List = new ArrayList<String>();
List<String> rs2List = new ArrayList<String>();
List<String> expList = new ArrayList<String>();
List<String>[] tgts = new List[]{rs1List, rs2List, expList};
int tgtI = 0;
for (int i = 0; i < args.length; i++) {
if (args[i] == I) {
tgtI ++;
} else {
if (args[i] != null) {
tgts[tgtI].add(args[i]);
}
}
}
String[] rs1langs = rs1List.toArray(new String[rs1List.size()]);
String[] rs2langs = rs2List.toArray(new String[rs2List.size()]);
String[] explangs = expList.toArray(new String[expList.size()]);
ResultSpecification_impl rs1 = new ResultSpecification_impl(ts);
ResultSpecification_impl rs2 = new ResultSpecification_impl(ts);
ResultSpecification_impl rsE = new ResultSpecification_impl(ts); //expected
addResultTypeOneAtATime(rs1, rs1langs);
addResultTypeOneAtATime(rs2, rs2langs);
addResultTypeOneAtATime(rsE, explangs);
ResultSpecification_impl rsQ = rs1.intersect(rs2);
assertEquals(rsQ, rsE);
}
// we do this to avoid language normalization from collapsing x-unspecified
// plus other languages into just x-unspecified
private void addResultTypeOneAtATime(ResultSpecification_impl rs, String[] languages) {
if (languages.length == 0) {
return;
}
if (languages.length == 1) {
rs.addResultType("T1", true, languages);
} else {
for (int i = 0; i < languages.length; i++) {
rs.addResultType("T1", true, new String[]{languages[i]});
}
}
}
public void testComputeAnalysisComponentResultSpec() throws Exception {
try {
AnalysisEngineDescription aeDesc = UIMAFramework.getXMLParser()
.parseAnalysisEngineDescription(
new XMLInputSource(JUnitExtension.getFile("SequencerTest/Annotator1.xml")));
PrimitiveAnalysisEngine_impl ae = (PrimitiveAnalysisEngine_impl) UIMAFramework
.produceAnalysisEngine(aeDesc);
CAS cas = ae.newCAS();
ResultSpecification_impl resultSpec = new ResultSpecification_impl();
resultSpec.addResultType("uima.tt.TokenLikeAnnotation", true);
resultSpec.setTypeSystem(cas.getTypeSystem());
ResultSpecification_impl rs2 = new ResultSpecification_impl(cas.getTypeSystem());
rs2.addCapabilities(ae.getAnalysisEngineMetaData().getCapabilities());
ResultSpecification acResultSpec = resultSpec.intersect(rs2);
assertTrue(acResultSpec.containsType("uima.tt.TokenAnnotation"));
assertFalse(acResultSpec.containsType("uima.tt.SentenceAnnotation"));
assertFalse(acResultSpec.containsType("uima.tt.Lemma"));
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
public void testComputeAnalysisComponentResultSpecInherit() throws Exception {
try {
AnalysisEngineDescription aeDesc = UIMAFramework.getXMLParser()
.parseAnalysisEngineDescription(
new XMLInputSource(JUnitExtension.getFile("SequencerTest/Annotator1.xml")));
PrimitiveAnalysisEngine_impl ae = (PrimitiveAnalysisEngine_impl) UIMAFramework
.produceAnalysisEngine(aeDesc);
CAS cas = ae.newCAS();
ResultSpecification_impl resultSpec = new ResultSpecification_impl(cas.getTypeSystem());
resultSpec.addResultType("uima.tcas.Annotation", true);
ResultSpecification_impl rs2 = new ResultSpecification_impl(cas.getTypeSystem());
rs2.addCapabilities(ae.getAnalysisEngineMetaData().getCapabilities());
ResultSpecification acResultSpec = resultSpec.intersect(rs2);
assertTrue(acResultSpec.containsType("uima.tt.TokenAnnotation"));
assertTrue(acResultSpec.containsType("uima.tt.SentenceAnnotation"));
assertFalse(acResultSpec.containsType("uima.tt.Lemma"));
} catch (Exception e) {
JUnitExtension.handleException(e);
}
}
private ResultSpecification createResultSpec(String language) {
ResultSpecification resultSpec = new ResultSpecification_impl(cas.getTypeSystem());
resultSpec.addResultType("Type1", true, new String[] {language});
return resultSpec;
}
/**
* Auxiliary method used by testProcess()
*
* @param aTaeDesc
* description of TextAnalysisEngine to test
*/
protected void _testProcess(AnalysisEngineDescription aed, String language) throws UIMAException {
// create and initialize AnalysisEngine
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(aed);
cas = ae.newCAS();
ResultSpecification resultSpec = createResultSpec(language);
cas.setDocumentText("new test");
ae.process(cas, resultSpec);
cas.reset();
ae.destroy();
}
}