Merge branch 'UIMA-6258-Action-FILL-only-considers-first-annotation-of-given-type'
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
index ff6d32f..9a1eb27 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
@@ -76,8 +76,9 @@
           }

         }

       }

-      if (!list.isEmpty()) {

-        AnnotationFS annotationFS = list.get(0);

+

+      for (AnnotationFS annotationFS : list) {

+

         stream.getCas().removeFsFromIndexes(annotationFS);

         context.setAnnotation(matchedAnnotation);

         stream.assignFeatureValues(annotationFS, features, context);

diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
index a28d778..0be768a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
@@ -21,6 +21,8 @@
 

 import static org.junit.Assert.assertEquals;

 

+import java.util.ArrayList;

+import java.util.List;

 import java.util.Map;

 import java.util.TreeMap;

 

@@ -30,27 +32,23 @@
 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.RutaEngine;

 import org.apache.uima.ruta.engine.RutaTestUtils;

+import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;

 import org.junit.Test;

 

 public class FillTest {

 

   @Test

-  public void test() {

+  public void test() throws Exception {

     String name = this.getClass().getSimpleName();

     String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/");

     Map<String, String> complexTypes = new TreeMap<String, String>();

     String type = "org.apache.uima.LanguageStorage";

     complexTypes.put(type, CAS.TYPE_NAME_DOCUMENT_ANNOTATION);

-    CAS cas = null;

-    try {

-      cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/" + name

-              + ".txt", 50, false, false, complexTypes, null);

-    } catch (Exception e) {

-      e.printStackTrace();

-      assert (false);

-    }

+    CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,

+            namespace + "/" + name + ".txt", 50, false, false, complexTypes, null);

     Type t = null;

     AnnotationIndex<AnnotationFS> ai = null;

     FSIterator<AnnotationFS> iterator = null;

@@ -63,7 +61,27 @@
     Feature featureByBaseName = t.getFeatureByBaseName("language");

     String stringValue = afs.getStringValue(featureByBaseName);

     assertEquals("en", stringValue);

-   

-    cas.release();

+  }

+

+  @Test

+  public void testOverlapping() throws Exception {

+

+    String script = "(CW W){-> Struct, Struct};\n";

+    script += "CW{-> FILL(Struct, \"s\" = \"a\")};\n";

+    script += "Struct.s==\"a\"{-> T1};\n";

+

+    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);

+    list.add(new TestFeature("s", "", "uima.cas.String"));

+

+    CAS cas = RutaTestUtils.getCAS("Some text.", typeMap, featureMap);

+    Ruta.apply(cas, script);

+

+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some text");

   }

 }