/*
ORG Usurper is a random value object generator library
Copyright (C) 2007 Pierre-Antoine Grégoire
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.org.usurper;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import junit.framework.TestCase;
import org.org.usurper.TestCommons.NullPropertyException;
import org.org.usurper.dummydomain.DummyVOWithVOArrays;
import org.org.usurper.dummydomain.DummyVOWithVOCollections;
import org.org.usurper.dummydomain.DummyWithChildVO;
import org.org.usurper.dummydomain.FcknVO;
import org.org.usurper.dummydomain.IImmutableDummyVO;
import org.org.usurper.dummydomain.ImmutableDummyVO;
import org.org.usurper.dummydomain.ImmutableDummyWithChildVO;
import org.org.usurper.dummydomain.ImmutableDummyWithChildVOArray;
import org.org.usurper.dummydomain.ImmutableDummyWithChildVOCollections;
import org.org.usurper.dummydomain.SonOfDummyWithChildVO;
import org.org.usurper.dummydomain.SonOfSonOfDummyWithChildVO;
import org.org.usurper.handlers.additional.ListOfValuesSpecificPropertyHandler;
import org.org.usurper.handlers.additional.ValueObjectPropertyTypeHandler;
import org.org.usurper.handlers.basic.AbstractPropertyTypeHandler;
import org.org.usurper.handlers.basic.AbstractSpecificPropertyHandler;
import org.org.usurper.model.HandledBeanProperty;
import org.org.usurper.model.HandledConstructorArg;
import org.org.usurper.model.SpecificPropertyDefinition;
/**
* Tests former behaviour (with deprecated method calls).
*
* @author pagregoire
* @since 1.1.0
*/
@SuppressWarnings("deprecation")
public class UsurperGeneratorDeprecatedTest extends TestCase {
/**
* @see junit.framework.TestCase#setUp()
*/
@Override
protected void setUp() throws Exception {
super.setUp();
}
public void testGenerateImmutableObject() {
// CREATE USURPER GENERATOR
UsurperGenerator<ImmutableDummyVO> immutableDummyVOUsurper = new UsurperGenerator<ImmutableDummyVO>(ImmutableDummyVO.class);
immutableDummyVOUsurper.registerPropertyTypeHandler(new AbstractPropertyTypeHandler(String.class) {
public Object handle(HandledBeanProperty handledBeanProperty) {
return TestCommons.HANDLED_STRING;
}
public Object handle(HandledConstructorArg handledConstructorArg) {
return TestCommons.HANDLED_STRING;
}
});
// GENERATE USURPER
IImmutableDummyVO object = immutableDummyVOUsurper.generateUsurper();
assertEquals("The shortest constructor should be used.", ImmutableDummyVO.SHORT_CONTRUCTOR, object.getStringField());
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateImmutableWithChildObject() {
// CREATE USURPER GENERATOR
UsurperGenerator<ImmutableDummyWithChildVO> immutableDummyWithChildVOUsurper = new UsurperGenerator<ImmutableDummyWithChildVO>(ImmutableDummyWithChildVO.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
immutableDummyWithChildVOUsurper.registerPropertyTypeHandler(new ValueObjectPropertyTypeHandler(DummyWithChildVO.class, SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class));
// GENERATE USURPER
ImmutableDummyWithChildVO object = immutableDummyWithChildVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateImmutableWithChildObjectArray() {
// CREATE USURPER GENERATOR
UsurperGenerator<ImmutableDummyWithChildVOArray> immutableDummyWithChildVOArrayUsurper = new UsurperGenerator<ImmutableDummyWithChildVOArray>(ImmutableDummyWithChildVOArray.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
immutableDummyWithChildVOArrayUsurper.registerPropertyTypeHandler(new ValueObjectPropertyTypeHandler(DummyWithChildVO.class, SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class));
// GENERATE USURPER
ImmutableDummyWithChildVOArray object = immutableDummyWithChildVOArrayUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateImmutableWithChildObjectCollections() {
// CREATE USURPER GENERATOR
UsurperGenerator<ImmutableDummyWithChildVOCollections> immutableDummyWithChildVOCollectionsUsurper = new UsurperGenerator<ImmutableDummyWithChildVOCollections>(ImmutableDummyWithChildVOCollections.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
immutableDummyWithChildVOCollectionsUsurper.registerPropertyTypeHandler(new ValueObjectPropertyTypeHandler(DummyWithChildVO.class, SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class));
// GENERATE USURPER
ImmutableDummyWithChildVOCollections object = immutableDummyWithChildVOCollectionsUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateImmutableObjectWithChosenConstructor() {
// CREATE USURPER GENERATOR
UsurperGenerator<ImmutableDummyVO> immutableDummyVOUsurper = new UsurperGenerator<ImmutableDummyVO>(ImmutableDummyVO.class);
immutableDummyVOUsurper.registerPropertyTypeHandler(new AbstractPropertyTypeHandler(String.class) {
public Object handle(HandledBeanProperty handledBeanProperty) {
return TestCommons.HANDLED_STRING;
}
public Object handle(HandledConstructorArg handledConstructorArg) {
return TestCommons.HANDLED_STRING;
}
});
immutableDummyVOUsurper.useConstructor(Integer.class, Float.class, Double.class, String.class, Date.class, Long.class, Short.class, Boolean.class, int.class, short.class, long.class, boolean.class, byte.class, char.class, float.class, double.class, Timestamp.class, java.sql.Date.class);
// GENERATE USURPER
IImmutableDummyVO object = immutableDummyVOUsurper.generateUsurper();
assertNotSame("The shortest constructor should not be used.", ImmutableDummyVO.SHORT_CONTRUCTOR, object.getStringField());
assertEquals("The longest constructor should be used.", TestCommons.HANDLED_STRING, object.getStringField());
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateObjectWithChilds() {
// CREATE USURPER GENERATOR
UsurperGenerator<DummyWithChildVO> dummyVOUsurper = new UsurperGenerator<DummyWithChildVO>(DummyWithChildVO.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
ValueObjectPropertyTypeHandler valueObjectFieldTypeHandler = new ValueObjectPropertyTypeHandler(SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class);
dummyVOUsurper.registerPropertyTypeHandler(valueObjectFieldTypeHandler);
// GENERATE USURPER
DummyWithChildVO object = dummyVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateObjectWithVOCollectionChilds() {
// CREATE USURPER GENERATOR
UsurperGenerator<DummyVOWithVOCollections> dummyVOUsurper = new UsurperGenerator<DummyVOWithVOCollections>(DummyVOWithVOCollections.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
dummyVOUsurper.registerPropertyTypeHandler(new ValueObjectPropertyTypeHandler(SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class));
// GENERATE USURPER
DummyVOWithVOCollections object = dummyVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateObjectWithVOArrayChilds() {
// CREATE USURPER GENERATOR
UsurperGenerator<DummyVOWithVOArrays> dummyVOUsurper = new UsurperGenerator<DummyVOWithVOArrays>(DummyVOWithVOArrays.class);
// REGISTER AN HANDLER FOR SPECIFIC VALUE OBJECTS
dummyVOUsurper.registerPropertyTypeHandler(new ValueObjectPropertyTypeHandler(SonOfDummyWithChildVO.class, SonOfSonOfDummyWithChildVO.class));
// GENERATE USURPER
DummyVOWithVOArrays object = dummyVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateObjectWithListOfValuesSpecificPropertyHandler() {
// CREATE USURPER GENERATOR
UsurperGenerator<FcknVO> fcknVOUsurper = new UsurperGenerator<FcknVO>(FcknVO.class);
// REGISTER CUSTOM SPECIFIC FIELD HANDLERS
fcknVOUsurper.registerSpecificPropertyHandler(new ListOfValuesSpecificPropertyHandler(new SpecificPropertyDefinition(FcknVO.class, "bigIntField"), TestCommons.BIG_INTEGER_VALUES_LIST));
fcknVOUsurper.registerSpecificPropertyHandler(new ListOfValuesSpecificPropertyHandler(new SpecificPropertyDefinition(FcknVO.class, "bigIntField2"), TestCommons.BIG_INTEGER_VALUES_LIST));
// GENERATE USURPER
List<FcknVO> collection = fcknVOUsurper.generateUsurperList(6);
Iterator<BigInteger> it = TestCommons.BIG_INTEGER_VALUES_LIST.iterator();
// VALIDATE RESULTING OBJECT
for (FcknVO fcknVO : collection) {
try {
TestCommons.auditVO(fcknVO);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
if (!it.hasNext()) {
it = TestCommons.BIG_INTEGER_VALUES_LIST.iterator();
}
BigInteger nextValue = it.next();
assertEquals("the specificFieldHandler should put the <" + nextValue + "> value for the <bigIntField> field", nextValue, fcknVO.getBigIntField());
assertEquals("the specificFieldHandler should put the <" + nextValue + "> value for the <bigIntField2> field", nextValue, fcknVO.getBigIntField2());
}
}
public void testGenerateObjectWithSpecificPropertyHandler() {
// CREATE USURPER GENERATOR
UsurperGenerator<FcknVO> fcknVOUsurper = new UsurperGenerator<FcknVO>(FcknVO.class);
// REGISTER CUSTOM SPECIFIC FIELD HANDLERS
fcknVOUsurper.registerSpecificPropertyHandler(new AbstractSpecificPropertyHandler(new SpecificPropertyDefinition(FcknVO.class, "bigIntField")) {
public Object handle(HandledBeanProperty handledBeanProperty) {
return TestCommons.BIG_INTEGER_VALUE;
}
public Object handle(HandledConstructorArg handledConstructorArg) {
return TestCommons.BIG_INTEGER_VALUE;
}
});
fcknVOUsurper.registerSpecificPropertyHandler(new AbstractSpecificPropertyHandler(new SpecificPropertyDefinition(FcknVO.class, "bigIntField2")) {
public Object handle(HandledBeanProperty handledBeanProperty) {
return TestCommons.BIG_INTEGER_VALUE;
}
public Object handle(HandledConstructorArg handledConstructorArg) {
return TestCommons.BIG_INTEGER_VALUE;
}
});
// GENERATE USURPER
FcknVO object = fcknVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
assertEquals("the specificFieldHandler should put a default value for the field", TestCommons.BIG_INTEGER_VALUE, ((FcknVO) object).getBigIntField());
assertEquals("the specificFieldHandler should put a default value for the field", TestCommons.BIG_INTEGER_VALUE, ((FcknVO) object).getBigIntField2());
try {
TestCommons.auditVO(object);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
public void testGenerateObjectWithPropertyTypeHandler() {
// CREATE USURPER GENERATOR
UsurperGenerator<FcknVO> fcknVOUsurper = new UsurperGenerator<FcknVO>(FcknVO.class);
// REGISTER CUSTOM TYPE HANDLER
fcknVOUsurper.registerPropertyTypeHandler(new AbstractPropertyTypeHandler(BigInteger.class) {
public Object handle(HandledBeanProperty handledBeanProperty) {
return new BigInteger(24, new Random());
}
public Object handle(HandledConstructorArg handledConstructorArg) {
return new BigInteger(24, new Random());
}
});
// GENERATE USURPER
FcknVO object3 = fcknVOUsurper.generateUsurper();
// VALIDATE RESULTING OBJECT
try {
TestCommons.auditVO(object3);
} catch (NullPropertyException e) {
fail(e.getMessage());
}
}
}