package org.test4j.datafilling.api;
import java.lang.reflect.ParameterizedType;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import junit.framework.Assert;
import org.junit.Test;
import org.test4j.datafilling.Filler;
import org.test4j.datafilling.model.dto.GenericAttributePojo;
import org.test4j.datafilling.model.dto.GenericPojo;
import org.test4j.datafilling.model.dto.MultiDimensionalConstructorPojo;
import org.test4j.datafilling.model.dto.MultiDimensionalTestPojo;
import org.test4j.datafilling.strategies.PoJoParameterizedType;
public class PoJoFactoryTest_Default {
@Test
public void testPojoWithGenericFields() {
final GenericAttributePojo pojo = Filler.filling(GenericAttributePojo.class);
final GenericPojo<String, Long> genericPojo = pojo.getGenericPojo();
Assert.assertNotNull("The GenericPojo object cannot be null!", genericPojo);
Assert.assertNotNull("The generated object cannot be null!", genericPojo.getFirstValue());
Assert.assertEquals("The generated object must be a String!", String.class, genericPojo.getFirstValue()
.getClass());
Assert.assertNotNull("The generated object cannot be null!", genericPojo.getSecondValue());
Assert.assertEquals("The generated object must be a Long!", Long.class, genericPojo.getSecondValue().getClass());
Assert.assertNotNull("The generated list cannot be null!", genericPojo.getFirstList());
Assert.assertEquals("The generated list type must be of String!", String.class,
genericPojo.getFirstList().get(0).getClass());
Assert.assertNotNull("The generated array cannot be null!", genericPojo.getSecondArray());
Assert.assertEquals("The generated array type must be of Long!", Long.class,
genericPojo.getSecondArray()[0].getClass());
Assert.assertNotNull("The generated map cannot be null!", genericPojo.getFirstSecondMap());
Assert.assertEquals("The generated map key type must be of String!", String.class, genericPojo
.getFirstSecondMap().entrySet().iterator().next().getKey().getClass());
Assert.assertEquals("The generated map value type must be of Long!", Long.class, genericPojo
.getFirstSecondMap().entrySet().iterator().next().getValue().getClass());
}
@Test
public void testGenericPojoManufacture() {
final GenericPojo<Double, Boolean> pojo = Filler.filling(GenericPojo.class, Double.class, Boolean.class);
Assert.assertNotNull("The GenericPojo object cannot be null!", pojo);
Assert.assertNotNull("The generated object cannot be null!", pojo.getFirstValue());
Assert.assertEquals("The generated object must be a Double!", Double.class, pojo.getFirstValue().getClass());
Assert.assertNotNull("The generated object cannot be null!", pojo.getSecondValue());
Assert.assertEquals("The generated object must be a Boolean!", Boolean.class, pojo.getSecondValue().getClass());
Assert.assertNotNull("The generated list cannot be null!", pojo.getFirstList());
Assert.assertEquals("The generated list type must be of Double!", Double.class, pojo.getFirstList().get(0)
.getClass());
Assert.assertNotNull("The generated array cannot be null!", pojo.getSecondArray());
Assert.assertEquals("The generated array type must be of Boolean!", Boolean.class,
pojo.getSecondArray()[0].getClass());
Assert.assertNotNull("The generated map cannot be null!", pojo.getFirstSecondMap());
Assert.assertEquals("The generated map key type must be of Double!", Double.class, pojo.getFirstSecondMap()
.entrySet().iterator().next().getKey().getClass());
Assert.assertEquals("The generated map value type must be of Boolean!", Boolean.class, pojo.getFirstSecondMap()
.entrySet().iterator().next().getValue().getClass());
}
@Test
public void testMultiDimensionalTestPojo() {
final MultiDimensionalTestPojo pojo = Filler.filling(MultiDimensionalTestPojo.class);
checkMultiDimensionalPojo(pojo);
}
@Test
public void testConstructorMultiDimensionalPojo() {
final MultiDimensionalConstructorPojo pojo = Filler.filling(MultiDimensionalConstructorPojo.class);
checkMultiDimensionalPojo(pojo);
}
@Test
public void testMultiDimensionalPojoManufacture() {
ParameterizedType twoDimensionalStringListType = new PoJoParameterizedType(List.class,
new PoJoParameterizedType(List.class, String.class));
ParameterizedType longDoubleMapType = new PoJoParameterizedType(Map.class, Long.class, Double.class);
final GenericPojo<List<List<String>>, Map<Long, Double>> pojo = Filler.filling(GenericPojo.class,
twoDimensionalStringListType, longDoubleMapType);
Assert.assertNotNull("The GenericPojo object cannot be null!", pojo);
Assert.assertNotNull("The generated object cannot be null!", pojo.getFirstValue());
Assert.assertEquals("The generated object must be a String!", String.class, pojo.getFirstValue().get(0).get(0)
.getClass());
Assert.assertNotNull("The generated object cannot be null!", pojo.getSecondValue());
Assert.assertEquals("The generated object must be a Long!", Long.class, pojo.getSecondValue().keySet()
.iterator().next().getClass());
Assert.assertEquals("The generated object must be a Double!", Double.class, pojo.getSecondValue().values()
.iterator().next().getClass());
Assert.assertNotNull("The generated list cannot be null!", pojo.getFirstList());
Assert.assertEquals("The generated list type must be of String!", String.class,
pojo.getFirstList().get(0).get(0).get(0).getClass());
Assert.assertNotNull("The generated array cannot be null!", pojo.getSecondArray());
Assert.assertEquals("The generated array type must be of Long!", Long.class, pojo.getSecondArray()[0].keySet()
.iterator().next().getClass());
Assert.assertEquals("The generated array type must be of Double!", Double.class, pojo.getSecondArray()[0]
.values().iterator().next().getClass());
Assert.assertNotNull("The generated map cannot be null!", pojo.getFirstSecondMap());
Assert.assertEquals("The generated map key type must be of String!", String.class, pojo.getFirstSecondMap()
.entrySet().iterator().next().getKey().get(0).get(0).getClass());
Assert.assertEquals("The generated map value type must be of Long!", Long.class, pojo.getFirstSecondMap()
.entrySet().iterator().next().getValue().keySet().iterator().next().getClass());
Assert.assertEquals("The generated map value type must be of Double!", Double.class, pojo.getFirstSecondMap()
.entrySet().iterator().next().getValue().values().iterator().next().getClass());
}
private void checkMultiDimensionalPojo(final MultiDimensionalTestPojo pojo) {
Assert.assertNotNull("The GenericPojo object cannot be null!", pojo);
checkMultiDimensionalCollection(pojo.getThreeDimensionalList(), String.class);
checkMultiDimensionalCollection(pojo.getThreeDimensionalQueue(), Date.class);
checkMultiDimensionalCollection(pojo.getThreeDimensionalSet(), Double.class);
checkMultiDimensionalCollection(pojo.getThreeDimensionalCollection(), Long.class);
Assert.assertEquals("The generated Array must have size=2!", 2, pojo.getThreeDimensionalArray().length);
Assert.assertEquals("The generated Array must have size=2!", 2, pojo.getThreeDimensionalArray()[0].length);
Assert.assertEquals("The generated Array must have size=2!", 2, pojo.getThreeDimensionalArray()[0][0].length);
Assert.assertEquals("The generated Array must be of String!", String.class,
pojo.getThreeDimensionalArray()[0][0][0].getClass());
Assert.assertEquals("The generated Map must have size=1!", 1, pojo.getThreeDimensionalMap().size());
Entry<Boolean, Map<Float, Map<Integer, Calendar>>> entry = pojo.getThreeDimensionalMap().entrySet().iterator()
.next();
Assert.assertEquals("The generated Map entry key must be of Boolean!", Boolean.class, entry.getKey().getClass());
Assert.assertEquals("The generated Map must have size=2!", 2, entry.getValue().size());
Entry<Float, Map<Integer, Calendar>> entry2 = entry.getValue().entrySet().iterator().next();
Assert.assertEquals("The generated Map entry key must be of Float!", Float.class, entry2.getKey().getClass());
Assert.assertEquals("The generated Map must have size=2!", 2, entry2.getValue().size());
Entry<Integer, Calendar> entry3 = entry2.getValue().entrySet().iterator().next();
Assert.assertEquals("The generated Map entry key must be of Integer!", Integer.class, entry3.getKey()
.getClass());
Assert.assertEquals("The generated Map entry key must be of Calendar!", GregorianCalendar.class, entry3
.getValue().getClass());
}
@SuppressWarnings("unchecked")
private <T> void checkMultiDimensionalCollection(final Collection<?> collection, Class<T> type) {
Assert.assertEquals("The generated List must have size=2!", 2, collection.size());
Collection<?> subcollection = (Collection<?>) collection.iterator().next();
Assert.assertEquals("The generated List must have size=2!", 2, subcollection.size());
subcollection = (Collection<?>) subcollection.iterator().next();
Assert.assertEquals("The generated List must have size=2!", 2, subcollection.size());
T element = (T) subcollection.iterator().next();
Assert.assertEquals("The generated List must be of " + type + "!", type, element.getClass());
}
}