package com.twelvemonkeys.lang;
import junit.framework.TestCase;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
/**
* BeanUtilTestCase
* <p/>
*
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
* @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/test/java/com/twelvemonkeys/lang/BeanUtilTestCase.java#1 $
*/
public class BeanUtilTestCase extends TestCase {
public void testConfigureNoMehtod() {
TestBean bean = new TestBean();
Map<String, String> map = new HashMap<String, String>();
map.put("noSuchMethod", "jaffa");
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
}
public void testConfigureNoMethodArgs() {
TestBean bean = new TestBean();
Map<String, Object> map = new HashMap<String, Object>();
map.put("doubleValue", new Object()); // Should not be able to convert this
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertNull(bean.getDoubleValue());
}
public void testConfigureNullValue() {
TestBean bean = new TestBean();
Map<String, Object> map = new HashMap<String, Object>();
map.put("stringValue", null);
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertNull(bean.getStringValue());
}
public void testConfigureSimple() {
TestBean bean = new TestBean();
Map<String, Serializable> map = new HashMap<String, Serializable>();
map.put("stringValue", "one");
map.put("intValue", 2);
map.put("doubleValue", .3);
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertEquals("one", bean.getStringValue());
assertEquals(2, bean.getIntValue());
assertEquals(.3, bean.getDoubleValue());
}
public void testConfigureConvert() {
TestBean bean = new TestBean();
Map<String,Serializable> map = new HashMap<String, Serializable>();
map.put("stringValue", 1);
map.put("intValue", "2");
map.put("doubleValue", ".3");
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertEquals("1", bean.getStringValue());
assertEquals(2, bean.getIntValue());
assertEquals(0.3, bean.getDoubleValue());
}
public void testConfigureAmbiguous1() {
TestBean bean = new TestBean();
Map<String, String> map = new HashMap<String, String>();
String value = "one";
map.put("ambiguous", value);
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertNotNull(bean.getAmbiguous());
assertEquals("String converted rather than invoking setAmbiguous(String), ordering not predictable",
"one", bean.getAmbiguous());
assertSame("String converted rather than invoking setAmbiguous(String), ordering not predictable",
value, bean.getAmbiguous());
}
public void testConfigureAmbiguous2() {
TestBean bean = new TestBean();
Map<String, Integer> map = new HashMap<String, Integer>();
Integer value = 2;
map.put("ambiguous", value);
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertNotNull(bean.getAmbiguous());
assertEquals("Integer converted rather than invoking setAmbiguous(Integer), ordering not predictable",
2, bean.getAmbiguous());
assertSame("Integer converted rather than invoking setAmbiguous(Integer), ordering not predictable",
value, bean.getAmbiguous());
}
public void testConfigureAmbiguous3() {
TestBean bean = new TestBean();
Map<String, Double> map = new HashMap<String, Double>();
Double value = .3;
map.put("ambiguous", value);
try {
BeanUtil.configure(bean, map);
}
catch (InvocationTargetException e) {
fail(e.getMessage());
}
assertNotNull(bean.getAmbiguous());
assertEquals("Object converted rather than invoking setAmbiguous(Object), ordering not predictable",
value.getClass(), bean.getAmbiguous().getClass());
assertSame("Object converted rather than invoking setAmbiguous(Object), ordering not predictable",
value, bean.getAmbiguous());
}
static class TestBean {
private String stringVal;
private int intVal;
private Double doubleVal;
private Object ambiguous;
public Double getDoubleValue() {
return doubleVal;
}
public int getIntValue() {
return intVal;
}
public String getStringValue() {
return stringVal;
}
@SuppressWarnings("UnusedDeclaration")
public void setStringValue(String pString) {
stringVal = pString;
}
@SuppressWarnings("UnusedDeclaration")
public void setIntValue(int pInt) {
intVal = pInt;
}
@SuppressWarnings("UnusedDeclaration")
public void setDoubleValue(Double pDouble) {
doubleVal = pDouble;
}
@SuppressWarnings("UnusedDeclaration")
public void setAmbiguous(String pString) {
ambiguous = pString;
}
@SuppressWarnings("UnusedDeclaration")
public void setAmbiguous(Object pObject) {
ambiguous = pObject;
}
@SuppressWarnings("UnusedDeclaration")
public void setAmbiguous(Integer pInteger) {
ambiguous = pInteger;
}
@SuppressWarnings("UnusedDeclaration")
public void setAmbiguous(int pInt) {
ambiguous = (long) pInt; // Just to differentiate...
}
public Object getAmbiguous() {
return ambiguous;
}
}
}