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 2014/02/06 15:43:55 UTC

svn commit: r1565285 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/action/ main/java/org/apache/uima/ruta/condition/ main/java/org/apache/uima/ruta/expression/ main/java/org/apache/uima/ruta/rule/ t...

Author: pkluegl
Date: Thu Feb  6 14:43:55 2014
New Revision: 1565285

URL: http://svn.apache.org/r1565285
Log:
UIMA-3598
- evaluate inner matches also when complete composed element matched on nothing
- additionally organized imports and fixed another potential bug

Added:
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/OptionalDisjunctiveBeforeAnchoringTest.java   (with props)
Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/CallAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java Thu Feb  6 14:43:55 2014
@@ -22,8 +22,15 @@ package org.apache.uima.ruta;
 import static org.apache.uima.util.Level.SEVERE;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/CallAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/CallAction.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/CallAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/CallAction.java Thu Feb  6 14:43:55 2014
@@ -23,7 +23,6 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.TreeMap;
 
 import org.apache.uima.analysis_engine.AnalysisEngine;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java Thu Feb  6 14:43:55 2014
@@ -25,7 +25,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Set;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.uima.cas.FSIterator;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java Thu Feb  6 14:43:55 2014
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
-import java.util.Set;
 import java.util.TreeSet;
 
 import org.apache.commons.collections.CollectionUtils;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAction.java Thu Feb  6 14:43:55 2014
@@ -22,7 +22,6 @@ package org.apache.uima.ruta.action;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/action/UnmarkAllAction.java Thu Feb  6 14:43:55 2014
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.TypeSystem;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContextCountCondition.java Thu Feb  6 14:43:55 2014
@@ -22,7 +22,6 @@ package org.apache.uima.ruta.condition;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ImplicitCondition.java Thu Feb  6 14:43:55 2014
@@ -22,7 +22,6 @@ package org.apache.uima.ruta.condition;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.uima.cas.Type;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/IsCondition.java Thu Feb  6 14:43:55 2014
@@ -21,7 +21,6 @@ package org.apache.uima.ruta.condition;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfCondition.java Thu Feb  6 14:43:55 2014
@@ -21,7 +21,6 @@ package org.apache.uima.ruta.condition;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/PartOfNeqCondition.java Thu Feb  6 14:43:55 2014
@@ -21,7 +21,6 @@ package org.apache.uima.ruta.condition;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java Thu Feb  6 14:43:55 2014
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-import java.util.Set;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.uima.cas.Type;

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java Thu Feb  6 14:43:55 2014
@@ -90,12 +90,12 @@ public class ComposedRuleElement extends
       }
 
       Map<RuleMatch, ComposedRuleElementMatch> mergedMatches = mergeDisjunctiveRuleMatches(
-              ruleMatches, true);
+              ruleMatches, true, stream);
       Set<Entry<RuleMatch, ComposedRuleElementMatch>> entrySet = mergedMatches.entrySet();
       for (Entry<RuleMatch, ComposedRuleElementMatch> entry : entrySet) {
         RuleMatch eachRuleMatch = entry.getKey();
         ComposedRuleElementMatch eachComposedMatch = entry.getValue();
-        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, true);
+        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, true, null, parent, stream);
         boolean failed = !eachComposedMatch.matched();
         List<RuleMatch> fallbackContinue = fallbackContinue(true, failed, lastAnnotation,
                 eachRuleMatch, ruleApply, eachComposedMatch, null, entryPoint, stream, crowd);
@@ -133,7 +133,7 @@ public class ComposedRuleElement extends
       for (Entry<RuleMatch, ComposedRuleElementMatch> entry : entrySet) {
         RuleMatch eachRuleMatch = entry.getKey();
         ComposedRuleElementMatch eachComposedMatch = entry.getValue();
-        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, true);
+        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, true, null, parent, stream);
         boolean failed = !eachComposedMatch.matched();
         List<RuleMatch> fallbackContinue = fallbackContinue(true, failed, lastAnnotation,
                 eachRuleMatch, ruleApply, eachComposedMatch, null, entryPoint, stream, crowd);
