Author: rec
Date: Sat Jul 20 13:49:41 2013
New Revision: 1505132

URL: http://svn.apache.org/r1505132
Log:
[UIMA-3091] Add tests using external resources with the CpePipeline

Added:
    
uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java
   (with props)
Modified:
    uima/sandbox/uimafit/trunk/uimafit-cpe/pom.xml

Modified: uima/sandbox/uimafit/trunk/uimafit-cpe/pom.xml
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit-cpe/pom.xml?rev=1505132&r1=1505131&r2=1505132&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit-cpe/pom.xml (original)
+++ uima/sandbox/uimafit/trunk/uimafit-cpe/pom.xml Sat Jul 20 13:49:41 2013
@@ -7,7 +7,7 @@
                <version>2.0.0-SNAPSHOT</version>
        </parent>
        <artifactId>uimafit-cpe</artifactId>
-       <name>uimaFIT- Collection Processing Engine support</name>
+       <name>uimaFIT - Collection Processing Engine support</name>
        <dependencies>
                <dependency>
                        <groupId>org.apache.uima</groupId>

Added: 
uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java?rev=1505132&view=auto
==============================================================================
--- 
uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java
 (added)
+++ 
uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java
 Sat Jul 20 13:49:41 2013
@@ -0,0 +1,295 @@
+/*
+ * 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.fit.cpe;
+
+import static java.util.Arrays.asList;
+import static 
org.apache.uima.fit.factory.AnalysisEngineFactory.createAggregateDescription;
+import static 
org.apache.uima.fit.factory.AnalysisEngineFactory.createPrimitiveDescription;
+import static 
org.apache.uima.fit.factory.ExternalResourceFactory.createExternalResourceDescription;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.fit.component.Resource_ImplBase;
+import org.apache.uima.fit.cpe.CpePipelineTest.Reader;
+import org.apache.uima.fit.descriptor.ConfigurationParameter;
+import org.apache.uima.fit.descriptor.ExternalResource;
+import org.apache.uima.fit.factory.CollectionReaderFactory;
+import org.apache.uima.fit.factory.ExternalResourceFactory;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.resource.DataResource;
+import org.apache.uima.resource.ExternalResourceDescription;
+import org.apache.uima.resource.ParameterizedDataResource;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.junit.Test;
+
+/**
+ * Test case for {@link ExternalResource} annotations.
+ * 
+ */
+public class ExternalResourceFactoryTest {
+  @Test
+  public void testMultiBinding() throws Exception {
+    ExternalResourceDescription extDesc = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    // Binding external resource to each Annotator individually
+    AnalysisEngineDescription aed1 = 
createPrimitiveDescription(MultiBindAE.class,
+            MultiBindAE.RES_KEY, extDesc);
+    AnalysisEngineDescription aed2 = 
createPrimitiveDescription(MultiBindAE.class,
+            MultiBindAE.RES_KEY, extDesc);
+
+    // Check the external resource was injected
+    MultiBindAE.reset();
+    AnalysisEngineDescription aaed = createAggregateDescription(aed1, aed2);
+    
CpePipeline.runPipeline(CollectionReaderFactory.createDescription(Reader.class),
 aaed);
+  }
+
+  /**
+   * Test resource list.
+   */
+  @Test
+  public void testMultiValue() throws Exception {
+    ExternalResourceDescription extDesc1 = 
createExternalResourceDescription(ResourceWithAssert.class);
+    ExternalResourceDescription extDesc2 = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    AnalysisEngineDescription aed = 
createPrimitiveDescription(MultiValuedResourceAE.class,
+            MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(extDesc1, 
extDesc2));
+
+    
CpePipeline.runPipeline(CollectionReaderFactory.createDescription(Reader.class),
 aed);
+  }
+
+  /**
+   * Test sharing a resource list between two AEs on the same aggregate.
+   */
+  @Test
+  public void testMultiValue2() throws Exception {
+    MultiValuedResourceAE.resources.clear();
+
+    ExternalResourceDescription extDesc1 = 
createExternalResourceDescription(ResourceWithAssert.class);
+    ExternalResourceDescription extDesc2 = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    AnalysisEngineDescription aed = createAggregateDescription(
+            createPrimitiveDescription(MultiValuedResourceAE.class,
+                    MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(extDesc1, 
extDesc2)),
+            createPrimitiveDescription(MultiValuedResourceAE.class,
+                    MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(extDesc1, 
extDesc2)));
+
+    
CpePipeline.runPipeline(CollectionReaderFactory.createDescription(Reader.class),
 aed);
+
+    // Check that the shared resources are really the same
+    assertEquals(MultiValuedResourceAE.resources.get(0), 
MultiValuedResourceAE.resources.get(2));
+    assertEquals(MultiValuedResourceAE.resources.get(1), 
MultiValuedResourceAE.resources.get(3));
+  }
+
+  /**
+   * Test sharing a resource list across aggregates.
+   */
+  @Test
+  public void testMultiValue3() throws Exception {
+    MultiValuedResourceAE.resources.clear();
+
+    ExternalResourceDescription extDesc1 = 
createExternalResourceDescription(ResourceWithAssert.class);
+    ExternalResourceDescription extDesc2 = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    AnalysisEngineDescription aed = createAggregateDescription(
+            createPrimitiveDescription(MultiValuedResourceAE.class,
+                    MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(extDesc1, 
extDesc2)),
+            
createAggregateDescription(createPrimitiveDescription(MultiValuedResourceAE.class,
+                    MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(extDesc1, 
extDesc2))));
+
+    
CpePipeline.runPipeline(CollectionReaderFactory.createDescription(Reader.class),
 aed);
+
+    // Check that the shared resources are really the same
+    assertEquals(MultiValuedResourceAE.resources.get(0), 
MultiValuedResourceAE.resources.get(2));
+    assertEquals(MultiValuedResourceAE.resources.get(1), 
MultiValuedResourceAE.resources.get(3));
+  }
+
+  /**
+   * Test nested resource lists.
+   */
+  @Test
+  public void testMultiValue4() throws Exception {
+    ExternalResourceDescription extDesc1 = 
createExternalResourceDescription(ResourceWithAssert.class);
+    ExternalResourceDescription extDesc2 = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    ExternalResourceDescription extDesc3 = 
createExternalResourceDescription(ResourceWithAssert.class);
+    ExternalResourceDescription extDesc4 = 
createExternalResourceDescription(ResourceWithAssert.class);
+
+    ExternalResourceDescription mv1 = 
createExternalResourceDescription(MultiValuedResource.class,
+            MultiValuedResource.RES_RESOURCE_LIST, new 
ExternalResourceDescription[] { extDesc1,
+                extDesc2 });
+
+    ExternalResourceDescription mv2 = 
createExternalResourceDescription(MultiValuedResource.class,
+            MultiValuedResource.RES_RESOURCE_LIST, new 
ExternalResourceDescription[] { extDesc3,
+                extDesc4 });
+
+    AnalysisEngineDescription aed = 
createPrimitiveDescription(MultiValuedResourceAE.class,
+            MultiValuedResourceAE.RES_RESOURCE_ARRAY, asList(mv1, mv2));
+
+    
CpePipeline.runPipeline(CollectionReaderFactory.createDescription(Reader.class),
 aed);
+  }
+
+  public static final class MultiValuedResourceAE extends
+          org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+    static final String RES_RESOURCE_ARRAY = "resourceArray";
+
+    @ExternalResource(key = RES_RESOURCE_ARRAY)
+    ResourceWithAssert[] resourceArray;
+
+    public static List<ResourceWithAssert> resources = new 
ArrayList<ResourceWithAssert>();
+
+    @Override
+    public void process(JCas aJCas) throws AnalysisEngineProcessException {
+      assertNotNull("Resource array is null", resourceArray);
+      assertEquals(2, resourceArray.length);
+      assertTrue("Resource array element 0 is not a DummyResource",
+              resourceArray[0] instanceof ResourceWithAssert);
+      assertTrue("Resource array element 1 is not a DummyResource",
+              resourceArray[1] instanceof ResourceWithAssert);
+      assertTrue(resourceArray[0] != resourceArray[1]);
+
+      resources.add(resourceArray[0]);
+      resources.add(resourceArray[1]);
+
+      System.out.printf("Element object 0: %d%n", resourceArray[0].hashCode());
+      System.out.printf("Element object 1: %d%n", resourceArray[1].hashCode());
+
+      for (ResourceWithAssert res : resourceArray) {
+        res.doAsserts();
+      }
+    }
+  }
+
+  public static final class MultiValuedResource extends ResourceWithAssert {
+    static final String RES_RESOURCE_LIST = "resourceList";
+
+    @ExternalResource(key = RES_RESOURCE_LIST)
+    List<ResourceWithAssert> resourceList;
+
+    public static List<ResourceWithAssert> resources = new 
ArrayList<ResourceWithAssert>();
+
+    @Override
+    public void doAsserts() {
+      assertNotNull("Resource array is null", resourceList);
+      assertEquals(2, resourceList.size());
+      assertTrue("Resource array element 0 is not a MultiValuedResourceAE",
+              resourceList.get(0) instanceof ResourceWithAssert);
+      assertTrue("Resource array element 1 is not a MultiValuedResourceAE",
+              resourceList.get(1) instanceof ResourceWithAssert);
+      assertTrue(resourceList.get(0) != resourceList.get(1));
+
+      resources.add(resourceList.get(0));
+      resources.add(resourceList.get(1));
+
+      System.out.printf("Element object 0: %d%n", 
resourceList.get(0).hashCode());
+      System.out.printf("Element object 1: %d%n", 
resourceList.get(1).hashCode());
+
+      for (ResourceWithAssert res : resourceList) {
+        res.doAsserts();
+      }
+    }
+  }
+
+  /**
+   * Example annotator that uses the share model object. In the process() we 
only test if the model
+   * was properly initialized by uimaFIT
+   */
+  public static class MultiBindAE extends 
org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+    static int prevHashCode = -1;
+
+    static final String RES_KEY = "Res";
+
+    @ExternalResource(key = RES_KEY)
+    ResourceWithAssert res;
+
+    @Override
+    public void process(JCas aJCas) throws AnalysisEngineProcessException {
+      if (prevHashCode == -1) {
+        prevHashCode = res.hashCode();
+      } else {
+        assertEquals(prevHashCode, res.hashCode());
+      }
+
+      System.out.println(getClass().getSimpleName() + ": " + res);
+    }
+
+    public static void reset() {
+      prevHashCode = -1;
+    }
+  }
+
+  public static class ResourceWithAssert extends Resource_ImplBase {
+    public void doAsserts() {
+      // Nothing by default
+    }
+  }
+
+  public static final class AnnotatedDataResource extends Resource_ImplBase 
implements DataResource {
+    public static final String PARAM_URI = "Uri";
+
+    @ConfigurationParameter(name = PARAM_URI, mandatory = true)
+    private String uri;
+
+    public static final String PARAM_EXTENSION = "Extension";
+
+    @ConfigurationParameter(name = PARAM_EXTENSION, mandatory = true)
+    private String extension;
+
+    public InputStream getInputStream() throws IOException {
+      return null;
+    }
+
+    public URI getUri() {
+      return URI.create(uri + extension);
+    }
+
+    public URL getUrl() {
+      return null;
+    }
+  }
+
+  public static final class AnnotatedParametrizedDataResource extends 
Resource_ImplBase implements
+          ParameterizedDataResource {
+    public static final String PARAM_EXTENSION = "Extension";
+
+    @ConfigurationParameter(name = PARAM_EXTENSION, mandatory = true)
+    private String extension;
+
+    public DataResource getDataResource(String[] aParams) throws 
ResourceInitializationException {
+      List<String> params = new ArrayList<String>(Arrays.asList(aParams));
+      params.add(AnnotatedDataResource.PARAM_EXTENSION);
+      params.add(extension);
+      ExternalResourceDescription desc = 
ExternalResourceFactory.createExternalResourceDescription(
+              null, AnnotatedDataResource.class, params.toArray(new 
String[params.size()]));
+      return (DataResource) 
UIMAFramework.produceResource(desc.getResourceSpecifier(), null);
+    }
+  }
+}

Propchange: 
uima/sandbox/uimafit/trunk/uimafit-cpe/src/test/java/org/apache/uima/fit/cpe/ExternalResourceFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to