blob: 2c3add4a0d41e51e21fddadc5a399847b7d864fd [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 junit.framework.TestCase;
import org.apache.uima.cas.ArrayFS;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.CASRuntimeException;
import org.apache.uima.cas.Feature;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.cas.impl.LowLevelCAS;
import org.apache.uima.cas.impl.LowLevelTypeSystem;
import org.apache.uima.cas.text.AnnotationFS;
/**
* Class comment for FeatureStructureTest.java goes here.
*
*/
public class FeatureStructureTest extends TestCase {
private CAS cas;
private TypeSystem ts;
private Type topType;
private Type stringType;
private Type tokenType;
private Type intType;
private Type tokenTypeType;
private Type wordType;
private Type arrayFsWithSubtypeType;
private Feature arrayFsWithSubtypeTypeFeat;
private Type group1Type;
private Type group2Type;
private Type langPairType;
private Type neListType;
private Feature lang1;
private Feature lang2;
private Feature descr;
private Feature tokenTypeFeat;
private Feature lemmaFeat;
private Feature sentLenFeat;
private Feature tokenFloatFeat;
private Feature startFeature;
private Feature tlFeature;
private Feature hdFeature;
/**
* Constructor for FeatureStructureTest.
*
* @param arg0
*/
public FeatureStructureTest(String arg0) {
super(arg0);
}
public void setUp() {
try {
this.cas = CASInitializer.initCas(new CASTestSetup());
assertTrue(this.cas != null);
this.ts = this.cas.getTypeSystem();
assertTrue(this.ts != null);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
this.topType = this.ts.getType(CAS.TYPE_NAME_TOP);
assertTrue(this.topType != null);
this.stringType = this.ts.getType(CAS.TYPE_NAME_STRING);
assertTrue(this.stringType != null);
this.tokenType = this.ts.getType(CASTestSetup.TOKEN_TYPE);
assertTrue(this.stringType != null);
this.intType = this.ts.getType(CAS.TYPE_NAME_INTEGER);
assertTrue(this.intType != null);
this.tokenTypeType = this.ts.getType(CASTestSetup.TOKEN_TYPE_TYPE);
assertTrue(this.tokenTypeType != null);
this.wordType = this.ts.getType(CASTestSetup.WORD_TYPE);
assertTrue(this.wordType != null);
this.arrayFsWithSubtypeType = this.ts.getType(CASTestSetup.ARRAYFSWITHSUBTYPE_TYPE);
assertTrue(this.arrayFsWithSubtypeType != null);
this.arrayFsWithSubtypeTypeFeat = this.ts
.getFeatureByFullName(CASTestSetup.ARRAYFSWITHSUBTYPE_TYPE_FEAT_Q);
this.group1Type = this.ts.getType(CASTestSetup.GROUP_1);
assertTrue(this.group1Type != null);
this.group2Type = this.ts.getType(CASTestSetup.GROUP_2);
assertTrue(this.group2Type != null);
this.tokenTypeFeat = this.ts.getFeatureByFullName(CASTestSetup.TOKEN_TYPE_FEAT_Q);
assertTrue(this.tokenTypeFeat != null);
this.lemmaFeat = this.ts.getFeatureByFullName(CASTestSetup.LEMMA_FEAT_Q);
assertTrue(this.lemmaFeat != null);
this.sentLenFeat = this.ts.getFeatureByFullName(CASTestSetup.SENT_LEN_FEAT_Q);
assertTrue(this.sentLenFeat != null);
this.tokenFloatFeat = this.ts.getFeatureByFullName(CASTestSetup.TOKEN_FLOAT_FEAT_Q);
assertTrue(this.tokenFloatFeat != null);
this.startFeature = this.ts.getFeatureByFullName(CAS.FEATURE_FULL_NAME_BEGIN);
assertTrue(this.startFeature != null);
this.langPairType = this.ts.getType(CASTestSetup.LANG_PAIR);
assertTrue(this.langPairType != null);
this.lang1 = this.langPairType.getFeatureByBaseName(CASTestSetup.LANG1);
assertTrue(this.lang1 != null);
this.lang2 = this.langPairType.getFeatureByBaseName(CASTestSetup.LANG2);
assertTrue(this.lang2 != null);
this.descr = this.langPairType.getFeatureByBaseName(CASTestSetup.DESCR_FEAT);
assertTrue(this.descr != null);
this.neListType = this.ts.getType(CAS.TYPE_NAME_NON_EMPTY_FS_LIST);
assertTrue(this.neListType != null);
this.tlFeature = this.neListType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_TAIL);
assertTrue(this.tlFeature != null);
this.hdFeature = this.neListType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_HEAD);
assertTrue(this.hdFeature != null);
}
public void tearDown() {
this.cas = null;
this.ts = null;
this.topType = null;
this.stringType = null;
this.tokenType = null;
this.intType = null;
this.tokenTypeType = null;
this.wordType = null;
this.group1Type = null;
this.group2Type = null;
this.tokenTypeFeat = null;
this.lemmaFeat = null;
this.sentLenFeat = null;
this.tokenFloatFeat = null;
this.startFeature = null;
this.langPairType = null;
this.lang1 = null;
this.lang2 = null;
this.descr = null;
}
public void testGetType() {
Type tokenType1 = this.ts.getType(CASTestSetup.TOKEN_TYPE);
Type wordType1 = this.ts.getType(CASTestSetup.WORD_TYPE);
FeatureStructure word = this.cas.createFS(wordType1);
FeatureStructure token = this.cas.createFS(tokenType1);
assertTrue(word.getType().equals(wordType1));
assertTrue(token.getType().equals(tokenType1));
}
public void testSetArrayValuedFeature() {
FeatureStructure testFS = this.cas.createFS(this.arrayFsWithSubtypeType);
assertTrue(testFS.getFeatureValue(this.arrayFsWithSubtypeTypeFeat) == null);
ArrayFS arrayFS = this.cas.createArrayFS(1);
testFS.setFeatureValue(this.arrayFsWithSubtypeTypeFeat, arrayFS);
assertTrue(true);
boolean caughtExc = false;
try {
testFS.setFeatureValue(this.arrayFsWithSubtypeTypeFeat, testFS);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_RANGE));
}
assertTrue(caughtExc);
}
public void testSetFeatureValue() {
FeatureStructure token = this.cas.createFS(this.tokenType);
assertTrue(token.getFeatureValue(this.tokenTypeFeat) == null);
assertTrue(token.getStringValue(this.lemmaFeat) == null);
boolean caughtExc = false;
try {
token.getFeatureValue(this.sentLenFeat);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_FEAT));
}
assertTrue(caughtExc);
FeatureStructure word = this.cas.createFS(this.wordType);
token.setFeatureValue(this.tokenTypeFeat, word);
caughtExc = false;
try {
token.setFeatureValue(this.lemmaFeat, word);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_RANGE));
}
assertTrue(caughtExc);
try {
token.setFeatureValue(this.tokenTypeFeat, null);
} catch (CASRuntimeException e) {
assertTrue(false);
}
caughtExc = false;
try {
token.setFeatureValue(this.startFeature, null);
} catch (CASRuntimeException e) {
assertTrue(e.getMessageKey().equals(CASRuntimeException.PRIMITIVE_VAL_FEAT));
caughtExc = true;
}
assertTrue(caughtExc);
assertTrue(token.getStringValue(this.lemmaFeat) == null);
String testString = "test";
token.setStringValue(this.lemmaFeat, testString);
assertTrue(token.getStringValue(this.lemmaFeat).equals(testString));
testString = "";
token.setStringValue(this.lemmaFeat, testString);
assertTrue(token.getStringValue(this.lemmaFeat).equals(testString));
}
public void testSetFloatValue() {
AnnotationFS token = (AnnotationFS) this.cas.createFS(this.tokenType);
assertTrue(token.getFloatValue(this.tokenFloatFeat) == 0.0f);
float f = -3.2f;
token.setFloatValue(this.tokenFloatFeat, f);
assertTrue(token.getFloatValue(this.tokenFloatFeat) == f);
f = 51234.132f;
token.setFloatValue(this.tokenFloatFeat, f);
assertTrue(token.getFloatValue(this.tokenFloatFeat) == f);
boolean caughtExc = false;
try {
token.setFloatValue(this.tokenTypeFeat, 0.0f);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_RANGE));
}
assertTrue(caughtExc);
assertTrue(token.getFloatValue(this.tokenFloatFeat) == f);
caughtExc = false;
try {
token.setFloatValue(this.sentLenFeat, 0.0f);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_FEAT));
}
assertTrue(caughtExc);
assertTrue(token.getFloatValue(this.tokenFloatFeat) == f);
}
public void testSetIntValue() {
AnnotationFS token = (AnnotationFS) this.cas.createFS(this.tokenType);
assertTrue(token.getIntValue(this.startFeature) == 0);
int i = 3;
token.setIntValue(this.startFeature, i);
assertTrue(token.getIntValue(this.startFeature) == i);
i = -123456;
token.setIntValue(this.startFeature, i);
assertTrue(token.getIntValue(this.startFeature) == i);
boolean caughtExc = false;
try {
token.setIntValue(this.tokenTypeFeat, 0);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_RANGE));
}
assertTrue(caughtExc);
assertTrue(token.getIntValue(this.startFeature) == i);
caughtExc = false;
try {
token.setIntValue(this.sentLenFeat, 0);
} catch (CASRuntimeException e) {
caughtExc = true;
assertTrue(e.getMessageKey().equals(CASRuntimeException.INAPPROP_FEAT));
}
assertTrue(caughtExc);
assertTrue(token.getIntValue(this.startFeature) == i);
}
public void testStrings() {
FeatureStructure lp = this.cas.createFS(this.langPairType);
assertTrue(lp != null);
// Check that all strings are initially null.
try {
assertTrue(lp.getStringValue(this.lang1) == null);
} catch (Exception e) {
assertTrue(false);
}
try {
assertTrue(lp.getStringValue(this.lang2) == null);
} catch (Exception e) {
assertTrue(false);
}
try {
assertTrue(lp.getStringValue(this.descr) == null);
} catch (Exception e) {
assertTrue(false);
}
// FeatureStructure topFS = cas.createFS(topType);
String val = "Some string.";
try {
lp.setStringValue(this.descr, val);
assertTrue(val.equals(lp.getStringValue(this.descr)));
} catch (CASRuntimeException e) {
assertTrue(false);
}
try {
lp.setStringValue(this.descr, null);
assertTrue(lp.getStringValue(this.descr) == null);
} catch (CASRuntimeException e) {
assertTrue(false);
}
try {
lp.setStringValue(this.lang1, CASTestSetup.GROUP_1_LANGUAGES[0]);
lp.setStringValue(this.lang2, CASTestSetup.GROUP_2_LANGUAGES[2]);
} catch (Exception e) {
assertTrue(false);
}
boolean exc = false;
try {
lp.setStringValue(this.lang1, CASTestSetup.GROUP_2_LANGUAGES[0]);
} catch (CASRuntimeException e) {
assertTrue(e.getMessageKey().equals(CASRuntimeException.ILLEGAL_STRING_VALUE));
exc = true;
}
assertTrue(exc);
exc = false;
try {
lp.setStringValue(this.lang2, val);
} catch (CASRuntimeException e) {
assertTrue(e.getMessageKey().equals(CASRuntimeException.ILLEGAL_STRING_VALUE));
exc = true;
}
assertTrue(exc);
// Regression: toString() used to fail because string subtypes were
// incorrectly classified as ref types.
lp.toString();
LowLevelCAS llc = this.cas.getLowLevelCAS();
LowLevelTypeSystem llts = llc.ll_getTypeSystem();
final int tokenTypeCode = llts.ll_getCodeForType(this.tokenType);
final int addr = llc.ll_createFS(tokenTypeCode);
final int lemmaFeatCode = llts.ll_getCodeForFeature(this.lemmaFeat);
llc.ll_setStringValue(addr, lemmaFeatCode, "test", true);
assertTrue(llc.ll_getCharBufferValueSize(addr, lemmaFeatCode) == 4);
}
public void testEquals() {
// ???
}
public void testToString() {
FeatureStructure listFS = this.cas.createFS(this.neListType);
listFS.setFeatureValue(this.tlFeature, listFS);
// System.out.println(listFS.toString());
FeatureStructure value = this.cas.createFS(this.tokenType);
FeatureStructure newList = this.cas.createFS(this.neListType);
newList.setFeatureValue(this.tlFeature, listFS);
newList.setFeatureValue(this.hdFeature, value);
listFS.setFeatureValue(this.hdFeature, value);
// System.out.println("\n" + newList.toString());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(FeatureStructureTest.class);
}
}