@@ -144,7 +144,7 @@ public class ComposedRuleElement extends
   }
 
   private AnnotationFS getPrefixAnnotation(RuleMatch ruleMatch, RutaStream stream) {
-    AnnotationFS lastMatchedAnnotation = ruleMatch.getLastMatchedAnnotation(this, true);
+    AnnotationFS lastMatchedAnnotation = ruleMatch.getLastMatchedAnnotation(this, true, null, parent, stream);
     if (lastMatchedAnnotation.getBegin() == 0) {
       JCas jCas = stream.getJCas();
       AnnotationFS dummy = new RutaFrame(jCas, 0, 0);
@@ -195,12 +195,12 @@ public class ComposedRuleElement extends
       }
       // TODO sort matches, no need to merge them, right?!
       Map<RuleMatch, ComposedRuleElementMatch> mergedMatches = mergeDisjunctiveRuleMatches(
-              ruleMatches, after);
+              ruleMatches, after, stream);
       Set<Entry<RuleMatch, ComposedRuleElementMatch>> entrySet = mergedMatches.entrySet();
       for (Entry<RuleMatch, ComposedRuleElementMatch> entry : entrySet) {
         RuleMatch eachRuleMatch = entry.getKey();
         ComposedRuleElementMatch eachComposedMatch = entry.getValue();
-        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, after);
+        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, after, annotation, parent, stream);
         boolean failed = !eachComposedMatch.matched();
         List<RuleMatch> fallbackContinue = fallbackContinue(after, failed, lastAnnotation,
                 eachRuleMatch, ruleApply, eachComposedMatch, sideStepOrigin, entryPoint, stream,
@@ -231,7 +231,7 @@ public class ComposedRuleElement extends
       for (Entry<RuleMatch, ComposedRuleElementMatch> entry : entrySet) {
         RuleMatch eachRuleMatch = entry.getKey();
         ComposedRuleElementMatch eachComposedMatch = entry.getValue();
-        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, after);
+        AnnotationFS lastAnnotation = eachRuleMatch.getLastMatchedAnnotation(this, after, annotation, parent, stream);
         boolean failed = !eachComposedMatch.matched();
         List<RuleMatch> fallbackContinue = fallbackContinue(after, failed, lastAnnotation,
                 eachRuleMatch, ruleApply, eachComposedMatch, sideStepOrigin, entryPoint, stream,
@@ -278,7 +278,7 @@ public class ComposedRuleElement extends
   }
 
   private Map<RuleMatch, ComposedRuleElementMatch> mergeDisjunctiveRuleMatches(
-          Map<RuleMatch, ComposedRuleElementMatch> ruleMatches, boolean direction) {
+          Map<RuleMatch, ComposedRuleElementMatch> ruleMatches, boolean direction, RutaStream stream) {
     // TODO hotfix: this needs a correct implementation
     Map<RuleMatch, ComposedRuleElementMatch> result = new TreeMap<RuleMatch, ComposedRuleElementMatch>(
             ruleMatchComparator);
@@ -292,7 +292,7 @@ public class ComposedRuleElement extends
         result.put(ruleMatch, elementMatch);
       } else {
         AnnotationFS lastMatchedAnnotation = ruleMatch.getLastMatchedAnnotation(getFirstElement(),
-                direction);
+                direction, null, parent, stream);
         if (largestEntry == null) {
           largestEntry = entry;
           largestAnnotation = lastMatchedAnnotation;
@@ -483,6 +483,7 @@ public class ComposedRuleElement extends
           InferenceCrowd crowd) {
     List<AnnotationFS> textsMatched = match.getTextsMatched();
     if (textsMatched == null || textsMatched.isEmpty()) {
+      match.evaluateInnerMatches(true, stream);
       return;
     }
     int begin = textsMatched.get(0).getBegin();

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RuleMatch.java Thu Feb  6 14:43:55 2014
@@ -29,7 +29,9 @@ import java.util.Set;
 
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.RutaBlock;
 import org.apache.uima.ruta.RutaElement;
+import org.apache.uima.ruta.RutaStream;
 import org.apache.uima.ruta.ScriptApply;
 import org.apache.uima.ruta.engine.RutaEngine;
 
@@ -68,10 +70,14 @@ public class RuleMatch extends AbstractR
     return getMatchedAnnotations(element.getSelfIndexList(), element.getContainer());
   }
 
-  public AnnotationFS getLastMatchedAnnotation(RuleElement element, boolean direction) {
+  public AnnotationFS getLastMatchedAnnotation(RuleElement element, boolean direction, AnnotationFS annotation, RutaBlock parent, RutaStream stream) {
     List<AnnotationFS> matchedAnnotations = getMatchedAnnotationsOf(element);
     if (matchedAnnotations.isEmpty()) {
-      return null;
+      if(element.getQuantifier().isOptional(parent, stream)) {
+        return annotation;
+      } else {
+        return null;
+      }
     }
     if (direction) {
       return matchedAnnotations.get(matchedAnnotations.size() - 1);

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java Thu Feb  6 14:43:55 2014
@@ -376,7 +376,7 @@ public class RutaRuleElement extends Abs
       if (featureExpression != null) {
         base = matcher.match(annotation, stream, getParent());
       }
-    }
+    } 
     List<AnnotationFS> textsMatched = new ArrayList<AnnotationFS>(1);
     if (base) {
       for (AbstractRutaCondition condition : conditions) {

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java?rev=1565285&r1=1565284&r2=1565285&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/ImportStatementsTest.java Thu Feb  6 14:43:55 2014
@@ -19,6 +19,14 @@
 
 package org.apache.uima.ruta;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
 import org.apache.uima.analysis_engine.AnalysisEngine;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
@@ -33,14 +41,6 @@ import org.apache.uima.ruta.engine.RutaE
 import org.apache.uima.util.InvalidXMLException;
 import org.junit.Test;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 /**
  * Test various import statements syntaxes (see UIMA-3303).
  */

Added: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/OptionalDisjunctiveBeforeAnchoringTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/OptionalDisjunctiveBeforeAnchoringTest.java?rev=1565285&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/OptionalDisjunctiveBeforeAnchoringTest.java (added)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/OptionalDisjunctiveBeforeAnchoringTest.java Thu Feb  6 14:43:55 2014
@@ -0,0 +1,77 @@
+/*
+ * 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;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.FSIterator;
+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.junit.Test;
+
+public class OptionalDisjunctiveBeforeAnchoringTest {
+
+  @Test
+  public void test() {
+    String document = "0.3-0.7";
+    String script = "NUM {-PARTOF(T1)} ((COMMA | PERIOD) NUM)? {->MARK(T1,1,2)};";
+    script +="((T1? (\"<\" | \">\" | \"=\" | \"-\" | \"+\") )?  @T1) {->T2};\n";
+    script +="T2{-PARTOFNEQ(T2)->T3};\n";
+    CAS cas = null;
+    try {
+      cas = RutaTestUtils.getCAS(document);
+      Ruta.apply(cas, script);
+    } catch (Exception e) {
+      e.printStackTrace();
+    }
+
+    Type t = null;
+    AnnotationIndex<AnnotationFS> ai = null;
+    FSIterator<AnnotationFS> iterator = null;
+
+    t = RutaTestUtils.getTestType(cas, 1);
+    ai = cas.getAnnotationIndex(t);
+    iterator = ai.iterator();
+    assertEquals(2, ai.size());
+    assertEquals("0.3", iterator.next().getCoveredText());
+    assertEquals("0.7", iterator.next().getCoveredText());
+
+    t = RutaTestUtils.getTestType(cas, 2);
+    ai = cas.getAnnotationIndex(t);
+    iterator = ai.iterator();
+    assertEquals(2, ai.size());
+    assertEquals("0.3-0.7", iterator.next().getCoveredText());
+    assertEquals("0.3", iterator.next().getCoveredText());
+    
+    t = RutaTestUtils.getTestType(cas, 3);
+    ai = cas.getAnnotationIndex(t);
+    iterator = ai.iterator();
+    assertEquals(1, ai.size());
+    assertEquals("0.3-0.7", iterator.next().getCoveredText());
+    
+    if (cas != null) {
+      cas.release();
+    }
+
+  }
+}

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