[jboss-svn-commits] JBoss Common SVN: r3803 - in arquillian/trunk/testenricher-jboss: src/main/java/org/jboss/arquillian/testenricher/jboss and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Nov 27 06:59:31 EST 2009


Author: aslak
Date: 2009-11-27 06:59:31 -0500 (Fri, 27 Nov 2009)
New Revision: 3803

Modified:
   arquillian/trunk/testenricher-jboss/pom.xml
   arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/CDIInjectionEnricher.java
   arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/EJBInjectionEnricher.java
   arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/ResourceInjectionEnricher.java
Log:
ARQ-34 Added support for CDI and Resource enriching. CDI alone will support them all, but.. 

Modified: arquillian/trunk/testenricher-jboss/pom.xml
===================================================================
--- arquillian/trunk/testenricher-jboss/pom.xml	2009-11-26 12:39:33 UTC (rev 3802)
+++ arquillian/trunk/testenricher-jboss/pom.xml	2009-11-27 11:59:31 UTC (rev 3803)
@@ -51,6 +51,19 @@
         <scope>test</scope>
       </dependency>
       <dependency>
+         <groupId>javax.enterprise</groupId> 
+         <artifactId>cdi-api</artifactId>
+         <version>1.0</version>
+         <scope>provided</scope>       
+      </dependency>
+      <dependency>
+         <groupId>javax.mail</groupId> 
+         <artifactId>mail</artifactId>
+         <version>1.4.1</version>
+         <scope>provided</scope>       
+      </dependency>
+      
+      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <scope>test</scope>

Modified: arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/CDIInjectionEnricher.java
===================================================================
--- arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/CDIInjectionEnricher.java	2009-11-26 12:39:33 UTC (rev 3802)
+++ arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/CDIInjectionEnricher.java	2009-11-27 11:59:31 UTC (rev 3803)
@@ -16,6 +16,11 @@
  */
 package org.jboss.arquillian.testenricher.jboss;
 
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.naming.InitialContext;
+
 import org.jboss.arquillian.spi.TestEnricher;
 
 /**
@@ -26,9 +31,51 @@
  */
 public class CDIInjectionEnricher implements TestEnricher 
 {
-
+   private static final String JNDI_BEAN_MANAGER = "java:/app/BeanManager";
+   private static final String ANNOTATION_NAME = "javax.inject.Inject";
+   
    @Override
    public void enrich(Object testCase)
    {
+      if(SecurityActions.isClassPresent(ANNOTATION_NAME)) 
+      {
+         injectClass(testCase);
+      }
    }
+   
+   protected void injectClass(Object testCase) 
+   {
+      try 
+      {
+         BeanManager beanManager = lookupBeanManager();
+         if(beanManager != null) {
+            injectNonContextualInstance(beanManager, testCase);            
+         }
+      }
+      catch (Exception e) 
+      {
+         throw new RuntimeException("Could not inject members", e);
+      }
+   }
+   
+   @SuppressWarnings("unchecked")
+   protected void injectNonContextualInstance(BeanManager manager, Object instance)
+   {
+      CreationalContext<Object> creationalContext =  manager.createCreationalContext(null);
+      InjectionTarget<Object> injectionTarget = (InjectionTarget<Object>) manager.createInjectionTarget(
+            manager.createAnnotatedType(instance.getClass()));
+      injectionTarget.inject(instance, creationalContext);
+   }
+
+   protected BeanManager lookupBeanManager() 
+   {
+      try 
+      {
+         return (BeanManager)new InitialContext().lookup(JNDI_BEAN_MANAGER);   
+      }
+      catch (Exception e) 
+      {
+         return null;
+      }
+   }
 }

Modified: arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/EJBInjectionEnricher.java
===================================================================
--- arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/EJBInjectionEnricher.java	2009-11-26 12:39:33 UTC (rev 3802)
+++ arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/EJBInjectionEnricher.java	2009-11-27 11:59:31 UTC (rev 3803)
@@ -46,7 +46,7 @@
       }
    }
 
-   void injectClass(Object testCase) 
+   protected void injectClass(Object testCase) 
    {
       try 
       {
@@ -69,7 +69,7 @@
       }
    }
 
-   private Object lookupEJB(Field field) throws Exception 
+   protected Object lookupEJB(Field field) throws Exception 
    {
       // TODO: figure out test context ? 
       InitialContext context = new InitialContext();

Modified: arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/ResourceInjectionEnricher.java
===================================================================
--- arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/ResourceInjectionEnricher.java	2009-11-26 12:39:33 UTC (rev 3802)
+++ arquillian/trunk/testenricher-jboss/src/main/java/org/jboss/arquillian/testenricher/jboss/ResourceInjectionEnricher.java	2009-11-27 11:59:31 UTC (rev 3803)
@@ -16,6 +16,13 @@
  */
 package org.jboss.arquillian.testenricher.jboss;
 
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.naming.InitialContext;
+
 import org.jboss.arquillian.spi.TestEnricher;
 
 /**
@@ -26,10 +33,63 @@
  */
 public class ResourceInjectionEnricher implements TestEnricher
 {
-
+   private static final String RESOURCE_LOOKUP_PREFIX = "java:/comp/env";
+   private static final String ANNOTATION_NAME = "javax.annotation.Resource";
+   
    @Override
    public void enrich(Object testCase)
    {
-      
+      if(SecurityActions.isClassPresent(ANNOTATION_NAME)) 
+      {
+         injectClass(testCase);
+      }
    }
+
+   protected void injectClass(Object testCase) 
+   {
+      try 
+      {
+         @SuppressWarnings("unchecked")
+         Class<? extends Annotation> resourceAnnotation = (Class<? extends Annotation>)SecurityActions.getThreadContextClassLoader().loadClass(ANNOTATION_NAME);
+         
+         List<Field> annotatedFields = SecurityActions.getFieldsWithAnnotation(
+               testCase.getClass(), 
+               resourceAnnotation);
+         
+         for(Field field : annotatedFields) 
+         {
+            Object ejb = lookup(getResourceName(field));
+            field.set(testCase, ejb);
+         }
+      } 
+      catch (Exception e) 
+      {
+         throw new RuntimeException("Could not inject members", e);
+      }
+   }
+
+   protected Object lookup(String jndiName) throws Exception 
+   {
+      // TODO: figure out test context ? 
+      InitialContext context = new InitialContext();
+      return context.lookup(jndiName);
+   }
+   
+   protected String getResourceName(Field field)
+   {
+      Resource resource = field.getAnnotation(Resource.class);
+      String mappedName = resource.mappedName();
+      if (!mappedName.equals(""))
+      {
+         return mappedName;
+      }
+      String name = resource.name();
+      if (!name.equals(""))
+      {
+         return RESOURCE_LOOKUP_PREFIX + "/" + name;
+      }
+      String propertyName = field.getName();
+      String className = field.getDeclaringClass().getName();
+      return RESOURCE_LOOKUP_PREFIX + "/" + className + "/" + propertyName;
+   }
 }



More information about the jboss-svn-commits mailing list