package com.alibaba.tamper;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import com.alibaba.tamper.core.config.BeanMappingConfigHelper;
import com.alibaba.tamper.object.NestedSrcMappingObject;
import com.alibaba.tamper.object.SrcMappingObject;
import com.alibaba.tamper.object.TargetMappingObject;
/**
* Bean Mapping的相关测试
*
* @author jianghang 2011-5-27 上午11:27:27
*/
public class BeanMappingTest extends TestCase {
private BeanMapping srcMapping = null;
private BeanMapping targetMapping = null;
@Before
public void setUp() {
BeanMappingConfigHelper.getInstance().registerConfig("mapping/mapping.xml");
srcMapping = BeanMapping.create(SrcMappingObject.class, TargetMappingObject.class);
targetMapping = BeanMapping.create(TargetMappingObject.class, SrcMappingObject.class);
}
@Test
public void testBeanToBean_ok() {
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);
srcRef.setIntValue(1);
srcRef.setName("ljh");
srcRef.setStart(true);
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
nestedSrcRef.setBigDecimalValue(BigDecimal.ONE);
srcRef.setMapping(nestedSrcRef);
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个Object对象
srcMapping.mapping(srcRef, targetRef);
assertNotNull(targetRef.getMapping());
SrcMappingObject newSrcRef = new SrcMappingObject();// 反过来再mapping一次
targetMapping.mapping(targetRef, newSrcRef);
assertNotNull(newSrcRef.getMapping());
}
@Test
public void testBeanToBean_defaultValue() {
SrcMappingObject srcRef = new SrcMappingObject();
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
srcRef.setMapping(nestedSrcRef);
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNotNull(targetRef.getMapping());
assertEquals(targetRef.getMapping().getName(), "ljh");// 检查下default value
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNotNull(newSrcRef.getMapping());
assertEquals(newSrcRef.getMapping().getName(), "ljh");// 检查下default value
}
@Test
public void testBeanToBean_nested_null() {// 测试嵌套对象为null
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);// 只复制一个属性
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNull(targetRef.getMapping());
assertEquals(targetRef.getIntegerValue(), srcRef.getIntegerValue());
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNull(newSrcRef.getMapping());
assertEquals(targetRef.getIntegerValue(), newSrcRef.getIntegerValue());
}
@Test
public void testBeanToBean_diff_fieldname_and_convertor() {// 测试名字不同 + 类型转化 + defaultValue
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setName("ljh"); // 名字不同
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
// nestedSrcRef.setBigDecimalValue(BigDecimal.ONE); // 类型不匹配
srcRef.setMapping(nestedSrcRef);
TargetMappingObject targetRef = new TargetMappingObject();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNotNull(targetRef.getMapping());
assertEquals("10", targetRef.getMapping().getValue());
assertEquals(targetRef.getTargetName(), srcRef.getName());
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNotNull(newSrcRef.getMapping());
assertEquals(targetRef.getMapping().getValue(), newSrcRef.getMapping().getBigDecimalValue().toString());
assertEquals(targetRef.getIntegerValue(), newSrcRef.getIntegerValue());
}
@Test
public void testBeanToMap_ok() {
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);
srcRef.setIntValue(1);
srcRef.setName("ljh");
srcRef.setStart(true);
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
nestedSrcRef.setBigDecimalValue(BigDecimal.ONE);
srcRef.setMapping(nestedSrcRef);
Map targetRef = new HashMap();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNotNull(targetRef.get("mapping"));
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNotNull(newSrcRef.getMapping());
}
@Test
public void testBeanToMap_defaultValue() {
SrcMappingObject srcRef = new SrcMappingObject();
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
srcRef.setMapping(nestedSrcRef);
Map targetRef = new HashMap();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNotNull(targetRef.get("mapping"));
assertEquals(((Map) targetRef.get("mapping")).get("name"), "ljh");// 检查下default value
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNotNull(newSrcRef.getMapping());
assertEquals(newSrcRef.getMapping().getName(), "ljh");// 检查下default value
}
@Test
public void testBeanToMap_nested_null() {// 测试嵌套对象为null
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setIntegerValue(1);// 只复制一个属性
Map targetRef = new HashMap();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNull(targetRef.get("mapping"));
// 测试指定了targetClass="BigInteger"
assertEquals(((BigInteger) targetRef.get("integerValue")).intValue(), srcRef.getIntegerValue().intValue());
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNull(newSrcRef.getMapping());
// 测试指定了targetClass="BigInteger"
assertEquals(((BigInteger) targetRef.get("integerValue")).intValue(), newSrcRef.getIntegerValue().intValue());
}
@Test
public void testBeanToMap_diff_fieldname_and_convertor() {// 测试名字不同 + 类型转化 + defaultValue
SrcMappingObject srcRef = new SrcMappingObject();
srcRef.setName("ljh"); // 名字不同
NestedSrcMappingObject nestedSrcRef = new NestedSrcMappingObject();
// nestedSrcRef.setBigDecimalValue(BigDecimal.ONE); // 类型不匹配
srcRef.setMapping(nestedSrcRef);
Map targetRef = new HashMap();// 测试一下mapping到一个HashMap对象
BeanMappingUtil.mapping(srcRef, targetRef);
assertNotNull(targetRef.get("mapping"));
assertEquals(((Map) targetRef.get("mapping")).get("value"), "10");
assertEquals(targetRef.get("targetName"), srcRef.getName());
SrcMappingObject newSrcRef = new SrcMappingObject();
BeanMappingUtil.mapping(targetRef, newSrcRef); // 反过来再mapping一次
assertNotNull(newSrcRef.getMapping());
assertEquals(((Map) targetRef.get("mapping")).get("value"),
newSrcRef.getMapping().getBigDecimalValue().toString());
// 测试指定了targetClass="BigInteger"
assertEquals(((BigInteger) targetRef.get("integerValue")).intValue(), newSrcRef.getIntegerValue().intValue());
}
}