/*
* Created at 23.03.2004 14:39:41
* Copyright (c) 2004 by Norman Fomferra
*/
package com.bc.util.bean;
import junit.framework.TestCase;
import java.awt.Color;
import java.io.File;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class BeanUtilsTest extends TestCase {
public BeanUtilsTest(String s) {
super(s);
}
public void testSupportedPropertyTypes() throws ParseException {
final Properties properties = new Properties();
properties.put("booleanProp", "true");
properties.put("booleanObjProp", "true");
properties.put("byteProp", "35");
properties.put("byteObjProp", "-36");
properties.put("charProp", "p");
properties.put("charObjProp", "q");
properties.put("shortProp", "1293");
properties.put("shortObjProp", "-1294");
properties.put("intProp", "85208");
properties.put("intObjProp", "-85209");
properties.put("longProp", "98432985245");
properties.put("longObjProp", "-98432985246");
properties.put("floatProp", "785.435");
properties.put("floatObjProp", "-785.436");
properties.put("doubleProp", "2809.987465");
properties.put("doubleObjProp", "-2809.987466");
properties.put("stringObjProp", "Rallomat");
properties.put("fileObjProp", "/usr/local");
properties.put("colorObjProp", "65,96,238");
properties.put("delegateProp.doubleProp", "1234.5678");
properties.put("delegateProp.colorObjProp", "86,154,12");
properties.put("objArrayProp[0].doubleProp", "0");
properties.put("objArrayProp[0].colorObjProp", "1,2,3,4");
properties.put("objArrayProp[1].doubleProp", "1");
properties.put("objArrayProp[1].colorObjProp", "2,3,4,5");
properties.put("intArrayProp[0]", "10");
properties.put("intArrayProp[1]", "20");
properties.put("intArrayProp[2]", "30");
properties.put("mapProp.prop1", "Hanni");
properties.put("mapProp.prop2", "Nanni");
properties.put("mapProp.prop3.prop31", "Pfanni");
properties.put("mapProp.prop3.prop32", "Susanni");
properties.put("mapProp.prop4.doubleProp", "0.12345");
properties.put("mapProp.prop4.fileObjProp", "/usr/local");
final TestBean bean = new TestBean();
// final HashMap prop3 = new HashMap();
// prop3.put("prop31", "Pfanni");
// prop3.put("prop32", "Susanni");
// bean.getMapProp().put("prop3", prop3);
bean.getMapProp().put("prop4", new TestBean());
BeanUtils.setBeanProperties(bean, properties);
assertEquals(true, bean.getBooleanProp());
assertEquals(Boolean.TRUE, bean.getBooleanObjProp());
assertEquals(35, bean.getByteProp());
assertEquals(new Byte((byte) -36), bean.getByteObjProp());
assertEquals('p', bean.getCharProp());
assertEquals(new Character('q'), bean.getCharObjProp());
assertEquals(1293, bean.getShortProp());
assertEquals(new Short((short) -1294), bean.getShortObjProp());
assertEquals(85208, bean.getIntProp());
assertEquals(new Integer(-85209), bean.getIntObjProp());
assertEquals(98432985245L, bean.getLongProp());
assertEquals(new Long(-98432985246L), bean.getLongObjProp());
assertEquals(785.435, bean.getFloatProp(), 1e-5);
assertEquals(new Float(-785.436), bean.getFloatObjProp());
assertEquals(2809.987465, bean.getDoubleProp(), 1e-10);
assertEquals(new Double(-2809.987466), bean.getDoubleObjProp());
assertEquals("Rallomat", bean.getStringObjProp());
assertEquals(new File("/usr/local"), bean.getFileObjProp());
assertEquals(new Color(65, 96, 238), bean.getColorObjProp());
assertNotNull(bean.getDelegateProp());
assertNull(bean.getDelegateProp().getDelegateProp());
assertEquals(1234.5678, bean.getDelegateProp().getDoubleProp(), 1e-10);
assertEquals(new Color(86, 154, 12), bean.getDelegateProp().getColorObjProp());
assertNotNull(bean.getObjArrayProp());
assertEquals(2, bean.getObjArrayProp().length);
assertEquals(0.0, bean.getObjArrayProp()[0].getDoubleProp(), 1e-10);
assertEquals(new Color(1, 2, 3, 4), bean.getObjArrayProp()[0].getColorObjProp());
assertEquals(1.0, bean.getObjArrayProp()[1].getDoubleProp(), 1e-10);
assertEquals(new Color(2, 3, 4, 5), bean.getObjArrayProp()[1].getColorObjProp());
// todo 3 nf/** - implement if required (and time allows)
// assertNotNull(bean.getIntArrayProp());
// assertEquals(3, bean.getIntArrayProp().length);
// assertEquals(10, bean.getIntArrayProp()[0]);
// assertEquals(20, bean.getIntArrayProp()[1]);
// assertEquals(30, bean.getIntArrayProp()[2]);
assertEquals("Hanni", bean.getMapProp().get("prop1"));
assertEquals("Nanni", bean.getMapProp().get("prop2"));
assertEquals(HashMap.class, bean.getMapProp().get("prop3").getClass());
assertEquals("Pfanni", ((Map) bean.getMapProp().get("prop3")).get("prop31"));
assertEquals("Susanni", ((Map) bean.getMapProp().get("prop3")).get("prop32"));
assertEquals(0.12345, ((TestBean) bean.getMapProp().get("prop4")).getDoubleProp(), 1e-10);
assertEquals(new File("/usr/local"), ((TestBean) bean.getMapProp().get("prop4")).getFileObjProp());
}
public void testUnsupportedPropertyTypes() throws ParseException {
final Properties properties = new Properties();
properties.put("delegateProp", "Na, na, na, na!");
final TestBean bean = new TestBean();
try {
BeanUtils.setBeanProperties(bean, properties);
fail("ParseException expected");
} catch (ParseException expected) {
}
}
public void testPropertyNamingConventions() throws ParseException {
final Properties properties = new Properties();
final TestBean bean = new TestBean();
properties.put("booleanProp", "true");
properties.put("intProp", "3456");
BeanUtils.setBeanProperties(bean, properties);
assertEquals(true, bean.getBooleanProp());
assertEquals(3456, bean.getIntProp());
properties.remove("booleanProp");
properties.remove("intProp");
properties.put("BooleanProp", "false");
properties.put("IntProp", "-6543");
BeanUtils.setBeanProperties(bean, properties);
assertEquals(false, bean.getBooleanProp());
assertEquals(-6543, bean.getIntProp());
properties.remove("booleanProp");
properties.remove("intProp");
properties.put("BOOLEANPROP", "true");
properties.put("INTPROP", "3456");
BeanUtils.setBeanProperties(bean, properties);
assertEquals(false, bean.getBooleanProp());
assertEquals(-6543, bean.getIntProp());
}
public void testInvalidPropertyValues() {
try {
final Properties properties = new Properties();
final TestBean bean = new TestBean();
properties.put("charProp", "abc");
BeanUtils.setBeanProperties(bean, properties);
fail();
} catch (ParseException expected) {
}
try {
final Properties properties = new Properties();
final TestBean bean = new TestBean();
properties.put("intProp", "hj845");
BeanUtils.setBeanProperties(bean, properties);
fail();
} catch (ParseException expected) {
}
try {
final Properties properties = new Properties();
final TestBean bean = new TestBean();
properties.put("doubleProp", "845,543");
BeanUtils.setBeanProperties(bean, properties);
fail();
} catch (ParseException expected) {
}
try {
final Properties properties = new Properties();
final TestBean bean = new TestBean();
properties.put("colorObjProp", "32,z9,43");
BeanUtils.setBeanProperties(bean, properties);
fail();
} catch (ParseException expected) {
}
}
public static class TestBean {
private boolean booleanProp;
private Boolean booleanObjProp;
private byte byteProp;
private Byte byteObjProp;
private char charProp;
private Character charObjProp;
private short shortProp;
private Short shortObjProp;
private int intProp;
private Integer intObjProp;
private long longProp;
private Long longObjProp;
private float floatProp;
private Float floatObjProp;
private double doubleProp;
private Double doubleObjProp;
private String stringObjProp;
private File fileObjProp;
private Color colorObjProp;
private TestBean delegateProp;
private TestBean[] objArrayProp;
private int[] intArrayProp;
private Map mapProp;
public TestBean() {
mapProp = new HashMap();
}
public boolean getBooleanProp() {
return booleanProp;
}
public void setBooleanProp(boolean booleanProp) {
this.booleanProp = booleanProp;
}
public Boolean getBooleanObjProp() {
return booleanObjProp;
}
public void setBooleanObjProp(Boolean booleanObjProp) {
this.booleanObjProp = booleanObjProp;
}
public byte getByteProp() {
return byteProp;
}
public void setByteProp(byte byteProp) {
this.byteProp = byteProp;
}
public Byte getByteObjProp() {
return byteObjProp;
}
public void setByteObjProp(Byte byteObjProp) {
this.byteObjProp = byteObjProp;
}
public char getCharProp() {
return charProp;
}
public void setCharProp(char charProp) {
this.charProp = charProp;
}
public Character getCharObjProp() {
return charObjProp;
}
public void setCharObjProp(Character charObjProp) {
this.charObjProp = charObjProp;
}
public short getShortProp() {
return shortProp;
}
public void setShortProp(short shortProp) {
this.shortProp = shortProp;
}
public Short getShortObjProp() {
return shortObjProp;
}
public void setShortObjProp(Short shortObjProp) {
this.shortObjProp = shortObjProp;
}
public int getIntProp() {
return intProp;
}
public void setIntProp(int intProp) {
this.intProp = intProp;
}
public Integer getIntObjProp() {
return intObjProp;
}
public void setIntObjProp(Integer intObjProp) {
this.intObjProp = intObjProp;
}
public long getLongProp() {
return longProp;
}
public void setLongProp(long longProp) {
this.longProp = longProp;
}
public Long getLongObjProp() {
return longObjProp;
}
public void setLongObjProp(Long longObjProp) {
this.longObjProp = longObjProp;
}
public float getFloatProp() {
return floatProp;
}
public void setFloatProp(float floatProp) {
this.floatProp = floatProp;
}
public Float getFloatObjProp() {
return floatObjProp;
}
public void setFloatObjProp(Float floatObjProp) {
this.floatObjProp = floatObjProp;
}
public double getDoubleProp() {
return doubleProp;
}
public void setDoubleProp(double doubleProp) {
this.doubleProp = doubleProp;
}
public Double getDoubleObjProp() {
return doubleObjProp;
}
public void setDoubleObjProp(Double doubleObjProp) {
this.doubleObjProp = doubleObjProp;
}
public String getStringObjProp() {
return stringObjProp;
}
public void setStringObjProp(String stringObjProp) {
this.stringObjProp = stringObjProp;
}
public File getFileObjProp() {
return fileObjProp;
}
public void setFileObjProp(File fileObjProp) {
this.fileObjProp = fileObjProp;
}
public Color getColorObjProp() {
return colorObjProp;
}
public void setColorObjProp(Color colorObjProp) {
this.colorObjProp = colorObjProp;
}
public TestBean getDelegateProp() {
return delegateProp;
}
public void setDelegateProp(TestBean delegateProp) {
this.delegateProp = delegateProp;
}
public TestBean[] getObjArrayProp() {
return objArrayProp;
}
public void setObjArrayProp(TestBean[] objArrayProp) {
this.objArrayProp = objArrayProp;
}
public int[] getIntArrayProp() {
return intArrayProp;
}
public void setIntArrayProp(int[] intArrayProp) {
this.intArrayProp = intArrayProp;
}
public Map getMapProp() {
return mapProp;
}
public void setMapProp(Map mapProp) {
this.mapProp = mapProp;
}
}
}