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