package org.openstack.atlas.api.helpers.reflection;
import org.junit.Ignore;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Before;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.Assert;
import javax.xml.bind.annotation.XmlRootElement;
public class ClassReflectionToolsTest {
private ReturnTypeTest rt;
private List<PropMap> propMaps;
@Before
public void setUp() {
rt = new ReturnTypeTest();
propMaps = new ArrayList<PropMap>();
propMaps.add(new PropMap(Integer.class, "getxInteger", rt.getxInteger()));
propMaps.add(new PropMap(String.class, "getxString", rt.getxString()));
propMaps.add(new PropMap(Double.class, "getPi", rt.getPi()));
propMaps.add(new PropMap(int.class, "getXint", rt.getXint()));
propMaps.add(new PropMap(double.class, "getXdouble", rt.getXdouble()));
propMaps.add(new PropMap(List.class, "getxStrList", rt.getxStrList()));
}
@Test
public void shouldBeAbleToCreateNewInstanceWithNullConstructorArgsByClass() throws ClassReflectionToolsException {
Object stringObj;
Object strbuffObj;
stringObj = ClassReflectionTools.newInstance(java.lang.String.class);
strbuffObj = ClassReflectionTools.newInstance(java.lang.StringBuilder.class);
Assert.assertTrue(stringObj instanceof java.lang.String);
Assert.assertTrue(strbuffObj instanceof java.lang.StringBuilder);
}
@Test
public void shouldBeAbleToCreateNewInstanceWithNullConstructorClassName() throws ClassReflectionToolsException {
Object stringObj;
Object strbuffObj;
stringObj = ClassReflectionTools.newInstance("java.lang.String");
strbuffObj = ClassReflectionTools.newInstance("java.lang.StringBuilder");
Assert.assertTrue(stringObj instanceof java.lang.String);
Assert.assertTrue(strbuffObj instanceof java.lang.StringBuilder);
}
@Test
public void shouldMapPropertyClassesCorrectly() throws ClassReflectionToolsException {
for (PropMap propMap : propMaps) {
Class eClass = propMap.getPropClass();
String mName = propMap.getPropName();
Class gClass = ClassReflectionTools.getReturnTypeForGetter(rt, mName);
Assert.assertEquals(eClass, gClass);
}
nop();
}
@Test
public void shouldMapPropertyValuesCorrectly() throws ClassReflectionToolsException {
Class c;
Collection sList;
for (PropMap propMap : propMaps) {
Class eClass = propMap.getPropClass();
String mName = propMap.getPropName();
Object eVal = propMap.getPropVal();
Class gClass = ClassReflectionTools.getReturnTypeForGetter(rt, mName);
Object gVal = ClassReflectionTools.invokeGetter(rt, mName);
Assert.assertEquals(eVal, gVal);
nop();
}
nop();
}
private void nop() {
}
@Test
public void shouldMapRootElementCorrectly() {
Integer x = new Integer(-1);
Assert.assertEquals(ClassReflectionTools.getXmlRootElementName(rt), "testRoot");
Assert.assertEquals(ClassReflectionTools.getXmlRootElementName(x), null);
}
@Test
public void shouldMapRootElementNameSpaceCorrectly() {
Integer x = new Integer(-1);
Assert.assertEquals(ClassReflectionTools.getXmlRootElementNameSpace(rt), "bsd");
Assert.assertEquals(ClassReflectionTools.getXmlRootElementNameSpace(x), null);
}
@Ignore
@XmlRootElement(name = "testRoot", namespace = "bsd")
public class ReturnTypeTest {
private Integer xInteger;
private String xString;
private int xint;
private Double pi;
private double xdouble;
private List<String> xStrList;
public ReturnTypeTest() {
xInteger = 100;
xString = "TestString";
xint = -1;
xdouble = 1.0;
pi = new Double("3.1415928");
xStrList = new ArrayList<String>();
xStrList.add("Str1");
xStrList.add("Str2");
}
public Integer getxInteger() {
return xInteger;
}
public String getxString() {
return xString;
}
public int getXint() {
return xint;
}
public Double getPi() {
return pi;
}
public double getXdouble() {
return xdouble;
}
public List<String> getxStrList() {
return xStrList;
}
}
@Ignore
public class PropMap {
private Class propClass;
private String propName;
private Object propVal;
public PropMap() {
}
public PropMap(Class propClass, String propName, Object val) {
this.propClass = propClass;
this.propName = propName;
this.propVal = val;
}
public Class getPropClass() {
return propClass;
}
public String getPropName() {
return propName;
}
public Object getPropVal() {
return propVal;
}
}
}