package cn.org.rapid_framework.util;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.math.RandomUtils;
import cn.org.rapid_framework.util.fortest.Role;
public class MapAndObjectTest extends TestCase {
Map map = new HashMap();
Role role = new Role();
public void setUp() {
map.put("java", "diy");
map.put("roleId", "from map");
map.put(123, 456);
role.setRoleName("manager");
role.setRoleId(2009L);
}
public void testWithNull() {
MapAndObject m = new MapAndObject(null,null);
assertEquals(null,m.get("1"));
m = new MapAndObject(map,null);
assertEquals("diy",m.get("java"));
m = new MapAndObject(null,role);
assertEquals("manager",m.get("roleName"));
}
public void test() {
MapAndObject m = new MapAndObject(map,role);
assertEquals("from map",m.get("roleId"));
map.put("roleId", null);
assertEquals(2009L ,m.get("roleId"));
role.setRoleId(null);
assertEquals(null ,m.get("roleId"));
assertNull(m.get("9527name"));
assertNull(m.get("notexistmethod"));
}
public void testPerfoemance() {
MapAndObject m = new MapAndObject(map,role);
long start = System.currentTimeMillis();
int count = 10000 * 10;
for(int i = 0; i < count; i++) {
String random = RandomStringUtils.randomAlphabetic(2);
assertNull(m.get(random));
}
long cost = System.currentTimeMillis() - start;
System.out.println("MapAndObject.get() costTime:"+cost+" per request cost:"+(cost/(float)count)+" count="+count);
assertTrue("MapAndObject.get() costTime:234 per request cost:0.00234 count=100000",cost < 1000);
}
public void testPerfoemance2() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
long start = System.currentTimeMillis();
int count = 10000 * 10;
for(int i = 0; i < count; i++) {
BeanUtils.describe(role);
}
long cost = System.currentTimeMillis() - start;
System.out.println("BeanUtils.describe(role) costTime:"+cost+" per request cost:"+(cost/(float)count));
}
public void testPropertyUtils() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
map.put("sex", 123L);
assertEquals(123L,PropertyUtils.getProperty(map, "sex"));
assertEquals("123",BeanUtils.getProperty(map, "sex"));
}
public void testReadonly() {
MapAndObject m = new MapAndObject(map,role);
assertEquals("Readonly from Role.java",m.get("readonly"));
assertEquals(null,m.get("writeonly"));
}
}