📄 mappertest.java
字号:
/*
* Copyright 2005-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.sf.dozer.util.mapping;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.dozer.util.mapping.util.TestDataFactory;
import net.sf.dozer.util.mapping.vo.AnotherTestObject;
import net.sf.dozer.util.mapping.vo.AnotherTestObjectPrime;
import net.sf.dozer.util.mapping.vo.Apple;
import net.sf.dozer.util.mapping.vo.Car;
import net.sf.dozer.util.mapping.vo.CustomConverterWrapper;
import net.sf.dozer.util.mapping.vo.CustomConverterWrapperPrime;
import net.sf.dozer.util.mapping.vo.CustomDoubleObject;
import net.sf.dozer.util.mapping.vo.CustomDoubleObjectIF;
import net.sf.dozer.util.mapping.vo.DehydrateTestObject;
import net.sf.dozer.util.mapping.vo.FurtherTestObject;
import net.sf.dozer.util.mapping.vo.FurtherTestObjectPrime;
import net.sf.dozer.util.mapping.vo.HintedOnly;
import net.sf.dozer.util.mapping.vo.HydrateTestObject;
import net.sf.dozer.util.mapping.vo.MethodFieldTestObject;
import net.sf.dozer.util.mapping.vo.MethodFieldTestObject2;
import net.sf.dozer.util.mapping.vo.NoCustomMappingsObject;
import net.sf.dozer.util.mapping.vo.NoCustomMappingsObjectPrime;
import net.sf.dozer.util.mapping.vo.NoDefaultConstructor;
import net.sf.dozer.util.mapping.vo.NoReadMethod;
import net.sf.dozer.util.mapping.vo.NoReadMethodPrime;
import net.sf.dozer.util.mapping.vo.NoSuperClass;
import net.sf.dozer.util.mapping.vo.NoWriteMethod;
import net.sf.dozer.util.mapping.vo.NoWriteMethodPrime;
import net.sf.dozer.util.mapping.vo.OneWayObject;
import net.sf.dozer.util.mapping.vo.OneWayObjectPrime;
import net.sf.dozer.util.mapping.vo.Orange;
import net.sf.dozer.util.mapping.vo.SubClass;
import net.sf.dozer.util.mapping.vo.SubClassPrime;
import net.sf.dozer.util.mapping.vo.TestCustomConverterHashMapObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterHashMapPrimeObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterObject;
import net.sf.dozer.util.mapping.vo.TestCustomConverterObjectPrime;
import net.sf.dozer.util.mapping.vo.TestObject;
import net.sf.dozer.util.mapping.vo.TestObjectPrime;
import net.sf.dozer.util.mapping.vo.TestReferenceFoo;
import net.sf.dozer.util.mapping.vo.TestReferenceFooPrime;
import net.sf.dozer.util.mapping.vo.TestReferenceObject;
import net.sf.dozer.util.mapping.vo.TestReferencePrimeObject;
import net.sf.dozer.util.mapping.vo.TheFirstSubClass;
import net.sf.dozer.util.mapping.vo.Van;
import net.sf.dozer.util.mapping.vo.Vehicle;
import net.sf.dozer.util.mapping.vo.WeirdGetter;
import net.sf.dozer.util.mapping.vo.WeirdGetter2;
import net.sf.dozer.util.mapping.vo.WeirdGetterPrime;
import net.sf.dozer.util.mapping.vo.WeirdGetterPrime2;
import net.sf.dozer.util.mapping.vo.deep.DestDeepObj;
import net.sf.dozer.util.mapping.vo.deep.HomeDescription;
import net.sf.dozer.util.mapping.vo.deep.House;
import net.sf.dozer.util.mapping.vo.deep.Person;
import net.sf.dozer.util.mapping.vo.deep.Room;
import net.sf.dozer.util.mapping.vo.deep.SrcDeepObj;
import net.sf.dozer.util.mapping.vo.deep.SrcNestedDeepObj;
import net.sf.dozer.util.mapping.vo.inheritance.AnotherSubClass;
import net.sf.dozer.util.mapping.vo.inheritance.AnotherSubClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.BaseSubClassCombined;
import net.sf.dozer.util.mapping.vo.inheritance.GenericAbstractSuper;
import net.sf.dozer.util.mapping.vo.inheritance.GenericIF;
import net.sf.dozer.util.mapping.vo.inheritance.S2Class;
import net.sf.dozer.util.mapping.vo.inheritance.S2ClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.SClass;
import net.sf.dozer.util.mapping.vo.inheritance.SClassPrime;
import net.sf.dozer.util.mapping.vo.inheritance.Specific3;
import net.sf.dozer.util.mapping.vo.inheritance.SpecificObject;
import net.sf.dozer.util.mapping.vo.inheritance.WrapperSpecific;
import net.sf.dozer.util.mapping.vo.inheritance.WrapperSpecificPrime;
import net.sf.dozer.util.mapping.vo.map.CustomMap;
import net.sf.dozer.util.mapping.vo.map.CustomMapIF;
import net.sf.dozer.util.mapping.vo.map.MapTestObject;
import net.sf.dozer.util.mapping.vo.map.MapTestObjectPrime;
import net.sf.dozer.util.mapping.vo.map.MapToProperty;
import net.sf.dozer.util.mapping.vo.map.PropertyToMap;
import net.sf.dozer.util.mapping.vo.self.Account;
import net.sf.dozer.util.mapping.vo.self.SimpleAccount;
import org.apache.commons.lang.SerializationUtils;
/**
* @author garsombke.franz
* @author sullins.ben
* @author tierney.matt
*
* Having good unit tests is very important for the bean mapper since there are so many mapping combinations.
*/
public class MapperTest extends DozerTestBase {
private static MapperIF mapper;
protected void setUp() throws Exception {
super.setUp();
if (mapper == null) {
mapper = getNewMapper(new String[] { "dozerBeanMapping.xml" });
}
}
public void testNoSourceObject() throws Exception {
try {
mapper.map(null, TestObjectPrime.class);
} catch (MappingException e) {
assertEquals("source object must not be null", e.getMessage());
}
}
public void testNoDestinationClass() throws Exception {
try {
mapper.map(new TestObjectPrime(), null);
} catch (MappingException e) {
assertEquals("destination class must not be null", e.getMessage());
}
}
public void testNoDefaultConstructor() throws Exception {
try {
mapper.map("test", NoDefaultConstructor.class);
} catch (MappingException e) {
assertEquals("java.lang.InstantiationException: net.sf.dozer.util.mapping.vo.NoDefaultConstructor", e
.getMessage());
}
}
public void testNoSourceValueIterateFieldMap() throws Exception {
DehydrateTestObject inputDto = new DehydrateTestObject();
HydrateTestObject hto = (HydrateTestObject) mapper.map(inputDto, HydrateTestObject.class);
assertEquals(TestDataFactory.getExpectedTestNoSourceValueIterateFieldMapHydrateTestObject(), hto);
}
public void testCustomGetterSetterMap() throws Exception {
WeirdGetter inputDto = new WeirdGetter();
inputDto.placeValue("theValue");
inputDto.setWildValue("wild");
WeirdGetterPrime prime = (WeirdGetterPrime) mapper.map(inputDto, WeirdGetterPrime.class);
assertNull(prime.getWildValue()); // testing global wildcard, expect this to be null
assertEquals(inputDto.buildValue(), prime.getValue());
inputDto = (WeirdGetter) mapper.map(prime, WeirdGetter.class);
assertEquals(inputDto.buildValue(), prime.getValue());
WeirdGetterPrime2 inputDto2 = new WeirdGetterPrime2();
inputDto2.placeValue("theValue");
WeirdGetter2 prime2 = (WeirdGetter2) mapper.map(inputDto2, WeirdGetter2.class);
assertEquals(inputDto2.buildValue(), prime2.getValue());
inputDto2 = (WeirdGetterPrime2) mapper.map(prime2, WeirdGetterPrime2.class);
assertEquals(inputDto2.buildValue(), prime2.getValue());
}
public void testIncompatibleMapping() throws Exception {
mapper.map(new Vehicle(), TestObject.class);
// can not assert anything...no exception should be thrown and we should have a log statement
}
public void testNoClassMappings() throws Exception {
// Should attempt mapping even though it is not in the beanmapping.xml file
NoCustomMappingsObjectPrime dest1 = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestNoClassMappingsNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest1, NoCustomMappingsObject.class);
NoCustomMappingsObjectPrime dest3 = (NoCustomMappingsObjectPrime) mapper.map(source,
NoCustomMappingsObjectPrime.class);
assertEquals(dest1, dest3);
// This tests that we implicitly map an inner object to an inner object without defining it in the mapping file
TestObject to = new TestObject();
to.setNoMappingsObj(TestDataFactory.getInputTestNoClassMappingsNoCustomMappingsObject());
TestObjectPrime dest2 = (TestObjectPrime) mapper.map(to, TestObjectPrime.class);
TestObject source2 = (TestObject) mapper.map(dest2, TestObject.class);
TestObjectPrime dest4 = (TestObjectPrime) mapper.map(source2, TestObjectPrime.class);
assertEquals(dest2, dest4);
}
public void testMapField() throws Exception {
NoCustomMappingsObjectPrime dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestMapFieldWithMapNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
NoCustomMappingsObjectPrime dest2 = (NoCustomMappingsObjectPrime) mapper.map(source,
NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
dest = (NoCustomMappingsObjectPrime) mapper.map(new NoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
// empty Map
dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestMapFieldWithEmptyMapNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
}
public void testSetField() throws Exception {
// basic set --> set
NoCustomMappingsObjectPrime dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestSetFieldWithSetNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
NoCustomMappingsObject source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
NoCustomMappingsObjectPrime dest2 = (NoCustomMappingsObjectPrime) mapper.map(source,
NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
// null set --> set
dest = (NoCustomMappingsObjectPrime) mapper.map(new NoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
// empty set --> set
dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestSetFieldWithSetEmptyCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
// complex type set -->
dest = (NoCustomMappingsObjectPrime) mapper.map(TestDataFactory
.getInputTestSetFieldComplexSetNoCustomMappingsObject(), NoCustomMappingsObjectPrime.class);
source = (NoCustomMappingsObject) mapper.map(dest, NoCustomMappingsObject.class);
dest2 = (NoCustomMappingsObjectPrime) mapper.map(source, NoCustomMappingsObjectPrime.class);
assertEquals(dest2, dest);
}
public void testListField() throws Exception {
// test empty list --> empty list
TestObjectPrime dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListFieldEmptyListTestObject(),
TestObjectPrime.class);
TestObject source = (TestObject) mapper.map(dest, TestObject.class);
TestObjectPrime dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
assertEquals(dest2, dest);
// test empty array --> empty list
dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListFieldArrayListTestObject(),
TestObjectPrime.class);
source = (TestObject) mapper.map(dest, TestObject.class);
dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
assertEquals(dest2, dest);
}
public void testListUsingDestHint() throws Exception {
TestObjectPrime dest = (TestObjectPrime) mapper.map(TestDataFactory.getInputTestListUsingDestHintTestObject(),
TestObjectPrime.class);
TestObject source = (TestObject) mapper.map(dest, TestObject.class);
TestObjectPrime dest2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
assertEquals(dest, dest2);
}
public void testExcludeFields() throws Exception {
// Map
TestObjectPrime prime = (TestObjectPrime) mapper.map(TestDataFactory.getInputGeneralMappingTestObject(),
TestObjectPrime.class);
assertEquals("excludeMe", prime.getExcludeMe());
assertEquals("excludeMeOneWay", prime.getExcludeMeOneWay());
// map back
TestObject to = (TestObject) mapper.map( prime, TestObject.class);
assertNull(to.getExcludeMe());
assertEquals("excludeMeOneWay", to.getExcludeMeOneWay());
}
public void testGeneralMapping() throws Exception {
// Map
TestObject to = TestDataFactory.getInputGeneralMappingTestObject();
TestObjectPrime prime = (TestObjectPrime) mapper.map(to, TestObjectPrime.class);
// valdidate that we copied by object reference -
TestObject source = (TestObject) mapper.map(prime, TestObject.class);
TestObjectPrime prime2 = (TestObjectPrime) mapper.map(source, TestObjectPrime.class);
assertEquals(prime2, prime);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -