[jboss-svn-commits] JBoss Common SVN: r4510 - in arquillian/trunk/impl-base/src: test/java/org/jboss/arquillian/impl and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Jun 12 13:23:42 EDT 2010
Author: dan.j.allen
Date: 2010-06-12 13:23:41 -0400 (Sat, 12 Jun 2010)
New Revision: 4510
Modified:
arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java
arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java
arquillian/trunk/impl-base/src/test/resources/arquillian.xml
Log:
ARQ-169
Modified: arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java
===================================================================
--- arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java 2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/main/java/org/jboss/arquillian/impl/XmlConfigurationBuilder.java 2010-06-12 17:23:41 UTC (rev 4510)
@@ -17,7 +17,7 @@
package org.jboss.arquillian.impl;
import java.io.InputStream;
-import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -42,6 +42,7 @@
*
* @author <a href="mailto:german.escobarc at gmail.com">German Escobar</a>
* @author <a href="mailto:aslak at redhat.com">Aslak Knutsen</a>
+ * @author Dan Allen
* @version $Revision: $
*/
public class XmlConfigurationBuilder implements ConfigurationBuilder
@@ -213,14 +214,29 @@
properties.putAll(getPropertiesFromNode(child));
}
}
-
+
+ Map<String, Method> setters = new HashMap<String, Method>();
+ for (Method candidate : configurationObject.getClass().getMethods())
+ {
+ String methodName = candidate.getName();
+ if (methodName.matches("^set[A-Z].*") &&
+ candidate.getReturnType().equals(Void.TYPE) &&
+ candidate.getParameterTypes().length == 1)
+ {
+ candidate.setAccessible(true);
+ setters.put(methodName.substring(3, 4).toLowerCase() + methodName.substring(4), candidate);
+ }
+ }
+
// set the properties found in the container XML fragment to the Configuration Object
for (Map.Entry<String, String> property : properties.entrySet())
{
- Field field = configurationObject.getClass().getDeclaredField(property.getKey());
- field.setAccessible(true);
- Object value = convert(field.getType(), property.getValue());
- field.set(configurationObject, value);
+ if (setters.containsKey(property.getKey()))
+ {
+ Method method = setters.get(property.getKey());
+ Object value = convert(method.getParameterTypes()[0], property.getValue());
+ method.invoke(configurationObject, value);
+ }
}
}
Modified: arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java
===================================================================
--- arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java 2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/test/java/org/jboss/arquillian/impl/XmlConfigurationBuilderTestCase.java 2010-06-12 17:23:41 UTC (rev 4510)
@@ -80,6 +80,8 @@
Assert.assertEquals(2L, containerConfig.getPropertyLong());
Assert.assertEquals(3D, containerConfig.getPropertyDouble(), 0);
Assert.assertEquals(true, containerConfig.getPropertyBoolean());
+ Assert.assertEquals("inherited", containerConfig.getPropertyInherited());
+ Assert.assertEquals("char", containerConfig.getC());
}
@@ -133,13 +135,28 @@
return (T) new MockContainerConfiguration();
}
}
-
+
+ class AbstractMockContainerConfiguration
+ {
+ private String propertyInherited;
+
+ public String getPropertyInherited()
+ {
+ return propertyInherited;
+ }
+
+ public void setPropertyInherited(String propertyInherited)
+ {
+ this.propertyInherited = propertyInherited;
+ }
+ }
+
/**
* Mocks a ContainerConfiguration implementation
*
* @author <a href="mailto:german.escobarc at gmail.com">German Escobar</a>
*/
- class MockContainerConfiguration implements ContainerConfiguration
+ class MockContainerConfiguration extends AbstractMockContainerConfiguration implements ContainerConfiguration
{
private String propertyString;
@@ -151,6 +168,7 @@
private boolean propertyBoolean;
+ private String c;
public ContainerProfile getContainerProfile()
{
@@ -206,7 +224,17 @@
{
this.propertyBoolean = propertyBoolean;
}
-
+
+ public String getC()
+ {
+ return c;
+ }
+
+ public void setC(String c)
+ {
+ this.c = c;
+ }
+
}
}
Modified: arquillian/trunk/impl-base/src/test/resources/arquillian.xml
===================================================================
--- arquillian/trunk/impl-base/src/test/resources/arquillian.xml 2010-06-12 17:05:47 UTC (rev 4509)
+++ arquillian/trunk/impl-base/src/test/resources/arquillian.xml 2010-06-12 17:23:41 UTC (rev 4510)
@@ -1,5 +1,4 @@
-<?xml version="1.0"?>
-
+<?xml version="1.0" encoding="UTF-8"?>
<arquillian xmlns="http://jboss.com/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mock="urn:arq:org.jboss.arquillian.impl">
@@ -8,12 +7,13 @@
<deploymentExportPath>/tmp</deploymentExportPath>
</engine>
-
<mock:container>
<mock:property string="hola" long="2" />
<mock:propertyInt>1</mock:propertyInt>
<mock:propertyDouble>3</mock:propertyDouble>
<mock:propertyBoolean>true</mock:propertyBoolean>
+ <mock:propertyInherited>inherited</mock:propertyInherited>
+ <mock:c>char</mock:c>
</mock:container>
</arquillian>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list