You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2016/01/04 16:57:52 UTC

svn commit: r1722903 - in /uima/ruta/trunk/ruta-core/src: main/antlr3/org/apache/uima/ruta/parser/ main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/action/ main/java/org/apache/uima/ruta/expression/ main/java/org/apache/uima/ruta/expressi...

Author: pkluegl
Date: Mon Jan  4 15:57:51 2016
New Revision: 1722903

URL: http://svn.apache.org/viewvc?rev=1722903&view=rev
Log:
UIMA-4657
- some first tests

Added:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java   (with props)
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java   (with props)
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java   (with props)
Modified:
    uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java

Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Mon Jan  4 15:57:51 2016
@@ -864,7 +864,8 @@ String label = null;
 	(l = Identifier {label = l.getText();} COLON)?
 	start = STARTANCHOR? (
 	rea = ruleElementAnnotation[container]{re = rea;}
-	|re1 = ruleElementType[container] {re = re1;}
+	| 
+	re1 = ruleElementType[container] {re = re1;}
 	| re2 = ruleElementLiteral[container] {re = re2;}
 	| (ruleElementComposed[null])=>re3 = ruleElementComposed[container] {re = re3;}
 	| (ruleElementWildCard[null])=> re5 = ruleElementWildCard[container] {re = re5;}
@@ -966,8 +967,7 @@ ruleElementType [RuleElementContainer co
 
 ruleElementAnnotation [RuleElementContainer container] returns [RutaRuleElement re = null]
     :
-    
-    (annotationAddressExpression)=>aExpr = annotationAddressExpression 
+    (annotationExpression2)=>aExpr = annotationExpression2 
      {re = factory.createRuleElement(aExpr, null, null, null, container, $blockDeclaration::env);} 
     q = quantifierPart? 
         (LCURLY c = conditions? (THEN a = actions)? RCURLY)?
@@ -1930,9 +1930,9 @@ actionAssign returns [AbstractRutaAction
     :
     name = ASSIGN LPAREN
     (
-    {isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "TYPE")}? 
-        nv = Identifier COMMA e1 = typeExpression 
-        {action = ActionFactory.createAssignAction(nv, e1,$blockDeclaration::env);}
+    {isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "ANNOTATION")||isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "TYPE")}? 
+        nv = Identifier COMMA ea = annotationOrTypeExpression 
+        {action = ActionFactory.createAssignAction(nv, ea,$blockDeclaration::env);}
     |
     {isVariableOfType($blockDeclaration::env, input.LT(1).getText(), "BOOLEAN")}? 
         nv = Identifier COMMA e2 = booleanExpression 
@@ -2215,7 +2215,17 @@ annotationExpression returns [IRutaExpre
 	aae = annotationAddressExpression {expr = aae;}
 	|
 	ale = annotationLabelExpression {expr = ale;}
-	
+	;
+
+annotationExpression2 returns [IRutaExpression expr = null]
+	:
+	{isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATION")	}? 
+	id = Identifier {expr = ExpressionFactory.createAnnotationVariableExpression(id);} 
+	|
+	{isVariableOfType($blockDeclaration::env,input.LT(1).getText(), "ANNOTATIONLIST")	}? 
+	id = Identifier {expr = ExpressionFactory.createAnnotationListVariableExpression(id);} 
+	|
+	aae = annotationAddressExpression {expr = aae;}
 	;
 
 annotationAddressExpression returns [IAnnotationExpression expr = null]

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Mon Jan  4 15:57:51 2016
@@ -969,7 +969,9 @@ public class RutaStream extends FSIterat
         }
       } else {
         Type t = ate.getType(context, this);
-        assignAnnotationByTypeInWindow(annotation, feature, context, t);
+        if(t != null) {
+          assignAnnotationByTypeInWindow(annotation, feature, context, t);
+        }
       }
     } else if (value instanceof IAnnotationExpression && !feature.getRange().isPrimitive()) {
       IAnnotationExpression ae = (IAnnotationExpression) value;
@@ -1033,4 +1035,18 @@ public class RutaStream extends FSIterat
       }
     }
   }
