blob: 1cbbde786a69d94a80281a4e5e1f8af9b0e60d2d [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.cas.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.CASException;
import org.apache.uima.cas.FSIterator;
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.CASMgr;
import org.apache.uima.cas.admin.FSIndexRepositoryMgr;
import org.apache.uima.cas.admin.LinearTypeOrderBuilder;
import org.apache.uima.cas.admin.TypeSystemMgr;
import org.apache.uima.cas.impl.CASImpl;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.test.junit_extension.FileCompare;
import org.apache.uima.test.junit_extension.JUnitExtension;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLInputSource;
import org.apache.uima.util.XMLParser;
public class TypeOrderTest extends TestCase {
// Index name constants.
public static final String ANNOT_SET_INDEX = "Annotation Set Index";
public static final String ANNOT_BAG_INDEX = "Annotation Bag Index";
public static final String TYPE_ORDER_INDEX = "TypeOrderIndex";
public static final String TOKEN_TYPE = "Token";
public static final String TOKEN_TYPE_FEAT = "type";
public static final String TOKEN_TYPE_FEAT_Q = TOKEN_TYPE + TypeSystem.FEATURE_SEPARATOR
+ TOKEN_TYPE_FEAT;
public static final String TOKEN_TYPE_TYPE = "TokenType";
public static final String WORD_TYPE = "Word";
public static final String SEP_TYPE = "Separator";
public static final String EOS_TYPE = "EndOfSentence";
public static final String SENT_TYPE = "Sentence";
// private CASMgr casMgr;
private CAS cas;
private Type annotationType;
private Type tokenType;
private Type sentenceType;
public TypeOrderTest(String arg) {
super(arg);
}
/**
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
// this.casMgr = initCAS();
File descriptorFile = JUnitExtension.getFile("CASTests/desc/typePriorityTestCaseDescriptor.xml");
assertTrue("Descriptor must exist: " + descriptorFile.getAbsolutePath(), descriptorFile.exists());
try {
XMLParser parser = UIMAFramework.getXMLParser();
ResourceSpecifier spec = (ResourceSpecifier) parser.parse(new XMLInputSource(descriptorFile));
AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(spec);
this.cas = ae.newCAS();
assertTrue(this.cas != null);
} catch (IOException e) {
e.printStackTrace();
assertTrue(false);
} catch (InvalidXMLException e) {
e.printStackTrace();
assertTrue(false);
} catch (ResourceInitializationException e) {
e.printStackTrace();
assertTrue(false);
}
TypeSystem ts = this.cas.getTypeSystem();
// assert(wordType != null);
this.tokenType = ts.getType(TOKEN_TYPE);
this.sentenceType = ts.getType(SENT_TYPE);
this.annotationType = ts.getType(CAS.TYPE_NAME_ANNOTATION);
assertTrue(this.annotationType != null);
}
public void tearDown() {
// this.casMgr = null;
this.cas = null;
this.tokenType = null;
this.sentenceType = null;
this.annotationType = null;
}
// Initialize the first CAS.
public void testInitCAS() {
// Create a CASMgr. Ensures existence of AnnotationFS type.
CASMgr cas1 = CASFactory.createCAS();
// Create a writable type system.
TypeSystemMgr tsa = cas1.getTypeSystemMgr();
// Add new types and features.
Type topType = tsa.getTopType();
Type annotType = tsa.getType(CAS.TYPE_NAME_ANNOTATION);
// assert(annotType != null);
tsa.addType(SENT_TYPE, annotType);
tsa.addType(TOKEN_TYPE, annotType);
Type tokenTypeType = tsa.addType(TOKEN_TYPE_TYPE, topType);
tsa.addType(WORD_TYPE, tokenTypeType);
tsa.addType(SEP_TYPE, tokenTypeType);
tsa.addType(EOS_TYPE, tokenTypeType);
// Commit the type system.
((CASImpl) cas1).commitTypeSystem();
// Create the Base indexes.
try {
cas1.initCASIndexes();
} catch (CASException e2) {
e2.printStackTrace();
assertTrue(false);
}
FSIndexRepositoryMgr irm = cas1.getIndexRepositoryMgr();
// Check that appropriate exception is thrown on unknown types.
LinearTypeOrderBuilder order = irm.createTypeSortOrder();
boolean excCaught = false;
try {
order.add(new String[] { "foo", "bar" });
order.getOrder();
} catch (NullPointerException e) {
assertTrue(false);
} catch (CASException e) {
excCaught = true;
}
assertTrue(excCaught);
// Create an alternative annotation index using a type sort order.
order = irm.createTypeSortOrder();
try {
order.add(new String[] { TOKEN_TYPE, SENT_TYPE, CAS.TYPE_NAME_ANNOTATION });
order.getOrder();
} catch (CASException e) {
assertTrue(false);
}
}
/**
* Test driver.
*/
public void testMain() throws Exception {
File refFile = JUnitExtension.getFile("CASTests/CasTypeOrderTestRef.txt");
Assert.assertNotNull(refFile);
File outputFile = new File(JUnitExtension.getFile("CASTests"), "CasTypeOderTest_testouput.txt");
OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(
outputFile , false), "UTF-8");
Assert.assertNotNull(fileWriter);
for (int i = 0; i < 10; i++) {
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.annotationType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.sentenceType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
}
for (int i = 19; i >= 10; i--) {
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.annotationType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.sentenceType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
this.cas.getIndexRepository().addFS(this.cas.createAnnotation(this.tokenType, i * 2, (i * 2) + 1));
}
FSIterator it = this.cas.getIndexRepository().getIndex(TYPE_ORDER_INDEX).iterator();
// it = cas.getAnnotationIndex().iterator();
AnnotationFS fs;
for (it.moveToFirst(); it.isValid(); it.moveToNext()) {
fs = (AnnotationFS) it.get();
fileWriter.write(
fs.getType().getName()
+ ": "
+ fs.getBegin()
+ " - "
+ fs.getEnd() + "\n");
}
fileWriter.close();
//System.out.println(refFile.getAbsolutePath());
//System.out.println(outputFile.getAbsolutePath());
Assert.assertTrue("Comparing ref " + refFile.getAbsolutePath() + " and output " + outputFile.getAbsolutePath(), FileCompare.compare(refFile, outputFile));
}
public static void main(String[] args) {
junit.textui.TestRunner.run(TypeOrderTest.class);
}
}