@Test public void testBeanSerialize() throws Exception {
  Bean bean=new Bean();
  bean.setDate(new Date());
  bean.setStatus(PersonStatus.ENABLED);
  bean.setType(Bean.class);
  bean.setArray(new Phone[]{});
  Collection<Phone> collection=new ArrayList<Phone>();
  bean.setCollection(collection);
  Phone phone=new Phone();
  collection.add(phone);
  Map<String,FullAddress> map=new HashMap<String,FullAddress>();
  FullAddress address=new FullAddress();
  map.put("first",address);
  bean.setAddresses(map);
  JavaBeanDescriptor descriptor=JavaBeanSerializeUtil.serialize(bean,JavaBeanAccessor.METHOD);
  Assert.assertTrue(descriptor.isBeanType());
  assertEqualsPrimitive(bean.getDate(),descriptor.getProperty("date"));
  assertEqualsEnum(bean.getStatus(),descriptor.getProperty("status"));
  Assert.assertTrue(((JavaBeanDescriptor)descriptor.getProperty("type")).isClassType());
  Assert.assertEquals(Bean.class.getName(),((JavaBeanDescriptor)descriptor.getProperty("type")).getClassNameProperty());
  Assert.assertTrue(((JavaBeanDescriptor)descriptor.getProperty("array")).isArrayType());
  Assert.assertEquals(0,((JavaBeanDescriptor)descriptor.getProperty("array")).propertySize());
  JavaBeanDescriptor property=(JavaBeanDescriptor)descriptor.getProperty("collection");
  Assert.assertTrue(property.isCollectionType());
  Assert.assertEquals(1,property.propertySize());
  property=(JavaBeanDescriptor)property.getProperty(0);
  Assert.assertTrue(property.isBeanType());
  Assert.assertEquals(Phone.class.getName(),property.getClassName());
  Assert.assertEquals(0,property.propertySize());
  property=(JavaBeanDescriptor)descriptor.getProperty("addresses");
  Assert.assertTrue(property.isMapType());
  Assert.assertEquals(bean.getAddresses().getClass().getName(),property.getClassName());
  Assert.assertEquals(1,property.propertySize());
  Map.Entry<Object,Object> entry=property.iterator().next();
  Assert.assertTrue(((JavaBeanDescriptor)entry.getKey()).isPrimitiveType());
  Assert.assertEquals("first",((JavaBeanDescriptor)entry.getKey()).getPrimitiveProperty());
  Assert.assertTrue(((JavaBeanDescriptor)entry.getValue()).isBeanType());
  Assert.assertEquals(FullAddress.class.getName(),((JavaBeanDescriptor)entry.getValue()).getClassName());
  Assert.assertEquals(0,((JavaBeanDescriptor)entry.getValue()).propertySize());
}