+
+  public AnnotationFS getSingleAnnotationByTypeInContext(Type type, MatchContext context) {
+    List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), type);
+    if(inWindow != null&& !inWindow.isEmpty()) {
+      return inWindow.get(0);
+    }
+    return null;
+  }
+  
+  public List<AnnotationFS> getAnnotationsByTypeInContext(Type type, MatchContext context) {
+    List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), type);
+    return inWindow;
+  }
+  
 }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/AssignAction.java Mon Jan  4 15:57:51 2016
@@ -20,10 +20,12 @@
 package org.apache.uima.ruta.action;
 
 import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaEnvironment;
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.IRutaExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
@@ -65,6 +67,9 @@ public class AssignAction extends Abstra
     } else if (clazz.equals(String.class) && expression instanceof IStringExpression) {
       String v = ((IStringExpression) expression).getStringValue(context, stream);
       environment.setVariableValue(var, v);
+    } else if (clazz.equals(AnnotationFS.class) && expression instanceof IAnnotationExpression) {
+      AnnotationFS v = ((IAnnotationExpression) expression).getAnnotation(context, stream);
+      environment.setVariableValue(var, v);
     }
   }
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java Mon Jan  4 15:57:51 2016
@@ -54,10 +54,15 @@ public class AnnotationTypeExpression ex
     if (!initialized) {
       initialize(context, stream);
     }
-    if(annotationExpression == null) {
-      return null;
+    if(annotationExpression != null) {
+      return annotationExpression.getAnnotation(context, stream);
+    } else {
+      Type type = getType(context, stream);
+      if(type != null) {
+        return stream.getSingleAnnotationByTypeInContext(type, context);
+      }
     }
-    return annotationExpression.getAnnotation(context, stream);
+    return null;
   }
 
   @Override
@@ -68,8 +73,12 @@ public class AnnotationTypeExpression ex
     if(typeExpression != null) {
       return typeExpression.getType(context, stream);
     } else {
-      return getAnnotation(context, stream).getType();
+      AnnotationFS annotation = getAnnotation(context, stream);
+      if(annotation!= null) {
+        return annotation.getType();
+      }
     }
+    return null;
   }
 
   @Override

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpression.java Mon Jan  4 15:57:51 2016
@@ -22,8 +22,6 @@ package org.apache.uima.ruta.expression.
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.uima.cas.Feature;
-import org.apache.uima.cas.FeatureStructure;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaStream;
@@ -47,16 +45,12 @@ public class AnnotationFeatureExpression
   public AnnotationFS getAnnotation(MatchContext context, RutaStream stream) {
     AnnotationFS annotation = context.getAnnotation();
     Type type = fe.getTypeExpr(context, stream).getType(context, stream);
-    Feature feature = fe.getFeature(context, stream);
     List<AnnotationFS> list = getTargetAnnotation(annotation, type, stream);
     Collection<AnnotationFS> featureAnnotations = fe.getFeatureAnnotations(list, stream, context,
             false);
     if (!featureAnnotations.isEmpty()) {
       AnnotationFS next = featureAnnotations.iterator().next();
-      FeatureStructure featureValue = next.getFeatureValue(feature);
-      if(featureValue instanceof AnnotationFS) {
-        return (AnnotationFS) featureValue;
-      }
+        return next;
     }
     return null;
   }

Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java?rev=1722903&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java Mon Jan  4 15:57:51 2016
@@ -0,0 +1,54 @@
+/*
+ * 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.ruta.expression.annotation;
+
+import java.util.List;
+
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.RutaBlock;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.list.ListExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+
+public class AnnotationListVariableExpression extends ListExpression<AnnotationFS> implements IAnnotationListExpression{
+
+  private String var;
+
+  public AnnotationListVariableExpression(String var) {
+    super();
+    this.var = var;
+  }
+
+  
+  @Override
+  public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
+    RutaBlock parent = context.getParent();
+    @SuppressWarnings("unchecked")
+    List<AnnotationFS> list = parent.getEnvironment().getVariableValue(var, List.class);
+    return list;
+  }
+
+
+  @Override
+  public List<AnnotationFS> getAnnotations(MatchContext context, RutaStream stream) {
+    return getList(context, stream);
+  }
+
+}

Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListVariableExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java?rev=1722903&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java Mon Jan  4 15:57:51 2016
@@ -0,0 +1,38 @@
+/*
+ * 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.ruta.expression.annotation;
+
+import java.util.List;
+
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+
+/**
+ * This is a generic interface for all annotation list expressions, expressions that refer to a list of explicit
+ * annotations.
+ *
+ */
+public interface IAnnotationListExpression extends IStringExpression {
+
+  List<AnnotationFS> getAnnotations(MatchContext context, RutaStream stream);
+
+}

Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/IAnnotationListExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/list/UntypedListExpression.java Mon Jan  4 15:57:51 2016
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.expression.IRutaExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
 import org.apache.uima.ruta.expression.number.INumberExpression;
 import org.apache.uima.ruta.expression.string.IStringExpression;
