Author: pkluegl
Date: Thu Aug 25 07:29:58 2016
New Revision: 1757618

URL: http://svn.apache.org/viewvc?rev=1757618&view=rev
Log:
UIMA-5074
- allow macro definitions in parent environments
- added tests

Modified:
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
    
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
    
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.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=1757618&r1=1757617&r2=1757618&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 Aug 25 07:29:58 2016
@@ -1014,19 +1014,43 @@ public class RutaEnvironment {
        }
 
        public boolean isMacroAction(String name) {
-               return macroActions.keySet().contains(name);
+               boolean isDefined = macroActions.keySet().contains(name);
+               if(isDefined) {
+                 return true;
+               } else if (owner != null && owner.getParent() != null) {
+                 return owner.getParent().getEnvironment().isMacroAction(name);
+               }
+    return false;
        }
 
        public boolean isMacroCondition(String name) {
-               return macroConditions.keySet().contains(name);
+         boolean isDefined = macroConditions.keySet().contains(name);
+    if(isDefined) {
+      return true;
+    } else if (owner != null && owner.getParent() != null) {
+      return owner.getParent().getEnvironment().isMacroCondition(name);
+    }
+    return false;
        }
 
        public Triple<Map<String, String>, List<AbstractRutaAction>, 
Set<String>> getMacroAction(String name) {
-               return macroActions.get(name);
+         Triple<Map<String, String>, List<AbstractRutaAction>, Set<String>> 
definition = macroActions.get(name);
+         if(definition != null) {
+           return definition;
+         } else if (owner != null && owner.getParent() != null) {
+           return owner.getParent().getEnvironment().getMacroAction(name);
+         }
+               return null;
        }
 
        public Triple<Map<String, String>, List<AbstractRutaCondition>, 
Set<String>> getMacroCondition(String name) {
-               return macroConditions.get(name);
+    Triple<Map<String, String>, List<AbstractRutaCondition>, Set<String>> 
definition = macroConditions.get(name);
+    if(definition != null) {
+      return definition;
+    } else if (owner != null && owner.getParent() != null) {
+      return owner.getParent().getEnvironment().getMacroCondition(name);
+    }
+    return null;
        }
 
        public void addAliasVariable(String name, String var) {

Modified: 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java?rev=1757618&r1=1757617&r2=1757618&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
 Thu Aug 25 07:29:58 2016
@@ -178,4 +178,36 @@ public class ForEachBlockTest {
     cas.release();
   }
 
+
+  @Test
+  public void testComposed() throws Exception {
+    String script = "NUM{-> T1};";
+    script += "FOREACH(t) T1{}{\n";
+    script += "(t (SW NUM)* (SPECIAL NUM)?{-PARTOF(T2)}){->T2};";
+    script += "}";
+
+    CAS cas = RutaTestUtils.getCAS("text 4x2^3 text");
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "4x2^3");
+    cas.release();
+  }
+  
+  
+  @Test
+  public void testConditionMacro() throws Exception {
+    String script = "CONDITION isSmall() = REGEXP(\".\");\n";
+    script += "FOREACH(num) NUM{} {\n";
+    script += "num{isSmall()-> T1};";
+    script += "}";
+
+    CAS cas = RutaTestUtils.getCAS("1 22 333");
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "1");
+    cas.release();
+  }
+  
+  
+  
 }

Modified: 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java?rev=1757618&r1=1757617&r2=1757618&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
 Thu Aug 25 07:29:58 2016
@@ -74,4 +74,18 @@ public class RutaScriptBlockTest {
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "text", "stuff");
   }
 
+  @Test
+  public void testConditionMacro() throws Exception {
+    String script = "CONDITION isSmall() = REGEXP(\".\");\n";
+    script += "BLOCK(num) NUM{} {\n";
+    script += "Document{isSmall()-> T1};";
+    script += "}";
+
+    CAS cas = RutaTestUtils.getCAS("1 22 333");
+    Ruta.apply(cas, script);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "1");
+    cas.release();
+  }
+  
 }


Reply via email to