}
@Test
public void testComplexSuperClassMapping() throws Exception {
mapper = getMapper(new String[] { "dozerBeanMapping.xml" });
SubClass obj = testDataFactory.getSubClass();
SubClassPrime objPrime = mapper.map(obj, SubClassPrime.class);
SubClass obj2 = mapper.map(objPrime, SubClass.class);
SubClassPrime objPrime2 = mapper.map(obj2, SubClassPrime.class);
assertEquals("" + obj.getCustomConvert().getAttribute().getTheDouble(), obj2.getCustomConvert().getAttribute().getTheDouble()
+ "");
// one-way mapping
objPrime.setSuperFieldToExcludePrime(null);
assertEquals(objPrime, objPrime2);
// Pass by reference
obj = testDataFactory.getSubClass();
SubClass subClassClone = (SubClass) SerializationUtils.clone(obj);
objPrime = mapper.map(obj, SubClassPrime.class);
mapper.map(objPrime, obj);
obj.setCustomConvert(null);
subClassClone.setCustomConvert(null);
// more objects should be added to the clone from the ArrayList
TheFirstSubClass fsc = newInstance(TheFirstSubClass.class);
fsc.setS("s");
subClassClone.getTestObject().getHintList().add(fsc);
subClassClone.getTestObject().getHintList().add(fsc);
subClassClone.getTestObject().getEqualNamedList().add("1value");
subClassClone.getTestObject().getEqualNamedList().add("2value");
int[] pa = { 0, 1, 2, 3, 4, 0, 1, 2, 3, 4 };
int[] intArray = { 1, 1, 1, 1 };
Integer[] integerArray = { new Integer(1), new Integer(1), new Integer(1), new Integer(1) };
subClassClone.getTestObject().setAnArray(intArray);
subClassClone.getTestObject().setArrayForLists(integerArray);
subClassClone.getTestObject().setPrimArray(pa);
subClassClone.getTestObject().setBlankDate(null);
subClassClone.getTestObject().setBlankStringToLong(null);
subClassClone.getSuperList().add("one");
subClassClone.getSuperList().add("two");
subClassClone.getSuperList().add("three");
// since we copy by reference the attribute copyByReference we need to null it out. The clone method above creates
// two versions of it...
// which is incorrect
obj.getTestObject().setCopyByReference(null);
subClassClone.getTestObject().setCopyByReference(null);
obj.getTestObject().setCopyByReferenceDeep(null);
subClassClone.getTestObject().setCopyByReferenceDeep(null);
obj.getTestObject().setGlobalCopyByReference(null);
subClassClone.getTestObject().setGlobalCopyByReference(null);
// null out string array because we get NPE since a NULL value in the String []
obj.getTestObject().setStringArrayWithNullValue(null);
subClassClone.getTestObject().setStringArrayWithNullValue(null);
subClassClone.getTestObject().setExcludeMeOneWay("excludeMeOneWay");
assertEquals(subClassClone, obj);
}