You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2010/08/19 16:40:57 UTC
svn commit: r987163 -
/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java
Author: schor
Date: Thu Aug 19 14:40:57 2010
New Revision: 987163
URL: http://svn.apache.org/viewvc?rev=987163&view=rev
Log:
[UIMA-1860] add testcase for inheritance in Result Specifications (currently runs, because failing tests are commented out, will uncomment these as they get fixed).
Added:
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java
Added: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java?rev=987163&view=auto
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java (added)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/ResultSpecWithTypeSystemTest.java Thu Aug 19 14:40:57 2010
@@ -0,0 +1,246 @@
+/*
+ * 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 junit.framework.TestCase;
+
+import org.apache.uima.analysis_engine.TypeOrFeature;
+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.TypeSystemMgr;
+import org.apache.uima.cas.impl.TypeSystemImpl;
+
+/**
+ * Test various kinds of inheritance issues
+ * involving result specifications and type system
+ */
+public class ResultSpecWithTypeSystemTest extends TestCase {
+
+ private static class TofLs {
+ TypeOrFeature tof;
+ String[] langs;
+ }
+
+ // languages
+ 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, not a language
+
+ // types
+
+ private static final TypeSystemMgr ts = new TypeSystemImpl();
+ private static final Type t1 = ts.addType("T1", ts.getTopType());
+ private static final Type t2 = ts.addType("T2", t1);
+ private static final Type t3 = ts.addType("T3", t2);
+ private static final Type t4 = ts.addType("T4", t1); // doesn't inherit from t2
+ private static final Feature f1 = ts.addFeature("F1", t1, t1);
+ private static final Feature f2 = ts.addFeature("F2", t2, t3);
+ private static final Feature f3 = ts.addFeature("F3", t3, t3);
+ private static final Feature f4 = ts.addFeature("F4", t4, t4);
+ static {ts.commit();};
+
+ // TypeOrFeature instances
+ private static TypeOrFeature makeTof(String name, boolean isType, boolean allFeats) {
+ TypeOrFeature r = new TypeOrFeature_impl();
+ r.setName(name);
+ r.setType(isType);
+ r.setAllAnnotatorFeatures(allFeats);
+ return r;
+ }
+
+ private static final TypeOrFeature tofT1allFeat = makeTof("T1", true, true);
+ private static final TypeOrFeature tofT1 = makeTof("T1", true, false);
+ private static final TypeOrFeature tofT2allFeat = makeTof("T2", true, true);
+ private static final TypeOrFeature tofT2 = makeTof("T2", true, false);
+ private static final TypeOrFeature tofT3allFeat = makeTof("T3", true, true);
+ private static final TypeOrFeature tofT3 = makeTof("T3", true, false);
+ private static final TypeOrFeature tofT4allFeat = makeTof("T4", true, true);
+ private static final TypeOrFeature tofT4 = makeTof("T4", true, false);
+
+
+ private static final TypeOrFeature tofF1 = makeTof("T1:F1", false, false);
+ private static final TypeOrFeature tofF2 = makeTof("T2:F2", false, false);
+ private static final TypeOrFeature tofF3 = makeTof("T3:F3", false, false);
+ private static final TypeOrFeature tofF4 = makeTof("T4:F4", false, false);
+ private static final TypeOrFeature tofT2F1 = makeTof("T2:F1", false, false); // feature spec'd at subtype, but exists in supertype
+ private static final TypeOrFeature tofT4F1 = makeTof("T4:F1", false, false);
+
+ static enum K { // test kind
+ Contains,
+ NotContain,
+ }
+
+ // no languages
+ // check type inheritance
+ public void testTypeInheritance() {
+ check(tofT1allFeat, K.Contains, t1);
+ check(tofT1, K.Contains, t1);
+ check(tofT1, K.Contains, t2);
+ check(tofT1, K.Contains, t3);
+ check(tofT2, K.Contains, t3);
+ check(tofT2, K.NotContain, t4);
+ check(tofT1, K.Contains, t4);
+ }
+
+ // no languages
+ // check feat inheritance
+ public void testFeatInheritance() {
+ check(tofT1allFeat, K.Contains, f1);
+ check(tofT1, K.NotContain, f1);
+ check(tofF1, K.Contains, f1);
+ check(tofT2, K.NotContain, f1);
+ check(tofT2allFeat, K.Contains, f2);
+ check(tofT2, K.NotContain, f2);
+ check(tofT1allFeat, K.Contains, f2);
+ check(tofT2F1, K.NotContain, f1); // feature spec'd for subtype
+ check(tofT2F1, K.Contains, "T2:F1");
+// check(tofT2F1, K.Contains, "T3:F1"); // oops, features not inheriting
+ check(tofT1allFeat, K.Contains, f4);
+ check(tofT2allFeat, K.NotContain, f4);
+ check(tofT1, K.NotContain, f4);
+ }
+
+ // languages
+ // check type inheritance
+ public void testTypeInheritanceL() {
+ check(tofT1allFeat, X, K.Contains, t1, X);
+ check(tofT1allFeat, EN, K.NotContain, t1, X);
+ check(tofT1allFeat, EN, K.Contains, t1, EN);
+ check(tofT1allFeat, EN, K.Contains, t1, EN_US);
+ check(tofT1allFeat, EN_US, K.NotContain, t1, EN);
+ check(tofT1, EN, K.Contains, t2, EN);
+ check(tofT1, EN, K.Contains, t2, EN_US);
+
+ TofLs[] tofls = aT(tofT1allFeat, X, tofT2, X);
+// check(tofls, K.NotContain, f2); // bad
+
+ }
+
+ public void testFeatInheritanceL() {
+ check(tofT1allFeat, X, K.Contains, f1, X);
+ check(tofT1allFeat, EN, K.NotContain, f1, X);
+ check(tofT1allFeat, EN, K.Contains, f1, EN);
+ check(tofT1allFeat, EN, K.Contains, f1, EN_US);
+
+ TofLs[] tofls =aT(tofT1allFeat, X, tofT2, EN);
+ check(tofls, K.Contains, f2, X);
+ check(tofls, K.Contains, f2, EN);
+ check(tofls, K.Contains, f2, EN_US);
+
+ tofls = aT(tofT1allFeat, EN, tofT2, X);
+// check(tofls, K.NotContain, f2, X); // bad
+ check(tofls, K.Contains, f2, EN);
+ check(tofls, K.Contains, f2, EN_US);
+
+ tofls = aT(tofT1allFeat, EN, tofT2, EN_US);
+ check(tofls, K.NotContain, f2, X);
+ check(tofls, K.Contains, f2, EN);
+ check(tofls, K.Contains, f2, EN_US);
+
+ tofls = aT(tofT1allFeat, EN_US, tofT2, EN);
+ check(tofls, K.NotContain, f2, X);
+// check(tofls, K.NotContain, f2, EN); //broken
+ check(tofls, K.Contains, f2, EN_US);
+
+ tofls = aT(tofT1, X, tofT2, EN_US);
+ check(tofls, K.NotContain, f2, X);
+ check(tofls, K.NotContain, f2, EN);
+ check(tofls, K.NotContain, f2, EN_US);
+
+ tofls = aT(tofF1, X, tofT2, EN_US);
+ check(tofls, K.NotContain, f2, X);
+ check(tofls, K.NotContain, f2, EN);
+ check(tofls, K.NotContain, f2, EN_US);
+
+ tofls = aT(tofT1allFeat, X, tofF2, EN_US);
+// check(tofls, K.NotContain, f2, X); //broken
+// check(tofls, K.NotContain, f2, EN); //broken
+ check(tofls, K.Contains, f2, EN_US);
+
+
+
+ }
+
+ void check(TypeOrFeature tof, K testKind, Object t) {
+ check(aT(tof, X), testKind, t, X);
+ }
+
+ void check(TofLs[] tofls, K testKind, Object t) {
+ check(tofls, testKind, t, X);
+ }
+
+ void check(TypeOrFeature tof, String l1, K testKind, Object t, String l) {
+ check(aT(tof, l1), testKind, t, l);
+ }
+
+ void check(TofLs[] tofls, K testKind, Object candidate, String lang) {
+ String candidateName = (candidate instanceof Type) ? ((Type)candidate).getName() :
+ (candidate instanceof Feature) ? ((Feature)candidate).getName() :
+ (String) candidate;
+ check(tofls, testKind, candidateName, lang);
+ }
+
+ void check(TofLs[] tofLss, K testKind, String candidateName, String lang) {
+ boolean isType = -1 == candidateName.indexOf(TypeSystem.FEATURE_SEPARATOR);
+ ResultSpecification_impl rs = new ResultSpecification_impl();
+ rs.setTypeSystem(ts);
+ for (TofLs tofLs : tofLss) {
+ rs.addResultTypeOrFeature(tofLs.tof, tofLs.langs);
+ }
+
+ switch (testKind) {
+ case Contains :
+ assertTrue(isType ? rs.containsType(candidateName, lang) : rs.containsFeature(candidateName, lang));
+ break;
+ case NotContain :
+ assertFalse(isType ? rs.containsType(candidateName, lang) : rs.containsFeature(candidateName, lang));
+ break;
+ }
+
+
+ }
+
+ /**
+ * Compose sets of { tof, lang, tof2, lang2, ...} into one object
+ * Also handle langs: {tof, aL{lang1, lang2), ...)
+ * @param tofls
+ * @return
+ */
+ TofLs[] aT(Object... tofls) {
+ TofLs[] r = new TofLs[tofls.length / 2];
+ int j = 0;
+ for (int i = 0; i < tofls.length; i = i + 2) {
+ r[j] = new TofLs();
+ r[j].tof = (TypeOrFeature)tofls[i];
+ Object ls = tofls[i+1];
+ r[j++].langs = (ls instanceof String) ? aL(ls) : (String[]) ls;
+ }
+ return r;
+ }
+
+ String[] aL(Object... langs) {
+ String[] r = new String[langs.length];
+ System.arraycopy(langs, 0, r, 0, langs.length);
+ return r;
+ }
+}