[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