@@ -50,6 +51,8 @@ public class UntypedListExpression exten
         result.add(((INumberExpression) each).getDoubleValue(context, stream));
       } else if (each instanceof ITypeExpression) {
         result.add(((ITypeExpression) each).getType(context, stream));
+      } else if (each instanceof IAnnotationExpression) {
+        result.add(((IAnnotationExpression) each).getAnnotation(context, stream));
       } else if (each instanceof ListExpression) {
         result.add(((ListExpression<?>) each).getList(context, stream));
       } else if (each instanceof IStringExpression) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java?rev=1722903&r1=1722902&r2=1722903&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationMatcher.java Mon Jan  4 15:57:51 2016
@@ -49,7 +49,9 @@ public class RutaAnnotationMatcher imple
     Collection<AnnotationFS> annotations = new TreeSet<AnnotationFS>(comparator);
     MatchContext context = new MatchContext(parent);
     AnnotationFS annotation = annotationExpression.getAnnotation(context, stream);
-    annotations.add(annotation);
+    if(annotation != null) {
+      annotations.add(annotation);
+    }
     return annotations;
   }
 

Added: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java?rev=1722903&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java (added)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java Mon Jan  4 15:57:51 2016
@@ -0,0 +1,94 @@
+/*
+ * 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.ruta.expression.annotation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.FSIterator;
+import org.apache.uima.cas.Feature;
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.ruta.engine.Ruta;
+import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
+import org.junit.Test;
+
+public class AnnotationVariableExpressionTest {
+
+  @Test
+  public void test() {
+    String document = "Some text.";
+    String script = "ANNOTATION a;";
+    script += "CW{-> ASSIGN(a, CW)};";
+    script += "a{-> T1};";
+    script += "W W{-> CREATE(Struct, \"a\"=a)};";
+
+    Map<String, String> typeMap = new TreeMap<String, String>();
+    String typeName = "Struct";
+    typeMap.put(typeName, "uima.tcas.Annotation");
+
+    Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+    List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+    featureMap.put(typeName, list);
+    String fn = "a";
+    list.add(new TestFeature(fn, "", "uima.tcas.Annotation"));
+
+    CAS cas = null;
+    try {
+      cas = RutaTestUtils.getCAS(document, typeMap, featureMap);
+      Ruta.apply(cas, script);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    Type t = null;
+    AnnotationIndex<AnnotationFS> ai = null;
+    FSIterator<AnnotationFS> iterator = null;
+    AnnotationFS next = null;
+
+    Type t1 = RutaTestUtils.getTestType(cas, 1);
+    ai = cas.getAnnotationIndex(t1);
+    assertEquals(1, ai.size());
+    iterator = ai.iterator();
+    next = iterator.next();
+    assertEquals("Some", next.getCoveredText());
+
+    t = cas.getTypeSystem().getType(typeName);
+    Feature f1 = t.getFeatureByBaseName(fn);
+    ai = cas.getAnnotationIndex(t);
+
+    assertEquals(1, ai.size());
+    iterator = ai.iterator();
+    next = iterator.next();
+    assertEquals("text", next.getCoveredText());
+    AnnotationFS a = (AnnotationFS) next.getFeatureValue(f1);
+    assertNotNull("Feature value is null!", a);
+    assertEquals("Some", a.getCoveredText());
+  }
+
+}

Propchange: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
------------------------------------------------------------------------------
    svn:eol-style = native