/*
* Created at 23.03.2004 14:39:41
* Copyright (c) 2004 by Norman Fomferra
*/
package com.bc.util.prop;
import junit.framework.TestCase;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class PropertyTest extends TestCase {
public PropertyTest(String s) {
super(s);
}
public void testGetName() {
Property p;
p = PropertyFactory.createProperty(" rallo");
assertEquals("rallo", p.getName());
p = PropertyFactory.createProperty(TestBean.class, " ai[8 ]");
assertEquals("ai[8]", p.getName());
// todo 3 nf/** - getting error "'aaf' is not a Java array", why?
// p = PropertyFactory.createProperty("aaf [8] [4]");
// assertEquals("aaf[8][4]", p.getName());
p = PropertyFactory.createProperty("m .rallo");
assertEquals("m.rallo", p.getName());
p = PropertyFactory.createProperty("m[\"rallo\"] ");
assertEquals("m.rallo", p.getName());
p = PropertyFactory.createProperty(" m [ \"ral-lo\" ]");
assertEquals("m[\"ral-lo\"]", p.getName());
}
public void testGetSetValue() {
Property p;
final TestBean testBean = new TestBean();
p = PropertyFactory.createProperty(TestBean.class, "vi");
assertOutIsIn(testBean, p, new Integer(4357));
p = PropertyFactory.createProperty(TestBean.class, "vf");
assertOutIsIn(testBean, p, new Double(3425.2436));
p = PropertyFactory.createProperty(TestBean.class, "vs");
assertOutIsIn(testBean, p, new String("rallamann"));
p = PropertyFactory.createProperty(TestBean.class, "vd");
assertOutIsIn(testBean, p, new Date());
p = PropertyFactory.createProperty(TestBean.class, "vo");
assertOutIsIn(testBean, p, new TestBean());
p = PropertyFactory.createProperty(TestBean.class, "vo.vf");
assertOutIsIn(testBean, p, new Double(0.05));
p = PropertyFactory.createProperty(TestBean.class, "vo.vd");
assertOutIsIn(testBean, p, null);
p = PropertyFactory.createProperty(TestBean.class, "vm");
assertOutIsIn(testBean, p, new HashMap());
p = PropertyFactory.createProperty(TestBean.class, "vm.x");
assertOutIsIn(testBean, p, new Float(3.5f));
p = PropertyFactory.createProperty(TestBean.class, "vm.y");
assertOutIsIn(testBean, p, new Float(-2.8f));
p = PropertyFactory.createProperty(TestBean.class, "vm.b");
assertOutIsIn(testBean, p, new TestBean());
p = PropertyFactory.createProperty(TestBean.class, "vm.b.vi");
assertOutIsIn(testBean, p, new Integer(23));
p = PropertyFactory.createProperty(TestBean.class, "ai");
assertOutIsIn(testBean, p, new int[3]);
p = PropertyFactory.createProperty(TestBean.class, "ai[0]");
assertOutIsIn(testBean, p, new Integer(43));
p = PropertyFactory.createProperty(TestBean.class, "ai[1]");
assertOutIsIn(testBean, p, new Integer(324));
p = PropertyFactory.createProperty(TestBean.class, "ai[2]");
assertOutIsIn(testBean, p, new Integer(-43));
p = PropertyFactory.createProperty(TestBean.class, "af");
assertOutIsIn(testBean, p, new double[0]);
p = PropertyFactory.createProperty(TestBean.class, "as");
assertOutIsIn(testBean, p, new String[0]);
p = PropertyFactory.createProperty(TestBean.class, "ao");
assertOutIsIn(testBean, p, new TestBean[3]);
p = PropertyFactory.createProperty(TestBean.class, "ao[2]");
assertOutIsIn(testBean, p, new TestBean());
p = PropertyFactory.createProperty(TestBean.class, "ao[2].vs");
assertOutIsIn(testBean, p, "Manometer!");
p = PropertyFactory.createProperty(TestBean.class, "am");
assertOutIsIn(testBean, p, new HashMap[3]);
p = PropertyFactory.createProperty(TestBean.class, "am[1]");
assertOutIsIn(testBean, p, new HashMap());
p = PropertyFactory.createProperty(TestBean.class, "am[1].name");
assertOutIsIn(testBean, p, "Bibo");
p = PropertyFactory.createProperty(TestBean.class, "am[1].entries");
assertOutIsIn(testBean, p, new HashMap());
p = PropertyFactory.createProperty(TestBean.class, "am[1].entries.age");
assertOutIsIn(testBean, p, new Integer(32));
}
private void assertOutIsIn(final TestBean testBean, Property p, Object in) {
Object out;
p.setValue(testBean, in);
out = p.getValue(testBean);
assertEquals(in, out);
}
public void testMakeAssignableForMap() {
Property p;
HashMap m1, m2, m3;
Object a, b, c;
p = PropertyFactory.createProperty(Map.class, "a");
m1 = new HashMap();
p.makeAssignable(m1);
a = m1.get("a");
assertNull(a);
p.setValue(m1, "x");
a = m1.get("a");
assertEquals("x", a);
p = PropertyFactory.createProperty(Map.class, "a.b");
m1 = new HashMap();
p.makeAssignable(m1);
a = m1.get("a");
assertTrue(a instanceof HashMap);
m2 = (HashMap) a;
b = m2.get("b");
assertNull(b);
p.setValue(m1, "x");
b = m2.get("b");
assertEquals("x", b);
p = PropertyFactory.createProperty(Map.class, "a.b.c");
m1 = new HashMap();
p.makeAssignable(m1);
a = m1.get("a");
assertTrue(a instanceof HashMap);
m2 = (HashMap) a;
b = m2.get("b");
assertTrue(b instanceof HashMap);
m3 = (HashMap) b;
c = m3.get("c");
assertNull(c);
p.setValue(m1, "x");
c = m3.get("c");
assertEquals("x", c);
}
public void testMakeAssignableForBean() {
Property p;
TestBean b;
p = PropertyFactory.createProperty(TestBean.class, "vi");
b = new TestBean();
assertEquals(0, b.getVi());
p.makeAssignable(b);
assertEquals(0, b.getVi());
p.setValue(b, new Integer(4));
assertEquals(4, b.getVi());
p = PropertyFactory.createProperty(TestBean.class, "vo.vi");
b = new TestBean();
assertNull(b.getVo());
p.makeAssignable(b);
assertNotNull(b.getVo());
assertEquals(0, b.getVo().getVi());
p.setValue(b, new Integer(45));
assertEquals(45, b.getVo().getVi());
p = PropertyFactory.createProperty(TestBean.class, "vo.vo.vi");
b = new TestBean();
assertNull(b.getVo());
p.makeAssignable(b);
assertNotNull(b.getVo());
assertNotNull(b.getVo().getVo());
assertEquals(0, b.getVo().getVo().getVi());
p.setValue(b, new Integer(456));
assertEquals(456, b.getVo().getVo().getVi());
}
public void testMakeAssignableForArray() throws ParseException {
Property p;
TestBean b;
p = PropertyFactory.createProperty(TestBean.class, "ai");
b = new TestBean();
assertNull(b.getAi());
p.makeAssignable(b);
assertNull(b.getAi());
p.setValue(b, new int[0]);
assertNotNull(b.getAi());
p = PropertyFactory.createProperty(TestBean.class, "ao[2].vi");
b = new TestBean();
assertNull(b.getAo());
p.makeAssignable(b);
assertNotNull(b.getAo());
assertEquals(3, b.getAo().length);
assertNull(b.getAo()[0]);
assertNull(b.getAo()[1]);
assertNotNull(b.getAo()[2]);
assertEquals(0, b.getAo()[2].getVi());
p.setValue(b, new Integer(45));
assertEquals(45, b.getAo()[2].getVi());
p = PropertyFactory.createProperty(TestBean.class, "vo.ao[2].vi");
b = new TestBean();
assertNull(b.getVo());
p.makeAssignable(b);
assertNotNull(b.getVo());
assertNotNull(b.getVo().getAo());
assertEquals(3, b.getVo().getAo().length);
assertNull(b.getVo().getAo()[0]);
assertNull(b.getVo().getAo()[1]);
assertNotNull(b.getVo().getAo()[2]);
assertEquals(0, b.getVo().getAo()[2].getVi());
p.setValue(b, new Integer(456));
assertEquals(456, b.getVo().getAo()[2].getVi());
}
public void testGenericPropertyBehaviour() {
final TestBean testBean = new TestBean();
testBean.setVm(new HashMap());
testBean.getVm().put("b", new TestBean());
final Property vm = PropertyFactory.createChildProperty(TestBean.class, "vm");
final Property b = PropertyFactory.createChildProperty(Map.class, "b");
final Property vi = new GenericProperty("vi");
final NestedProperty n1 = new NestedProperty(vm, b);
final NestedProperty n2 = new NestedProperty(n1, vi);
assertEquals(Property.UNKNOWN_TYPE, n2.getType());
assertEquals(new Integer(0), n2.getValue(testBean));
n2.setValue(testBean, new Integer(5));
assertEquals(int.class, n2.getType());
assertEquals(new Integer(5), n2.getValue(testBean));
n2.setValue(testBean, "120");
assertEquals(int.class, n2.getType());
assertEquals(new Integer(120), n2.getValue(testBean));
}
public void testGetTreeAsString() {
TestBean testBean = new TestBean();
HashMap testMap = new HashMap();
testMap.put("testBean", testBean);
Property property = PropertyFactory.createProperty("BlankLinesStatistic.radiance_11.counts");
assertEquals(
"NestedProperty[NestedProperty[MapProperty['BlankLinesStatistic',interface com.bc.util.prop.Property$Unknown],GenericProperty['radiance_11',interface com.bc.util.prop.Property$Unknown]],GenericProperty['counts',interface com.bc.util.prop.Property$Unknown]]",
property.getTreeAsString());
}
}