/**
*
*/
package org.minnal.autopojo.resolver;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.beans.PropertyDescriptor;
import org.minnal.autopojo.AttributeMetaData;
import org.minnal.autopojo.CollectionModel;
import org.minnal.autopojo.Configuration;
import org.minnal.autopojo.GenerationStrategy;
import org.minnal.autopojo.SimpleObject;
import org.minnal.autopojo.util.PropertyUtil;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* @author ganeshs
*
*/
public class ArrayResolverTest {
private ArrayResolver resolver;
private Configuration configuration;
@BeforeMethod
public void setup() {
configuration = new Configuration();
resolver = new ArrayResolver();
resolver.init(new GenerationStrategy(configuration), configuration);
}
@Test
public void shouldGenerateAnyObjectArray() {
generateAndCheckArray("anyObjectArray", Object.class);
}
@Test
public void shouldGenerateGenericString() {
generateAndCheckArray("stringArray", String.class);
}
@Test
public void shouldGenerateGenericObjectArray() {
generateAndCheckArray("objectArray", SimpleObject.class);
}
@Test
public void shouldGenerateSpecifiedNoOfElements() {
configuration.setNoOfElementsInCollection(10);
resolver = new ArrayResolver();
resolver.init(new GenerationStrategy(configuration), configuration);
generateAndCheckArray("anyObjectArray", Object.class, 10);
}
private void generateAndCheckArray(String propertyName, Class<?> elementClass) {
generateAndCheckArray(propertyName, elementClass, configuration.getNoOfElementsInCollection());
}
private void generateAndCheckArray(String propertyName, Class<?> elementClass, int count) {
CollectionModel model = new CollectionModel();
PropertyDescriptor descriptor = PropertyUtil.getDescriptor(CollectionModel.class, propertyName);
resolver.resolve(model, new AttributeMetaData(descriptor), 10);
Object[] array = null;
try {
array = (Object[]) descriptor.getReadMethod().invoke(model);
} catch (Exception e) {
throw new RuntimeException(e);
}
assertEquals(array.length, count);
assertTrue(array[0].getClass().equals(elementClass));
}
}