Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/CreateTest.java Wed Jan 16 11:45:02 2019 @@ -22,11 +22,14 @@ package org.apache.uima.ruta.action; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.Feature; @@ -34,16 +37,21 @@ import org.apache.uima.cas.FeatureStruct import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.cas.text.AnnotationIndex; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; 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.apache.uima.util.InvalidXMLException; import org.junit.Test; public class CreateTest { @Test - public void test() { + public void test() throws AnalysisEngineProcessException, InvalidXMLException, + ResourceInitializationException, ResourceConfigurationException, URISyntaxException, + IOException { String name = this.getClass().getSimpleName(); String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/"); @@ -61,15 +69,9 @@ public class CreateTest { String fn3 = "count"; list.add(new TestFeature(fn3, "", "uima.cas.Integer")); - CAS cas = null; - try { - cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, - namespace + "/" + name + ".txt", 50, false, false, complexTypes, features, namespace - + "/"); - } catch (Exception e) { - e.printStackTrace(); - assert (false); - } + CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, + namespace + "/" + name + ".txt", 50, false, false, complexTypes, features, + namespace + "/"); Type t = null; AnnotationIndex<AnnotationFS> ai = null; FSIterator<AnnotationFS> iterator = null;
Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/ImplicitActionTest.java Wed Jan 16 11:45:02 2019 @@ -42,10 +42,12 @@ import org.junit.Test; public class ImplicitActionTest { @Test - public void test() { + public void test() throws AnalysisEngineProcessException, InvalidXMLException, + ResourceInitializationException, ResourceConfigurationException, URISyntaxException, + IOException { String name = this.getClass().getSimpleName(); String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/"); - CAS cas = null; + Map<String, String> complexTypes = new HashMap<String, String>(); Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); String typeNameA = "org.apache.uima.ruta.FeatureMatchTest.A"; @@ -77,25 +79,23 @@ public class ImplicitActionTest { String fnds = "ds"; listD.add(new TestFeature(fnds, "", "uima.cas.String")); - try { - cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, - FeatureMatch1Test.class.getName().replaceAll("\\.", "/") +".txt", 50, false, false, complexTypes, features, null); - } catch (Exception e) { - e.printStackTrace(); - assert (false); - } - - RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "Peter Kluegl", "Joern Kottmann", "Marshall Schor"); + CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, + FeatureMatch1Test.class.getName().replaceAll("\\.", "/") + ".txt", 50, false, false, + complexTypes, features, null); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "Peter Kluegl", "Joern Kottmann", + "Marshall Schor"); RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "Peter", "Joern", "Marshall"); RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter", "Joern", "Marshall"); RutaTestUtils.assertAnnotationsEquals(cas, 4, 3, "Peter", "Joern", "Marshall"); - + cas.release(); } - - + @Test - public void testChangeOffsets() throws ResourceInitializationException, InvalidXMLException, IOException, AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { + public void testChangeOffsets() + throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { String text = "text 2 3 x 4 1"; String script = ""; script += "NUM{->T1};"; @@ -106,7 +106,5 @@ public class ImplicitActionTest { RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "4 1"); cas.release(); } - - - + } Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/LabelAtActionTest.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,57 @@ +/* + * 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.action; + +import java.io.IOException; +import java.net.URISyntaxException; + +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; +import org.apache.uima.cas.CAS; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; +import org.apache.uima.ruta.engine.Ruta; +import org.apache.uima.ruta.engine.RutaTestUtils; +import org.apache.uima.util.InvalidXMLException; +import org.junit.Test; + +public class LabelAtActionTest { + + @Test + public void test() throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { + + String document = "This is a test."; + String script = "CW{-> t:T1}->{t{->T2};};"; + script += "SW.ct == \"is\"{-> t:MARK(T3)}->{t{->T4};};"; + script += "SW.ct == \"a\"{-> t:CREATE(T5)}->{t{->T6};};"; + script += "SW.ct == \"test\"{-> t:GATHER(T7)}->{t{->T8};};"; + script += "Document{-> t:MARKFIRST(T9)}->{t{->T10};};"; + script += "Document{-> t:MARKLAST(T11)}->{t{->T12};};"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "This"); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 1, "is"); + RutaTestUtils.assertAnnotationsEquals(cas, 6, 1, "a"); + RutaTestUtils.assertAnnotationsEquals(cas, 8, 1, "test"); + + } + +} Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/action/SplitTest.java Wed Jan 16 11:45:02 2019 @@ -341,8 +341,8 @@ public class SplitTest { @Test public void testBoundary() throws Exception { String document = "Some text. More text , with 1 , and more. even more text."; - String script = "PERIOD #{-> T1} PERIOD;"; - script += "#{-> T1} PERIOD;"; + String script = "PERIOD (# PERIOD){-> T1};"; + script += "(# PERIOD){-> T1};"; script += "T1{-> SPLIT(PERIOD, true, false, true)};"; CAS cas = RutaTestUtils.getCAS(document); @@ -366,9 +366,7 @@ public class SplitTest { next = iterator.next(); assertEquals("even more text.", next.getCoveredText()); - if (cas != null) { - cas.release(); - } + cas.release(); } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java Wed Jan 16 11:45:02 2019 @@ -72,5 +72,23 @@ public class ContainsTest { } + @Test + public void testContainsOverlappingAnnotations() throws ResourceInitializationException, + InvalidXMLException, IOException, AnalysisEngineProcessException, + ResourceConfigurationException, URISyntaxException { + String document = "1 2 3 4 5 6 7 8"; + + String script = "(\"1\" # \"5\") {-> T1};"; + script += "(\"3\" # \"8\") {-> T1};"; + script += "(\"3\" # \"4\") {-> T1};"; + script += "(\"3\" # \"5\") {-> T2};"; + script += "T2{CONTAINS(T1,1,1)-> T3};"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 3, 1); + + } } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/CountTest.java Wed Jan 16 11:45:02 2019 @@ -19,8 +19,16 @@ package org.apache.uima.ruta.condition; +import java.io.IOException; +import java.net.URISyntaxException; + +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; +import org.apache.uima.ruta.engine.Ruta; import org.apache.uima.ruta.engine.RutaTestUtils; +import org.apache.uima.util.InvalidXMLException; import org.junit.Test; public class CountTest { @@ -37,4 +45,18 @@ public class CountTest { cas.release(); } + + @Test + public void testCountWithPeriodPostfix() throws ResourceInitializationException, InvalidXMLException, + IOException, AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { + + String document = "Some text."; + String script = "(CW SW) {-> T1};"; + script +="INT i = 0;"; + script +="T1{COUNT(PERIOD, i)};"; + script +="Document{(i>0)-> T2};"; + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + } } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/FeatureTest.java Wed Jan 16 11:45:02 2019 @@ -19,28 +19,36 @@ package org.apache.uima.ruta.condition; +import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.ruta.engine.RutaEngine; import org.apache.uima.ruta.engine.RutaTestUtils; import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature; +import org.apache.uima.util.InvalidXMLException; import org.junit.Test; public class FeatureTest { @Test - public void test() { + public void test() throws AnalysisEngineProcessException, InvalidXMLException, + ResourceInitializationException, ResourceConfigurationException, URISyntaxException, + IOException { String name = this.getClass().getSimpleName(); String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/"); - + Map<String, String> complexTypes = new TreeMap<String, String>(); String typeName = "org.apache.uima.FS"; complexTypes.put(typeName, "uima.tcas.Annotation"); - + Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>(); features.put(typeName, list); @@ -52,15 +60,10 @@ public class FeatureTest { list.add(new TestFeature(fn3, "", "uima.cas.Integer")); String fn4 = "boolean"; list.add(new TestFeature(fn4, "", "uima.cas.Boolean")); - - CAS cas = null; - try { - cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/" + name - + ".txt", 50, false, false, complexTypes, features, namespace + "/"); - } catch (Exception e) { - e.printStackTrace(); - assert (false); - } + + CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, + namespace + "/" + name + ".txt", 50, false, false, complexTypes, features, + namespace + "/"); RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Testing FEATURE condition."); RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Testing FEATURE condition."); Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition1Test.java Wed Jan 16 11:45:02 2019 @@ -19,26 +19,34 @@ package org.apache.uima.ruta.condition; +import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; import org.apache.uima.ruta.FeatureMatch1Test; import org.apache.uima.ruta.engine.RutaEngine; import org.apache.uima.ruta.engine.RutaTestUtils; import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature; +import org.apache.uima.util.InvalidXMLException; import org.junit.Test; public class ImplicitCondition1Test { @Test - public void test() { + public void test() throws AnalysisEngineProcessException, InvalidXMLException, + ResourceInitializationException, ResourceConfigurationException, URISyntaxException, + IOException { String name = this.getClass().getSimpleName(); String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/"); - CAS cas = null; + Map<String, String> complexTypes = new HashMap<String, String>(); Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); String typeNameA = "org.apache.uima.ruta.FeatureMatchTest.A"; @@ -70,19 +78,18 @@ public class ImplicitCondition1Test { String fnds = "ds"; listD.add(new TestFeature(fnds, "", "uima.cas.String")); - try { - cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, - FeatureMatch1Test.class.getName().replaceAll("\\.", "/") +".txt", 50, false, false, complexTypes, features, null); - } catch (Exception e) { - e.printStackTrace(); - assert (false); - } + CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, + FeatureMatch1Test.class.getName().replaceAll("\\.", "/") + ".txt", 50, false, false, + complexTypes, features, null); RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Marshall Schor"); - RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "Peter Kluegl", "Joern Kottmann", "Marshall Schor"); - RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter Kluegl", "Joern Kottmann", "Marshall Schor"); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "Peter Kluegl", "Joern Kottmann", + "Marshall Schor"); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "Peter Kluegl", "Joern Kottmann", + "Marshall Schor"); RutaTestUtils.assertAnnotationsEquals(cas, 4, 1, "Joern Kottmann"); - RutaTestUtils.assertAnnotationsEquals(cas, 5, 3, "Peter Kluegl", "Joern Kottmann", "Marshall Schor"); + RutaTestUtils.assertAnnotationsEquals(cas, 5, 3, "Peter Kluegl", "Joern Kottmann", + "Marshall Schor"); cas.release(); } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java Wed Jan 16 11:45:02 2019 @@ -54,15 +54,17 @@ public class ImplicitCondition2Test { RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "Peter", "Kluegl", "Joern"); RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "Peter", "Kluegl"); RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Peter"); - RutaTestUtils.assertAnnotationsEquals(cas, 4, 5, "Kluegl", "Joern", "Kottmann", "Marshall", "Schor"); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 5, "Kluegl", "Joern", "Kottmann", "Marshall", + "Schor"); RutaTestUtils.assertAnnotationsEquals(cas, 5, 3, "Kottmann", "Marshall", "Schor"); RutaTestUtils.assertAnnotationsEquals(cas, 6, 2, "Marshall", "Schor"); cas.release(); } - + @Test - public void testStringCompare() throws ResourceInitializationException, InvalidXMLException, IOException, AnalysisEngineProcessException, CASException { + public void testStringCompare() throws ResourceInitializationException, InvalidXMLException, + IOException, AnalysisEngineProcessException, CASException { String document = "a b. a b."; CAS cas = RutaTestUtils.getCAS(document); Assert.assertTrue(Ruta.matches(cas.getJCas(), "(w:W # W{W.ct==w.ct}){->T1};")); @@ -70,21 +72,21 @@ public class ImplicitCondition2Test { RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "a b. a", "b. a b"); RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "a b", "a b"); } - + @Test - public void testStringCompareNull() throws ResourceInitializationException, InvalidXMLException, IOException, AnalysisEngineProcessException, CASException { + public void testStringCompareNull() throws ResourceInitializationException, InvalidXMLException, + IOException, AnalysisEngineProcessException, CASException { String document = "a b. a b."; CAS cas = RutaTestUtils.getCAS(document); - + String rules = "STRING s2;\n"; rules += "Document{s2 == \"\" -> T10};\n"; rules += "Document{s2 == null -> T11};\n"; Assert.assertTrue(Ruta.matches(cas.getJCas(), rules)); - - RutaTestUtils.assertAnnotationsEquals(cas, 10, 1, document); - RutaTestUtils.assertAnnotationsEquals(cas, 11, 0); - + + RutaTestUtils.assertAnnotationsEquals(cas, 10, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 11, 1, document); + } - - + } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/descriptor/GenerateDescriptorTest.java Wed Jan 16 11:45:02 2019 @@ -19,10 +19,6 @@ package org.apache.uima.ruta.descriptor; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; @@ -47,10 +43,10 @@ import org.apache.uima.resource.metadata import org.apache.uima.ruta.engine.HtmlAnnotator; import org.apache.uima.ruta.engine.RutaEngine; import org.apache.uima.util.InvalidXMLException; +import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; - public class GenerateDescriptorTest { private static URL basicAEUrl; @@ -59,29 +55,34 @@ public class GenerateDescriptorTest { @BeforeClass public static void setUpClass() { - basicAEUrl = GenerateDescriptorTest.class.getClassLoader().getResource("BasicEngine.xml"); - if (basicAEUrl == null) { - basicAEUrl = HtmlAnnotator.class.getClassLoader().getResource( - "org/apache/uima/ruta/engine/BasicEngine.xml"); + + GenerateDescriptorTest.basicAEUrl = GenerateDescriptorTest.class.getClassLoader() + .getResource("BasicEngine.xml"); + if (GenerateDescriptorTest.basicAEUrl == null) { + GenerateDescriptorTest.basicAEUrl = HtmlAnnotator.class.getClassLoader() + .getResource("org/apache/uima/ruta/engine/BasicEngine.xml"); } - basicTSUrl = GenerateDescriptorTest.class.getClassLoader().getResource("BasicTypeSystem.xml"); - if (basicTSUrl == null) { - basicTSUrl = HtmlAnnotator.class.getClassLoader().getResource( - "org/apache/uima/ruta/engine/BasicTypeSystem.xml"); + GenerateDescriptorTest.basicTSUrl = GenerateDescriptorTest.class.getClassLoader() + .getResource("BasicTypeSystem.xml"); + if (GenerateDescriptorTest.basicTSUrl == null) { + GenerateDescriptorTest.basicTSUrl = HtmlAnnotator.class.getClassLoader() + .getResource("org/apache/uima/ruta/engine/BasicTypeSystem.xml"); } } @Test - public void testCreateAnalysisEngineDescription() throws InvalidXMLException, IOException, - RecognitionException, URISyntaxException { + public void testCreateAnalysisEngineDescription() + throws InvalidXMLException, IOException, RecognitionException, URISyntaxException { + String script = ""; script += "PACKAGE test.package;\n"; script += "ENGINE org.apache.uima.ruta.engine.HtmlAnnotator;\n"; script += "UIMAFIT org.apache.uima.ruta.engine.PlainTextAnnotator;\n"; script += "SCRIPT org.apache.uiima.ruta.Additional;\n"; - RutaDescriptorFactory rdf = new RutaDescriptorFactory(basicTSUrl, basicAEUrl); + RutaDescriptorFactory rdf = new RutaDescriptorFactory(GenerateDescriptorTest.basicTSUrl, + GenerateDescriptorTest.basicAEUrl); RutaDescriptorInformation descriptorInformation = rdf.parseDescriptorInformation(script); RutaBuildOptions options = new RutaBuildOptions(); String typeSystemOutput = "target/temp/testCreateAnalysisEngineDescription_TypeSystem.xml"; @@ -94,26 +95,31 @@ public class GenerateDescriptorTest { String mainScript = (String) cps.getParameterValue(RutaEngine.PARAM_MAIN_SCRIPT); String rules = (String) cps.getParameterValue(RutaEngine.PARAM_RULES); - assertNull("mainScript param should be null", mainScript); - assertNotNull("rules param should not null", rules); - - String[] additionalEngines = (String[]) cps.getParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINES); - assertNotNull(additionalEngines); - assertEquals("org.apache.uima.ruta.engine.HtmlAnnotator", additionalEngines[0]); - - String[] additionalUimafitEngines = (String[]) cps.getParameterValue(RutaEngine.PARAM_ADDITIONAL_UIMAFIT_ENGINES); - assertNotNull(additionalUimafitEngines); - assertEquals("org.apache.uima.ruta.engine.PlainTextAnnotator", additionalUimafitEngines[0]); - - String[] additionalScripts = (String[]) cps.getParameterValue(RutaEngine.PARAM_ADDITIONAL_SCRIPTS); - assertNotNull(additionalScripts); - assertEquals("org.apache.uiima.ruta.Additional", additionalScripts[0]); - + Assert.assertNull("mainScript param should be null", mainScript); + Assert.assertNotNull("rules param should not null", rules); + + String[] additionalEngines = (String[]) cps + .getParameterValue(RutaEngine.PARAM_ADDITIONAL_ENGINES); + Assert.assertNotNull(additionalEngines); + Assert.assertEquals("org.apache.uima.ruta.engine.HtmlAnnotator", additionalEngines[0]); + + String[] additionalUimafitEngines = (String[]) cps + .getParameterValue(RutaEngine.PARAM_ADDITIONAL_UIMAFIT_ENGINES); + Assert.assertNotNull(additionalUimafitEngines); + Assert.assertEquals("org.apache.uima.ruta.engine.PlainTextAnnotator", + additionalUimafitEngines[0]); + + String[] additionalScripts = (String[]) cps + .getParameterValue(RutaEngine.PARAM_ADDITIONAL_SCRIPTS); + Assert.assertNotNull(additionalScripts); + Assert.assertEquals("org.apache.uiima.ruta.Additional", additionalScripts[0]); + } @Test public void testCreateTypeSystemDescription() throws URISyntaxException, IOException, RecognitionException, InvalidXMLException, ResourceInitializationException { + String script = ""; script += "PACKAGE test.package;\n"; script += "TYPESYSTEM org.apache.uima.ruta.engine.HtmlTypeSystem;\n"; @@ -124,7 +130,8 @@ public class GenerateDescriptorTest { script += "DECLARE InnerType;\n"; script += "}\n"; - RutaDescriptorFactory rdf = new RutaDescriptorFactory(basicTSUrl, basicAEUrl); + RutaDescriptorFactory rdf = new RutaDescriptorFactory(GenerateDescriptorTest.basicTSUrl, + GenerateDescriptorTest.basicAEUrl); RutaDescriptorInformation descriptorInformation = rdf.parseDescriptorInformation(script); RutaBuildOptions options = new RutaBuildOptions(); String typeSystemOutput = "target/temp/testCreateTypeSystemDescription_TypeSystem.xml"; @@ -135,67 +142,97 @@ public class GenerateDescriptorTest { tsd.resolveImports(rm); TypeDescription tagType = tsd.getType("org.apache.uima.ruta.type.html.TAG"); - assertNotNull(tagType); + Assert.assertNotNull(tagType); TypeDescription simpleType = tsd.getType("test.package.Anonymous.SimpleType"); - assertNotNull(simpleType); - assertEquals("uima.tcas.Annotation", simpleType.getSupertypeName()); + Assert.assertNotNull(simpleType); + Assert.assertEquals("uima.tcas.Annotation", simpleType.getSupertypeName()); TypeDescription complexType = tsd.getType("test.package.Anonymous.ComplexType"); - assertNotNull(complexType); - assertEquals("Type defined in test.package.Anonymous", complexType.getDescription()); - assertEquals("test.package.Anonymous.SimpleType", complexType.getSupertypeName()); + Assert.assertNotNull(complexType); + Assert.assertEquals("Type defined in test.package.Anonymous", complexType.getDescription()); + Assert.assertEquals("test.package.Anonymous.SimpleType", complexType.getSupertypeName()); FeatureDescription[] features = complexType.getFeatures(); Map<String, String> featureMap = new HashMap<>(); featureMap.put("fs", "test.package.Anonymous.SimpleType"); featureMap.put("s", "uima.cas.String"); featureMap.put("b", "uima.cas.Boolean"); featureMap.put("i", "uima.cas.Integer"); - assertEquals(4, features.length); + Assert.assertEquals(4, features.length); for (FeatureDescription each : features) { String f = featureMap.get(each.getName()); - assertNotNull(f); + Assert.assertNotNull(f); } - + TypeDescription complexType2 = tsd.getType("test.package.Anonymous.ComplexType2"); - assertNotNull(complexType2); - assertEquals("Type defined in test.package.Anonymous", complexType2.getDescription()); - assertEquals("uima.tcas.Annotation", complexType2.getSupertypeName()); + Assert.assertNotNull(complexType2); + Assert.assertEquals("Type defined in test.package.Anonymous", complexType2.getDescription()); + Assert.assertEquals("uima.tcas.Annotation", complexType2.getSupertypeName()); FeatureDescription[] features2 = complexType2.getFeatures(); Map<String, String> featureMap2 = new HashMap<>(); featureMap2.put("fs", "test.package.Anonymous.SimpleType"); featureMap2.put("s", "uima.cas.String"); featureMap2.put("b", "uima.cas.Boolean"); featureMap2.put("i", "uima.cas.Integer"); - assertEquals(4, features2.length); + Assert.assertEquals(4, features2.length); for (FeatureDescription each : features2) { String f = featureMap2.get(each.getName()); - assertNotNull(f); + Assert.assertNotNull(f); } TypeDescription innerType = tsd.getType("test.package.Anonymous.sub.InnerType"); - assertNotNull(innerType); - assertEquals("uima.tcas.Annotation", innerType.getSupertypeName()); + Assert.assertNotNull(innerType); + Assert.assertEquals("uima.tcas.Annotation", innerType.getSupertypeName()); + + } + + @Test + public void testRuleScriptName() throws URISyntaxException, IOException, RecognitionException, + InvalidXMLException, ResourceInitializationException { + + String script = ""; + script += "PACKAGE test.package;\n"; + script += "DECLARE SimpleType;\n"; + + RutaDescriptorFactory rdf = new RutaDescriptorFactory(GenerateDescriptorTest.basicTSUrl, + GenerateDescriptorTest.basicAEUrl); + RutaBuildOptions options = new RutaBuildOptions(); + RutaDescriptorInformation descriptorInformation = rdf.parseDescriptorInformation(script, null, + options); + String typeSystemOutput = "target/temp/testRuleScriptName_TypeSystem.xml"; + ClassLoader classLoader = GenerateDescriptorTest.class.getClassLoader(); + TypeSystemDescription tsd = rdf.createTypeSystemDescription(typeSystemOutput, + descriptorInformation, options, classLoader); + ResourceManager rm = new ResourceManager_impl(classLoader); + tsd.resolveImports(rm); + + TypeDescription tagType = tsd.getType("test.package.SimpleType"); + Assert.assertNotNull(tagType); } @Test public void testScriptOnly() throws Exception { + String script = "DECLARE Type; CW{-> Type};"; - - RutaDescriptorFactory rdf = new RutaDescriptorFactory(basicTSUrl, basicAEUrl); + + RutaDescriptorFactory rdf = new RutaDescriptorFactory(GenerateDescriptorTest.basicTSUrl, + GenerateDescriptorTest.basicAEUrl); RutaDescriptorInformation descriptorInformation = rdf.parseDescriptorInformation(script); RutaBuildOptions options = new RutaBuildOptions(); - Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = rdf.createDescriptions(null, null, descriptorInformation, options, null, null, null); - assertNotNull("Typesystem does not contain declaredtype!", descriptions.getValue().getType("Anonymous.Type")); - assertNotNull("AE typesystem does not contain declared type!", descriptions.getKey().getAnalysisEngineMetaData().getTypeSystem().getType("Anonymous.Type")); + Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = rdf + .createDescriptions(null, null, descriptorInformation, options, null, null, null); + Assert.assertNotNull("Typesystem does not contain declaredtype!", + descriptions.getValue().getType("Anonymous.Type")); + Assert.assertNotNull("AE typesystem does not contain declared type!", descriptions.getKey() + .getAnalysisEngineMetaData().getTypeSystem().getType("Anonymous.Type")); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(descriptions.getKey()); CAS cas = ae.newCAS(); cas.setDocumentText("This is a test."); ae.process(cas); Type type = cas.getTypeSystem().getType("Anonymous.Type"); - assertEquals(1, CasUtil.select(cas, type).size()); + Assert.assertEquals(1, CasUtil.select(cas, type).size()); cas.release(); } - + } Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummyAnnotator.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummyAnnotator.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummyAnnotator.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummyAnnotator.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,32 @@ +/* + * 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.engine; + +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; +import org.apache.uima.fit.component.JCasAnnotator_ImplBase; +import org.apache.uima.jcas.JCas; + +public class DummyAnnotator extends JCasAnnotator_ImplBase { + + @Override + public void process(JCas jcas) throws AnalysisEngineProcessException { + + } + +} Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/DummySeeder.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,37 @@ +/* + * 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.engine; + +import org.apache.uima.cas.CAS; +import org.apache.uima.cas.Type; +import org.apache.uima.cas.text.AnnotationFS; +import org.apache.uima.ruta.seed.RutaAnnotationSeeder; +import org.apache.uima.ruta.seed.TextSeeder; + +public class DummySeeder implements RutaAnnotationSeeder{ + + @Override + public Type seed(String text, CAS cas) { + Type type = cas.getTypeSystem().getType(TextSeeder.seedType); + AnnotationFS annotation = cas.createAnnotation(type, 0, text.length()); + cas.addFsToIndexes(annotation); + return type; + } + +} Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/MultipleSeedersTest.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,50 @@ +/* + * 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.engine; + +import org.apache.uima.analysis_engine.AnalysisEngine; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; +import org.apache.uima.fit.factory.AnalysisEngineFactory; +import org.apache.uima.fit.util.JCasUtil; +import org.apache.uima.jcas.JCas; +import org.apache.uima.resource.ResourceInitializationException; +import org.apache.uima.ruta.type.ALL; +import org.apache.uima.ruta.type.TruePositive; +import org.junit.Assert; +import org.junit.Test; + +public class MultipleSeedersTest { + + @Test + public void test() throws ResourceInitializationException, AnalysisEngineProcessException { + + AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, + RutaEngine.PARAM_RULES, "TokenSeed{-> TruePositive};", + RutaEngine.PARAM_SEEDERS, new String[] {DummySeeder.class.getName(),DummySeeder.class.getName()}); + + JCas jcas = ae.newJCas(); + jcas.setDocumentText("Dummy text."); + ae.process(jcas); + + Assert.assertEquals(2, JCasUtil.select(jcas, TruePositive.class).size()); + Assert.assertEquals(0, JCasUtil.select(jcas, ALL.class).size()); + + } + +} Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java Wed Jan 16 11:45:02 2019 @@ -92,10 +92,10 @@ public class ParamVarTest { Ruta.apply(cas, script, params); RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some", "text"); - + cas.release(); } - + @Test(expected = AnalysisEngineProcessException.class) public void testWithStrictImport() throws Exception { String document = "Some text."; @@ -109,15 +109,44 @@ public class ParamVarTest { Map<String, Object> params = new HashMap<String, Object>(); params.put(RutaEngine.PARAM_STRICT_IMPORTS, true); params.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "t1", "t2", "tl" }); - params.put(RutaEngine.PARAM_VAR_VALUES, new String[] {"org.apache.uima.T1", "org.apache.uima.T2", - "org.apache.uima.T1,org.apache.uima.T2" }); + params.put(RutaEngine.PARAM_VAR_VALUES, new String[] { "org.apache.uima.T1", + "org.apache.uima.T2", "org.apache.uima.T1,org.apache.uima.T2" }); CAS cas = RutaTestUtils.getCAS(document); Ruta.apply(cas, script, params); RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "Some", "text"); - + cas.release(); } - + + @Test + public void testKnownVariableValue() throws Exception { + String document = "Some text."; + String script = ""; + script += "TYPE tvar;"; + script += "tvar{ -> T1};"; + Map<String, Object> params = new HashMap<String, Object>(); + params.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "tvar" }); + params.put(RutaEngine.PARAM_VAR_VALUES, new String[] { "some.UnknownType" }); + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script, params); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + } + + @Test + public void testMissingVariableValue() throws Exception { + String document = "Some text."; + String script = ""; + script += "TYPE tvar;"; + script += "tvar{ -> T1};"; + Map<String, Object> params = new HashMap<String, Object>(); + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script, params); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + } } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/RutaEngineTest.java Wed Jan 16 11:45:02 2019 @@ -24,11 +24,18 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang3.reflect.FieldUtils; import org.apache.uima.analysis_engine.AnalysisEngine; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.CAS; import org.apache.uima.fit.factory.AnalysisEngineFactory; +import org.apache.uima.fit.internal.ResourceManagerFactory; +import org.apache.uima.fit.internal.ResourceManagerFactory.ResourceManagerCreator; import org.apache.uima.jcas.JCas; +import org.apache.uima.resource.ResourceInitializationException; +import org.apache.uima.resource.ResourceManager; +import org.apache.uima.ruta.RutaProcessRuntimeException; import org.apache.uima.ruta.TypeUsageInformation; import org.junit.Assert; import org.junit.Test; @@ -49,8 +56,8 @@ public class RutaEngineTest { AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_VAR_NAMES, new String[] { "typeVar" }, RutaEngine.PARAM_VAR_VALUES, new String[] { "TruePositive" }, RutaEngine.PARAM_RULES, script, - RutaEngine.PARAM_INDEX_ONLY_MENTIONED_TYPES, true, RutaEngine.PARAM_INDEX_ADDITONALLY, - new String[] { "COMMA" }); + RutaEngine.PARAM_INDEX_ONLY_MENTIONED_TYPES, Boolean.valueOf(true), + RutaEngine.PARAM_INDEX_ADDITONALLY, new String[] { "COMMA" }); RutaEngine engine = (RutaEngine) FieldUtils.readField(ae, "mAnalysisComponent", true); TypeUsageInformation typeUsageInformation = (TypeUsageInformation) FieldUtils.readField(engine, @@ -82,4 +89,94 @@ public class RutaEngineTest { } + @Test(expected = NotImplementedException.class) + public void testInferenceVisitors() throws Throwable { + + String document = "Some text."; + String script = "CW;"; + + AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES, + script, RutaEngine.PARAM_INFERENCE_VISITORS, + new String[] { TestRutaInferenceVisitor.class.getName() }); + + CAS cas = RutaTestUtils.getCAS(document); + + try { + ae.process(cas); + } catch (AnalysisEngineProcessException e) { + Throwable cause = e.getCause(); + throw cause; + } + } + + @Test + public void testMaxRuleMatches() throws Throwable { + + String document = "This is some text."; + String script = "W;"; + + AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES, + script, RutaEngine.PARAM_MAX_RULE_MATCHES, Integer.valueOf(2)); + + CAS cas = RutaTestUtils.getCAS(document); + + try { + ae.process(cas); + } catch (AnalysisEngineProcessException e) { + Throwable cause = e.getCause(); + Assert.assertTrue(cause instanceof RutaProcessRuntimeException); + String message = cause.getMessage(); + Assert.assertTrue(message.startsWith("Rule exceeded the allowed amount of matches")); + return; + } + Assert.fail("expected RutaProcessRuntimeException"); + } + + @Test + public void testMaxRuleElementMatches() throws Throwable { + + String document = "This is some text."; + String script = "W+;"; + + AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES, + script, RutaEngine.PARAM_MAX_RULE_ELEMENT_MATCHES, Integer.valueOf(2)); + + CAS cas = RutaTestUtils.getCAS(document); + + try { + ae.process(cas); + } catch (AnalysisEngineProcessException e) { + Throwable cause = e.getCause(); + Assert.assertTrue(cause instanceof RutaProcessRuntimeException); + String message = cause.getMessage(); + Assert.assertTrue(message.startsWith("Rule element exceeded the allowed amount of matches")); + return; + } + Assert.fail("expected RutaProcessRuntimeException"); + } + + @Test + public void testResourceManagerWithUimaFITInEXEC() throws Throwable { + + final ResourceManager resourceManager = ResourceManagerFactory.newResourceManager(); + ResourceManagerFactory.setResourceManagerCreator(new ResourceManagerCreator() { + + @Override + public ResourceManager newResourceManager() throws ResourceInitializationException { + return resourceManager; + } + }); + + String document = "This is some text."; + String script = "UIMAFIT org.apache.uima.ruta.engine.DummyAnnotator;"; + script += "EXEC(DummyAnnotator);"; + + AnalysisEngine ae = AnalysisEngineFactory.createEngine(RutaEngine.class, RutaEngine.PARAM_RULES, + script, RutaEngine.PARAM_ADDITIONAL_UIMAFIT_ENGINES, + new String[] { DummyAnnotator.class.getName() }); + + CAS cas = RutaTestUtils.getCAS(document); + ae.process(cas); + } + } Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/TestRutaInferenceVisitor.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,55 @@ +/* + * 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.engine; + +import java.util.List; + +import org.apache.commons.lang.NotImplementedException; +import org.apache.uima.cas.text.AnnotationFS; +import org.apache.uima.ruta.RutaElement; +import org.apache.uima.ruta.RutaStream; +import org.apache.uima.ruta.ScriptApply; +import org.apache.uima.ruta.rule.AbstractRule; +import org.apache.uima.ruta.rule.AbstractRuleMatch; +import org.apache.uima.ruta.visitor.RutaInferenceVisitor; + +public class TestRutaInferenceVisitor implements RutaInferenceVisitor { + + @Override + public void beginVisit(RutaElement element, ScriptApply result) { + throw new NotImplementedException(); + } + + @Override + public void endVisit(RutaElement element, ScriptApply result) { + throw new NotImplementedException(); + } + + @Override + public void finished(RutaStream stream, List<RutaInferenceVisitor> visitors) { + throw new NotImplementedException(); + } + + @Override + public void annotationAdded(AnnotationFS annotation, + AbstractRuleMatch<? extends AbstractRule> creator) { + throw new NotImplementedException(); + } + +} Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ThreeStackedScriptsVariableResetTest.java Wed Jan 16 11:45:02 2019 @@ -52,25 +52,27 @@ public class ThreeStackedScriptsVariable RutaBuildOptions options = new RutaBuildOptions(); RutaDescriptorInformation rdi = factory .parseDescriptorInformation(new File(path + "script1.ruta"), options); - Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = factory.createDescriptions(null, Paths.get(path).toFile().getAbsolutePath(), rdi, options, new String[] { path }, new String[] { path }, null); + Pair<AnalysisEngineDescription, TypeSystemDescription> descriptions = factory + .createDescriptions(null, Paths.get(path).toFile().getAbsolutePath(), rdi, options, + new String[] { path }, new String[] { path }, null); AnalysisEngine ae = UIMAFramework.produceAnalysisEngine(descriptions.getKey()); JCas jcas = JCasFactory.createJCas(descriptions.getValue()); - + jcas.setDocumentText(input1); ae.process(jcas); checkFeatureValue(jcas); - + jcas.reset(); jcas.setDocumentText(input2); ae.process(jcas); checkFeatureValue(jcas); - + jcas.reset(); jcas.setDocumentText(input3); ae.process(jcas); checkFeatureValue(jcas); - + } private void checkFeatureValue(JCas jcas) { @@ -79,7 +81,7 @@ public class ThreeStackedScriptsVariable Feature feature = type.getFeatureByBaseName("value"); FeatureStructure fs = CasUtil.selectSingle(cas, type); String stringValue = fs.getStringValue(feature); - Assert.assertEquals("", stringValue); + Assert.assertNull(stringValue); } } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/AnnotationTypeExpressionTest.java Wed Jan 16 11:45:02 2019 @@ -38,7 +38,7 @@ public class AnnotationTypeExpressionTes String script = ""; script += "Document{-> CREATE(Struct1, \"as\" = COMMA)};\n"; script += "Struct1.as{-> T1};\n"; - + Map<String, String> complexTypes = new TreeMap<String, String>(); complexTypes.put("Struct1", "uima.tcas.Annotation"); complexTypes.put("Struct2", "uima.tcas.Annotation"); @@ -48,11 +48,27 @@ public class AnnotationTypeExpressionTes features.put("Struct2", list); list.add(new TestFeature("a", "", "uima.tcas.Annotation")); list.add(new TestFeature("as", "", "uima.cas.FSArray")); - + CAS cas = RutaTestUtils.getCAS(document, complexTypes, features); - Ruta.apply(cas, script); - + Ruta.apply(cas, script); + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); } + @Test + public void testTypeList() throws Exception { + String document = "This is a test."; + String script = "TYPELIST tl = {CW,PERIOD};\n"; + script += "tl{-> T1};\n"; + script += "SW tl{-> T2};\n"; + script += "tl{-> T3} @SW;\n"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "This", "."); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "."); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "This"); + } + } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationFeatureExpressionTest.java Wed Jan 16 11:45:02 2019 @@ -217,14 +217,14 @@ public class AnnotationFeatureExpression RutaTestUtils.assertAnnotationsEquals(cas, 10, 1, "Some"); } - + @Test public void testFeatureMatch() throws Exception { String document = "This is a test."; String script = ""; script += "Document{-> CREATE(Struct1, \"a\" = SW.begin == 8)};\n"; script += "Struct1.a{-> T1};\n"; - + Map<String, String> complexTypes = new TreeMap<String, String>(); complexTypes.put("Struct1", "uima.tcas.Annotation"); Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); @@ -232,11 +232,103 @@ public class AnnotationFeatureExpression features.put("Struct1", list); list.add(new TestFeature("a", "", "uima.tcas.Annotation")); list.add(new TestFeature("as", "", "uima.cas.FSArray")); - + CAS cas = RutaTestUtils.getCAS(document, complexTypes, features); - Ruta.apply(cas, script); - + Ruta.apply(cas, script); + RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "a"); } + @Test + public void testPartofOnNullMatch() throws Exception { + String document = "Some text."; + String script = ""; + script += "W{-> CREATE(Struct)};\n"; + script += "Struct.a{PARTOF(CW)-> T1};\n"; + + Map<String, String> typeMap = new TreeMap<String, String>(); + String typeName1 = "Struct"; + typeMap.put(typeName1, "uima.tcas.Annotation"); + + Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>(); + List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>(); + featureMap.put(typeName1, list); + String fn1 = "a"; + list.add(new TestFeature(fn1, "", "uima.tcas.Annotation")); + + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); + + } + + @Test + public void testAnnotationComparison() throws Exception { + String document = "Some text for testing."; + String t40String = "for testing."; + + String script = "ANNOTATION a;\n"; + script += "ANNOTATIONLIST as;\n"; + script += "ANNOTATION a2;\n"; + script += "ANNOTATIONLIST as2;\n"; + script += "Document{-> a = CW};\n"; + script += "Document{-> as = SW};\n"; + script += "(W W @PERIOD){-> T40};\n"; + script += "T40{-> a2 = PERIOD};\n"; + script += "T40{-> as2 = SW};\n"; + script += "Document{-> CREATE(Struct1, \"a\" = CW, \"as\" = SW )};\n"; + script += "T40{-> CREATE(Struct2, \"a\" = PERIOD, \"as\" = SW )};\n"; + + script += "Document{Struct1.a == a -> T1};\n"; + script += "Document{Struct1.as == as -> T2};\n"; + script += "Document{Struct1.a != a -> T3};\n"; + script += "Document{Struct1.as != as -> T4};\n"; + script += "Struct1.a == a { -> T5};\n"; + script += "Struct1.as == as { -> T6};\n"; + + script += "T40{Struct2.a == a2 -> T7};\n"; + script += "T40{Struct2.as == as2 -> T8};\n"; + script += "T40{Struct2.a != a2 -> T9};\n"; + script += "T40{Struct2.as != as2 -> T10};\n"; + script += "Struct2.a == a2 { -> T11};\n"; + script += "Struct2.as == as2 { -> T12};\n"; + + script += "Document{a != a2 -> T13};\n"; + script += "Document{as != as2 -> T14};\n"; + + Map<String, String> typeMap = new TreeMap<String, String>(); + String typeName1 = "Struct1"; + typeMap.put(typeName1, "uima.tcas.Annotation"); + String typeName2 = "Struct2"; + typeMap.put(typeName2, "uima.tcas.Annotation"); + + Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>(); + List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>(); + featureMap.put(typeName1, list); + featureMap.put(typeName2, list); + String fn1 = "a"; + list.add(new TestFeature(fn1, "", "uima.tcas.Annotation")); + String fn2 = "as"; + list.add(new TestFeature(fn2, "", "uima.cas.FSArray")); + + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, document); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, document); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 5, 1, document); + RutaTestUtils.assertAnnotationsEquals(cas, 6, 1, document); + + RutaTestUtils.assertAnnotationsEquals(cas, 7, 1, t40String); + RutaTestUtils.assertAnnotationsEquals(cas, 8, 1, t40String); + RutaTestUtils.assertAnnotationsEquals(cas, 9, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 10, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 11, 1, t40String); + RutaTestUtils.assertAnnotationsEquals(cas, 12, 1, t40String); + + RutaTestUtils.assertAnnotationsEquals(cas, 13, 1, document); + RutaTestUtils.assertAnnotationsEquals(cas, 14, 1, document); + } + } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java Wed Jan 16 11:45:02 2019 @@ -654,6 +654,9 @@ public class AnnotationLabelExpressionTe script += "s1:Struct{IS(PERIOD), s1.a.b -> T8};"; CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); Ruta.apply(cas, script); + + RutaTestUtils.storeCas(cas, "testStackedReinitLazyFeature"); + RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some"); RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Some"); RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some"); @@ -709,4 +712,62 @@ public class AnnotationLabelExpressionTe return cas; } + @Test + public void testLabelAssignmentInFailedQuantifier() throws Exception { + + String document = "a 1 a a 1 a a 1 a"; + + String script = "NUM{-> T1, T2, T3, T4, T7, T8};\n"; + script += "SW{-> T5, T6};\n"; + + script += "ps:T1{-> ps.end = a.end} a:ANY[1,10]{-PARTOF(T1)};\n"; + script += "a:ANY[1,10]{-PARTOF(T2)} ps:@T2{-> ps.begin = a.begin};\n"; + + script += "ps:T3{-> ps.end = a.end} a:ANY+{-PARTOF(T3)};\n"; + script += "a:ANY+{-PARTOF(T4)} ps:@T4{-> ps.begin = a.begin};\n"; + +// script += "ps:T5{-> ps.end = a.end} a:ANY?{-PARTOF(T5)};\n"; +// script += "a:ANY?{-PARTOF(T6)} ps:@T6{-> ps.begin = a.begin};\n"; + +// script += "ps:T7{-> ps.end = a.end} a:ANY*?{-PARTOF(T7)};\n"; +// script += "a:ANY*?{-PARTOF(T8)} ps:@T8{-> ps.begin = a.begin};\n"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "1 a a", "1 a a", "1 a"); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "a 1", "a a 1", "a a 1"); + + RutaTestUtils.assertAnnotationsEquals(cas, 3, 3, "1 a a", "1 a a", "1 a"); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 3, "a 1", "a a 1", "a a 1"); + +// RutaTestUtils.assertAnnotationsEquals(cas, 5, 6, "a 1", "a", "a 1", "a", "a 1", "a"); +// RutaTestUtils.assertAnnotationsEquals(cas, 6, 6, "a", "1 a", "a", "1 a", "a", "1 a"); + +// RutaTestUtils.assertAnnotationsEquals(cas, 7, 3, "1 a a", "1 a a", "1 a"); +// RutaTestUtils.assertAnnotationsEquals(cas, 8, 3, "a 1", "a a 1", "a a 1"); + } + + @Test + public void testRemoveFailedMatch() throws Exception { + + String document = "a b c d"; + + String script = ""; + script += "W.begin==0{-> T1};\n"; + script += "T1 a:ANY{REGEXP(\"c\")}->{a{-> T2};};\n"; + script += "T1 a:ANY{REGEXP(\"c\")}<-{a{-> T3};};\n"; + script += "d:Document{-> T4}<-{a:d{STARTSWITH(CW)};b:d{STARTSWITH(W)};}->{a{->T5};};\n"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "a"); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 1, document); + RutaTestUtils.assertAnnotationsEquals(cas, 5, 0); + + } + } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java Wed Jan 16 11:45:02 2019 @@ -22,27 +22,38 @@ package org.apache.uima.ruta.expression. import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; +import org.apache.uima.analysis_engine.AnalysisEngine; +import org.apache.uima.analysis_engine.AnalysisEngineDescription; +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; 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.fit.factory.AnalysisEngineFactory; import org.apache.uima.jcas.cas.FSArray; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; 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.apache.uima.util.InvalidXMLException; import org.junit.Test; public class AnnotationVariableExpressionTest { @Test - public void test() { + public void test() throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { String document = "Some text."; String script = "ANNOTATION a;"; script += "CW{-> ASSIGN(a, CW)};"; @@ -59,13 +70,8 @@ public class AnnotationVariableExpressio 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(); - } + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); Type t = null; AnnotationIndex<AnnotationFS> ai = null; @@ -86,9 +92,11 @@ public class AnnotationVariableExpressio assertNotNull("Feature value is null!", a); assertEquals("Some", a.getCoveredText()); } - + @Test - public void testImplicitAssignment() { + public void testImplicitAssignment() + throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { String document = "Some text."; String script = "ANNOTATION a;"; script += "CW{-> a = CW};"; @@ -105,13 +113,8 @@ public class AnnotationVariableExpressio 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(); - } + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); Type t = null; AnnotationIndex<AnnotationFS> ai = null; @@ -134,7 +137,9 @@ public class AnnotationVariableExpressio } @Test - public void testListImplicitAssignment() { + public void testListImplicitAssignment() + throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { String document = "Some text."; String script = "ANNOTATIONLIST as;"; script += "Document{-> as = W};"; @@ -151,13 +156,8 @@ public class AnnotationVariableExpressio String fn = "as"; list.add(new TestFeature(fn, "", "uima.cas.FSArray")); - CAS cas = null; - try { - cas = RutaTestUtils.getCAS(document, typeMap, featureMap); - Ruta.apply(cas, script); - } catch (Exception e) { - e.printStackTrace(); - } + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); Type t = null; AnnotationIndex<AnnotationFS> ai = null; @@ -178,9 +178,10 @@ public class AnnotationVariableExpressio assertNotNull("Feature value is null!", array); assertEquals(2, array.size()); } - + @Test - public void testList() { + public void testList() throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { String document = "Some text."; String script = "ANNOTATIONLIST as;"; script += "Document{-> ASSIGN(as, W)};"; @@ -197,13 +198,8 @@ public class AnnotationVariableExpressio String fn = "as"; list.add(new TestFeature(fn, "", "uima.cas.FSArray")); - CAS cas = null; - try { - cas = RutaTestUtils.getCAS(document, typeMap, featureMap); - Ruta.apply(cas, script); - } catch (Exception e) { - e.printStackTrace(); - } + CAS cas = RutaTestUtils.getCAS(document, typeMap, featureMap); + Ruta.apply(cas, script); Type t = null; AnnotationIndex<AnnotationFS> ai = null; @@ -224,4 +220,70 @@ public class AnnotationVariableExpressio assertNotNull("Feature value is null!", array); assertEquals(2, array.size()); } + + @Test + public void testResetVariableBetweenCases() + throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { + + String document = "Some text."; + String script = "ANNOTATIONLIST as;\n"; + script += "ANNOTATION a;\n"; + script += "WORDLIST wl = 'org/apache/uima/ruta/WSDictionaryTestList.txt';\n"; + script += "WORDTABLE wt = 'org/apache/uima/ruta/table2.csv';\n"; + script += "a{-> T1};\n"; + script += "as{-> T2};\n"; + script += "Document{-> a = CW};\n"; + script += "Document{-> as = W};\n"; + script += "a{-> T3};\n"; + script += "as{-> T4};"; + + AnalysisEngineDescription description = AnalysisEngineFactory + .createEngineDescription(RutaEngine.class, RutaEngine.PARAM_RULES, script); + AnalysisEngine engine = AnalysisEngineFactory.createEngine(description); + + CAS cas = RutaTestUtils.getCAS(document); + + cas.reset(); + cas.setDocumentText(document); + engine.process(cas); + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some"); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 2, "Some", "text"); + + cas.reset(); + cas.setDocumentText(document); + engine.process(cas); + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some"); + RutaTestUtils.assertAnnotationsEquals(cas, 4, 2, "Some", "text"); + + } + + @Test + public void testNullValueWithFeatureMatch() + throws ResourceInitializationException, InvalidXMLException, IOException, + AnalysisEngineProcessException, ResourceConfigurationException, URISyntaxException { + + String document = "Some text."; + String script = ""; + script += "ANNOTATION a;\n"; + script += "INT i;\n"; + script += "STRING s;\n"; + script += "a.begin == 0{-> T1};\n"; + script += "a.ct == \"text\"{-> T2};\n"; + script += "a.ff == \"text\"{-> T3};\n"; // !!! + script += "Document{-> i = a.begin};\n"; + script += "Document{-> s = a.ct};\n"; + + CAS cas = RutaTestUtils.getCAS(document); + Ruta.apply(cas, script); + + RutaTestUtils.assertAnnotationsEquals(cas, 1, 0); + RutaTestUtils.assertAnnotationsEquals(cas, 2, 0); + + } + } Modified: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java?rev=1851430&r1=1851429&r2=1851430&view=diff ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java (original) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/resource/WordTableStringExpressionTest.java Wed Jan 16 11:45:02 2019 @@ -22,6 +22,7 @@ package org.apache.uima.ruta.expression. import static org.junit.Assert.assertEquals; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -33,25 +34,25 @@ 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 WordTableStringExpressionTest { - @Test public void test() throws Exception { String document = "Kluegl Schor Kottmann"; - String script="STRING s = \"org/apache/uima/ruta/action/\";\n"; - script +="WORDTABLE table = s + \"table.csv\";\n"; - script +="MARKTABLE(Person, 1, table, true, 0, \"-.,\", 10, \"firstname\" = 2, \"system\" = 3);\n"; - + String script = "STRING s = \"org/apache/uima/ruta/action/\";\n"; + script += "WORDTABLE table = s + \"table.csv\";\n"; + script += "MARKTABLE(Person, 1, table, true, 0, \"-.,\", 10, \"firstname\" = 2, \"system\" = 3);\n"; + Map<String, String> complexTypes = new TreeMap<String, String>(); String typeName = "org.apache.uima.Person"; complexTypes.put(typeName, "uima.tcas.Annotation"); - + Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>(); features.put(typeName, list); @@ -59,10 +60,13 @@ public class WordTableStringExpressionTe list.add(new TestFeature(fn1, "", "uima.cas.String")); String fn2 = "system"; list.add(new TestFeature(fn2, "", "uima.cas.String")); - + + Map<String, Object> map = new HashMap<>(); + map.put(RutaEngine.PARAM_DICT_REMOVE_WS, true); + CAS cas = RutaTestUtils.getCAS(document, complexTypes, features); - Ruta.apply(cas, script); - + Ruta.apply(cas, script, map); + Type t = null; AnnotationIndex<AnnotationFS> ai = null; FSIterator<AnnotationFS> iterator = null; @@ -73,46 +77,46 @@ public class WordTableStringExpressionTe Feature f1 = t.getFeatureByBaseName(fn1); Feature f2 = t.getFeatureByBaseName(fn2); ai = cas.getAnnotationIndex(t); - + assertEquals(3, ai.size()); iterator = ai.iterator(); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Peter", v1); assertEquals("Ruta", v2); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Marshall", v1); assertEquals("UIMA", v2); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Joern", v1); assertEquals("CAS Editor", v2); - - cas.release(); + + cas.release(); } - + @Test public void testInBlock() throws Exception { String document = "Kluegl Schor Kottmann"; - String script="STRING s = \"org/apache/uima/ruta/action/\";\n"; - script +="BLOCK(block) Document{}{\n"; - script +="WORDTABLE table = s + \"table.csv\";\n"; - script +="MARKTABLE(Person, 1, table, true, 0, \"-.,\", 10, \"firstname\" = 2, \"system\" = 3);\n"; - script +="}\n"; - + String script = "STRING s = \"org/apache/uima/ruta/action/\";\n"; + script += "BLOCK(block) Document{}{\n"; + script += "WORDTABLE table = s + \"table.csv\";\n"; + script += "MARKTABLE(Person, 1, table, true, 0, \"-.,\", 10, \"firstname\" = 2, \"system\" = 3);\n"; + script += "}\n"; + Map<String, String> complexTypes = new TreeMap<String, String>(); String typeName = "org.apache.uima.Person"; complexTypes.put(typeName, "uima.tcas.Annotation"); - + Map<String, List<TestFeature>> features = new TreeMap<String, List<TestFeature>>(); List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>(); features.put(typeName, list); @@ -120,10 +124,13 @@ public class WordTableStringExpressionTe list.add(new TestFeature(fn1, "", "uima.cas.String")); String fn2 = "system"; list.add(new TestFeature(fn2, "", "uima.cas.String")); - + + Map<String, Object> map = new HashMap<>(); + map.put(RutaEngine.PARAM_DICT_REMOVE_WS, true); + CAS cas = RutaTestUtils.getCAS(document, complexTypes, features); - Ruta.apply(cas, script); - + Ruta.apply(cas, script, map); + Type t = null; AnnotationIndex<AnnotationFS> ai = null; FSIterator<AnnotationFS> iterator = null; @@ -134,30 +141,30 @@ public class WordTableStringExpressionTe Feature f1 = t.getFeatureByBaseName(fn1); Feature f2 = t.getFeatureByBaseName(fn2); ai = cas.getAnnotationIndex(t); - + assertEquals(3, ai.size()); iterator = ai.iterator(); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Peter", v1); assertEquals("Ruta", v2); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Marshall", v1); assertEquals("UIMA", v2); - + next = iterator.next(); v1 = next.getStringValue(f1); v2 = next.getStringValue(f2); assertEquals("Joern", v1); assertEquals("CAS Editor", v2); - - cas.release(); + + cas.release(); } - + } Added: uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java URL: http://svn.apache.org/viewvc/uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java?rev=1851430&view=auto ============================================================================== --- uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java (added) +++ uima/uv3/ruta-v3/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/string/StringSubtypeAllowedValuesTest.java Wed Jan 16 11:45:02 2019 @@ -0,0 +1,111 @@ +/* + * 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.string; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.uima.analysis_engine.AnalysisEngineProcessException; +import org.apache.uima.cas.CAS; +import org.apache.uima.cas.CASException; +import org.apache.uima.fit.factory.TypeSystemDescriptionFactory; +import org.apache.uima.fit.util.JCasUtil; +import org.apache.uima.jcas.JCas; +import org.apache.uima.resource.ResourceConfigurationException; +import org.apache.uima.resource.ResourceInitializationException; +import org.apache.uima.resource.metadata.AllowedValue; +import org.apache.uima.resource.metadata.FsIndexDescription; +import org.apache.uima.resource.metadata.TypeDescription; +import org.apache.uima.resource.metadata.TypeSystemDescription; +import org.apache.uima.resource.metadata.impl.AllowedValue_impl; +import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl; +import org.apache.uima.ruta.engine.Ruta; +import org.apache.uima.ruta.type.FalseNegative; +import org.apache.uima.ruta.type.FalsePositive; +import org.apache.uima.ruta.type.TruePositive; +import org.apache.uima.util.CasCreationUtils; +import org.apache.uima.util.InvalidXMLException; +import org.junit.Assert; +import org.junit.Test; + +public class StringSubtypeAllowedValuesTest { + + @Test + public void testValidValue() throws ResourceInitializationException, + AnalysisEngineProcessException, InvalidXMLException, ResourceConfigurationException, + IOException, URISyntaxException, CASException { + CAS cas = createCAS(); + + String script = "Document{-> CREATE(Test, \"allowed\" = \"A\")};"; + script += "Document{-> CREATE(Test, \"allowed\" = \"B\")};"; + // using eval types just as helper types + script += "Test.allowed == \"A\"{-> TruePositive};"; + script += "Test.allowed == \"B\"{-> TruePositive};"; + script += "t:Test{t.allowed == \"A\" -> TruePositive};"; + script += "t:Test{t.allowed == \"B\" -> TruePositive};"; + script += "Test.allowed == \"\"{-> FalseNegative};"; + script += "Test.allowed == \"C\"{-> FalsePositive};"; + + Ruta.apply(cas, script); + + JCas jcas = cas.getJCas(); + Assert.assertEquals(4, JCasUtil.select(jcas, TruePositive.class).size()); + Assert.assertEquals(0, JCasUtil.select(jcas, FalseNegative.class).size()); + Assert.assertEquals(0, JCasUtil.select(jcas, FalsePositive.class).size()); + + } + + @Test(expected = AnalysisEngineProcessException.class) + public void testInvalidValue() throws ResourceInitializationException, + AnalysisEngineProcessException, InvalidXMLException, ResourceConfigurationException, + IOException, URISyntaxException, CASException { + + CAS cas = createCAS(); + + String script = "Document{-> CREATE(Test, \"allowed\" = \"D\")};"; + + Ruta.apply(cas, script); + } + + private CAS createCAS() throws ResourceInitializationException { + TypeSystemDescription typeSystemDescription = new TypeSystemDescription_impl(); + String subStringTypeName = "ruta.SubString"; + TypeDescription stringTypeDescription = typeSystemDescription.addType(subStringTypeName, + "for testing", CAS.TYPE_NAME_STRING); + stringTypeDescription.setAllowedValues(new AllowedValue[] { new AllowedValue_impl("A", "A"), + new AllowedValue_impl("B", "B"), new AllowedValue_impl("C", "C") }); + TypeDescription testTypeDescription = typeSystemDescription.addType("ruta.Test", "for testing", + CAS.TYPE_NAME_ANNOTATION); + testTypeDescription.addFeature("allowed", "for testing", subStringTypeName); + + TypeSystemDescription typeSystemDescription2 = TypeSystemDescriptionFactory + .createTypeSystemDescription(); + + Collection<TypeSystemDescription> typeSystems = new ArrayList<>(); + typeSystems.add(typeSystemDescription); + typeSystems.add(typeSystemDescription2); + TypeSystemDescription mergedTypeSystem = CasCreationUtils.mergeTypeSystems(typeSystems); + CAS cas = CasCreationUtils.createCas(mergedTypeSystem, null, new FsIndexDescription[0]); + cas.setDocumentText("Some text."); + return cas; + } + +}