/**
* $Id: ClassFieldsTest.java 129 2014-03-18 23:25:36Z azeckoski $
* $URL: http://reflectutils.googlecode.com/svn/trunk/src/test/java/org/azeckoski/reflectutils/ClassFieldsTest.java $
* ClassFieldsTest.java - genericdao - May 18, 2008 10:07:01 PM - azeckoski
**************************************************************************
* Copyright (c) 2008 Aaron Zeckoski
* Licensed under the Apache License, Version 2.0
*
* A copy of the Apache License has been included in this
* distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Aaron Zeckoski (azeckoski@gmail.com) (aaronz@vt.edu) (aaron@caret.cam.ac.uk)
*/
package org.azeckoski.reflectutils;
import junit.framework.TestCase;
import org.azeckoski.reflectutils.ClassFields.FieldFindMode;
import org.azeckoski.reflectutils.ClassFields.FieldsFilter;
import org.azeckoski.reflectutils.annotations.*;
import org.azeckoski.reflectutils.classes.*;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Tests the various methods used to analyze a class and cache the information
* about fields and annotations
*
* @author Aaron Zeckoski (azeckoski@gmail.com)
*/
@SuppressWarnings("unchecked")
public class ClassFieldsTest extends TestCase {
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#ClassFields(java.lang.Class, java.lang.reflect.Method[], java.lang.reflect.Method[], java.lang.reflect.Field[])}.
*/
public void testClassFieldsClassOfQMethodArrayMethodArrayFieldArray() {
ClassFields<?> cf = null;
Method[] getters = null;
Method[] setters = null;
try {
Method g1 = TestBean.class.getMethod("getMyInt", new Class<?>[] {});
Method s1 = TestBean.class.getMethod("setMyInt", new Class<?>[] {int.class});
Method g2 = TestBean.class.getMethod("getMyString", new Class<?>[] {});
Method s2 = TestBean.class.getMethod("setMyString", new Class<?>[] {String.class});
getters = new Method[] { g1, g2 };
setters = new Method[] { s1, s2 };
} catch (Exception e) {
fail("Failed to find method to test");
}
assertNotNull(getters);
assertNotNull(setters);
Field[] fields = TestCompound.class.getFields();
cf = new ClassFields<TestCompound>(TestCompound.class, getters, setters, fields);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
cf = new ClassFields<TestCompound>(TestCompound.class, getters, setters, new Field[] {});
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
// test invalid inputs cause failure
try {
cf = new ClassFields(null, getters, setters, null);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
getters = new Method[] {};
try {
cf = new ClassFields<TestCompound>(TestCompound.class, getters, setters, null);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#ClassFields(java.lang.Class, java.beans.PropertyDescriptor[], java.lang.reflect.Field[])}.
*/
public void testClassFieldsClassOfQPropertyDescriptorArrayFieldArray() {
ClassFields<?> cf = null;
BeanInfo beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(TestBean.class);
} catch (IntrospectionException e) {
fail(e.getMessage());
}
assertNotNull(beanInfo);
if (beanInfo == null) { throw new NullPointerException(); } // lame but avoids the warnings
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
cf = new ClassFields(TestBean.class, pds, new Field[] {});
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
beanInfo = null;
try {
beanInfo = Introspector.getBeanInfo(TestCompound.class);
} catch (IntrospectionException e) {
fail(e.getMessage());
}
assertNotNull(beanInfo);
if (beanInfo == null) { throw new NullPointerException(); } // lame but avoids the warnings
pds = beanInfo.getPropertyDescriptors();
Field[] fields = TestCompound.class.getFields();
cf = new ClassFields(TestBean.class, pds, fields);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
// test invalid inputs cause failure
try {
cf = new ClassFields(null, pds, fields);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#ClassFields(java.lang.Class, boolean)}.
*/
public void testClassFieldsClassOfQBoolean() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class, FieldFindMode.HYBRID, true, false);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestCompound.class, FieldFindMode.HYBRID, true, false);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
// test invalid inputs cause failure
try {
cf = new ClassFields(null, FieldFindMode.HYBRID, true, false);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
public void testClassFieldsModes() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestBean.class, FieldFindMode.FIELD);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestBean.class, FieldFindMode.PROPERTY);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestCompound.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
cf = new ClassFields(TestCompound.class, FieldFindMode.FIELD);
assertNotNull(cf);
assertEquals(5, cf.size());
assertTrue( cf.isFieldNameValid("prot1") );
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
cf = new ClassFields(TestCompound.class, FieldFindMode.PROPERTY);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestEntity.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(6, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("bool") );
assertTrue( cf.isFieldNameValid("sArray") );
cf = new ClassFields(TestImplFour.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(1, cf.size());
assertTrue( cf.isFieldNameValid("thing") );
cf = new ClassFields(TestImplOne.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("nullVal") );
cf = new ClassFields(TestNesting.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(9, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("title") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("myArray") );
assertTrue( cf.isFieldNameValid("sList") );
assertTrue( cf.isFieldNameValid("sMap") );
assertTrue( cf.isFieldNameValid("testPea") );
assertTrue( cf.isFieldNameValid("testBean") );
assertTrue( cf.isFieldNameValid("testEntity") );
cf = new ClassFields(TestNone.class, FieldFindMode.HYBRID);
assertNotNull(cf);
assertEquals(0, cf.size());
cf = new ClassFields(TestNone.class, FieldFindMode.FIELD);
assertNotNull(cf);
assertEquals(0, cf.size());
cf = new ClassFields(TestNone.class, FieldFindMode.PROPERTY);
assertNotNull(cf);
assertEquals(0, cf.size());
// test invalid inputs cause failure
try {
cf = new ClassFields(null, FieldFindMode.HYBRID);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#ClassFields(java.lang.Class)}.
*/
public void testClassFieldsClassOfQ() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(6, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("bool") );
assertTrue( cf.isFieldNameValid("sArray") );
assertTrue( cf.isFieldNameValid("fieldOnly") );
cf = new ClassFields(TestImplFour.class);
assertNotNull(cf);
assertEquals(1, cf.size());
assertTrue( cf.isFieldNameValid("thing") );
cf = new ClassFields(TestImplOne.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("nullVal") );
cf = new ClassFields(TestNesting.class);
assertNotNull(cf);
assertEquals(9, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("title") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("myArray") );
assertTrue( cf.isFieldNameValid("sList") );
assertTrue( cf.isFieldNameValid("sMap") );
assertTrue( cf.isFieldNameValid("testPea") );
assertTrue( cf.isFieldNameValid("testBean") );
assertTrue( cf.isFieldNameValid("testEntity") );
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.size());
cf = new ClassFields(TestUltraNested.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("title") );
assertTrue( cf.isFieldNameValid("testNesting") );
cf = new ClassFields(TestExtendBean.class);
assertNotNull(cf);
assertEquals(3, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("anotherThing") );
// test invalid inputs cause failure
try {
cf = new ClassFields(null);
fail("should have thrown exception");
} catch (IllegalArgumentException e) {
assertNotNull(e.getMessage());
}
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldClass()}.
*/
public void testGetFieldClass() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(TestBean.class, cf.getFieldClass());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(TestPea.class, cf.getFieldClass());
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(TestNone.class, cf.getFieldClass());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(TestCompound.class, cf.getFieldClass());
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(TestEntity.class, cf.getFieldClass());
assertEquals(6, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("bool") );
assertTrue( cf.isFieldNameValid("sArray") );
assertTrue( cf.isFieldNameValid("fieldOnly") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldNames()}.
*/
public void testGetFieldNames() {
ClassFields<?> cf = null;
List<String> names = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.getFieldNames().size());
names = cf.getFieldNames();
assertTrue( names.contains("myInt") );
assertTrue( names.contains("myString") );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(2, cf.getFieldNames().size());
names = cf.getFieldNames();
assertTrue( names.contains("id") );
assertTrue( names.contains("entityId") );
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldNames().size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.getFieldNames().size());
names = cf.getFieldNames();
assertTrue( names.contains("myInt") );
assertTrue( names.contains("myString") );
assertTrue( names.contains("myField") );
assertTrue( names.contains("fieldInt") );
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(TestEntity.class, cf.getFieldClass());
assertEquals(6, cf.getFieldNames().size());
names = cf.getFieldNames();
assertTrue( names.contains("id") );
assertTrue( names.contains("entityId") );
assertTrue( names.contains("extra") );
assertTrue( names.contains("bool") );
assertTrue( names.contains("sArray") );
assertTrue( names.contains("fieldOnly") );
cf = new ClassFields(TestGettersOnly.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldNames().size());
cf = new ClassFields(TestSettersOnly.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldNames().size());
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
assertEquals(2, cf.getFieldNames().size());
names = cf.getFieldNames();
assertTrue( names.contains("myInt") );
assertTrue( names.contains("myString") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getAllFieldNames()}.
*/
public void testGetAllFieldNames() {
ClassFields<?> cf = null;
List<String> names = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.getFieldNames(FieldsFilter.ALL).size());
names = cf.getFieldNames(FieldsFilter.ALL);
assertTrue( names.contains("myInt") );
assertTrue( names.contains("myString") );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(2, cf.getFieldNames(FieldsFilter.ALL).size());
names = cf.getFieldNames(FieldsFilter.ALL);
assertTrue( names.contains("id") );
assertTrue( names.contains("entityId") );
cf = new ClassFields(TestGettersOnly.class);
assertNotNull(cf);
assertEquals(3, cf.getFieldNames(FieldsFilter.ALL).size());
names = cf.getFieldNames(FieldsFilter.ALL);
assertTrue( names.contains("int1") );
assertTrue( names.contains("str2") );
assertTrue( names.contains("bool3") );
cf = new ClassFields(TestSettersOnly.class);
assertNotNull(cf);
assertEquals(3, cf.getFieldNames(FieldsFilter.ALL).size());
names = cf.getFieldNames(FieldsFilter.ALL);
assertTrue( names.contains("int1") );
assertTrue( names.contains("str2") );
assertTrue( names.contains("bool3") );
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
assertEquals(5, cf.getFieldNames(FieldsFilter.ALL).size());
names = cf.getFieldNames(FieldsFilter.ALL);
assertTrue( names.contains("myInt") );
assertTrue( names.contains("myString") );
assertTrue( names.contains("int1") );
assertTrue( names.contains("str2") );
assertTrue( names.contains("bool3") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldTypes()}.
*/
public void testGetFieldTypes() {
ClassFields<?> cf = null;
Map<String, Class<?>> types = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(2, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(2, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(0, types.size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(4, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
assertEquals(String.class, types.get("myField"));
assertEquals(Integer.class, types.get("fieldInt"));
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(6, types.size());
assertEquals(Long.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
assertEquals(String.class, types.get("extra"));
assertEquals(Boolean.class, types.get("bool"));
assertEquals(String[].class, types.get("sArray"));
assertEquals(String.class, types.get("fieldOnly"));
cf = new ClassFields(TestGettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(0, types.size());
cf = new ClassFields(TestSettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(0, types.size());
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(2, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
types = cf.getFieldTypes();
assertEquals(2, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldTypes(FieldsFilter.WRITEABLE)}.
*/
public void testGetAllSettableFieldTypes() {
ClassFields<?> cf = null;
Map<String, Class<?>> types = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(2, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(2, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(0, types.size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(4, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
assertEquals(String.class, types.get("myField"));
assertEquals(Integer.class, types.get("fieldInt"));
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(6, types.size());
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(Long.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
assertEquals(String.class, types.get("extra"));
assertEquals(Boolean.class, types.get("bool"));
assertEquals(String[].class, types.get("sArray"));
assertEquals(String.class, types.get("fieldOnly"));
cf = new ClassFields(TestGettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(0, types.size());
cf = new ClassFields(TestSettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(3, types.size());
assertEquals(int.class, types.get("int1"));
assertEquals(String.class, types.get("str2"));
assertEquals(boolean.class, types.get("bool3"));
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(2, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(5, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
assertEquals(int.class, types.get("int1"));
assertEquals(String.class, types.get("str2"));
assertEquals(boolean.class, types.get("bool3"));
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getAllGettableFieldTypes()}.
*/
public void testGetAllGettableFieldTypes() {
ClassFields<?> cf = null;
Map<String, Class<?>> types = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(2, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(2, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(0, types.size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(4, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
assertEquals(String.class, types.get("myField"));
assertEquals(Integer.class, types.get("fieldInt"));
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(8, types.size());
assertEquals(Long.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
assertEquals(String.class, types.get("extra"));
assertEquals(Boolean.class, types.get("bool"));
assertEquals(String[].class, types.get("sArray"));
assertEquals(String.class, types.get("prefix"));
assertEquals(String.class, types.get("fieldOnly"));
assertEquals(String.class, types.get("transStr"));
cf = new ClassFields(TestGettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(3, types.size());
assertEquals(int.class, types.get("int1"));
assertEquals(String.class, types.get("str2"));
assertEquals(boolean.class, types.get("bool3"));
cf = new ClassFields(TestSettersOnly.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(0, types.size());
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(5, types.size());
assertEquals(int.class, types.get("myInt"));
assertEquals(String.class, types.get("myString"));
assertEquals(int.class, types.get("int1"));
assertEquals(String.class, types.get("str2"));
assertEquals(boolean.class, types.get("bool3"));
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(2, types.size());
assertEquals(String.class, types.get("id"));
assertEquals(String.class, types.get("entityId"));
}
public void testGetFieldTypesFilter() {
ClassFields<?> cf = null;
Map<String, Class<?>> types = null;
cf = new ClassFields(TestFilter.class);
assertNotNull(cf);
types = cf.getFieldTypes(FieldsFilter.ALL);
assertEquals(6, types.size());
assertEquals(String.class, types.get("field"));
assertEquals(String.class, types.get("fin"));
assertEquals(String.class, types.get("property"));
assertEquals(String.class, types.get("read"));
assertEquals(String.class, types.get("trans"));
assertEquals(String.class, types.get("write"));
types = cf.getFieldTypes(FieldsFilter.COMPLETE);
assertEquals(3, types.size());
assertEquals(String.class, types.get("field"));
assertEquals(String.class, types.get("property"));
assertEquals(String.class, types.get("trans"));
types = cf.getFieldTypes(FieldsFilter.READABLE);
assertEquals(5, types.size());
assertEquals(String.class, types.get("field"));
assertEquals(String.class, types.get("fin"));
assertEquals(String.class, types.get("property"));
assertEquals(String.class, types.get("read"));
assertEquals(String.class, types.get("trans"));
types = cf.getFieldTypes(FieldsFilter.SERIALIZABLE);
assertEquals(4, types.size());
assertEquals(String.class, types.get("field"));
assertEquals(String.class, types.get("fin"));
assertEquals(String.class, types.get("property"));
assertEquals(String.class, types.get("read"));
types = cf.getFieldTypes(FieldsFilter.WRITEABLE);
assertEquals(4, types.size());
assertEquals(String.class, types.get("field"));
assertEquals(String.class, types.get("property"));
assertEquals(String.class, types.get("trans"));
assertEquals(String.class, types.get("write"));
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#size()}.
*/
public void testSize() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.size());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(2, cf.size());
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.size());
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(6, cf.size());
}
public void testSizeFilter() {
ClassFields<?> cf = null;
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.size(FieldsFilter.ALL));
assertEquals(4, cf.size(FieldsFilter.COMPLETE));
assertEquals(4, cf.size(FieldsFilter.READABLE));
assertEquals(4, cf.size(FieldsFilter.SERIALIZABLE));
assertEquals(4, cf.size(FieldsFilter.WRITEABLE));
cf = new ClassFields(TestTransientFinal.class);
assertNotNull(cf);
assertEquals(8, cf.size(FieldsFilter.ALL));
assertEquals(4, cf.size(FieldsFilter.COMPLETE));
assertEquals(8, cf.size(FieldsFilter.READABLE));
assertEquals(5, cf.size(FieldsFilter.SERIALIZABLE));
assertEquals(4, cf.size(FieldsFilter.SERIALIZABLE_FIELDS));
assertEquals(4, cf.size(FieldsFilter.WRITEABLE));
cf = new ClassFields(TestFilter.class);
assertNotNull(cf);
assertEquals(6, cf.size(FieldsFilter.ALL));
assertEquals(3, cf.size(FieldsFilter.COMPLETE));
assertEquals(5, cf.size(FieldsFilter.READABLE));
assertEquals(4, cf.size(FieldsFilter.SERIALIZABLE));
assertEquals(5, cf.size(FieldsFilter.SERIALIZABLE_FIELDS));
assertEquals(4, cf.size(FieldsFilter.WRITEABLE));
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#isEmpty()}.
*/
public void testIsEmpty() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertFalse(cf.isEmpty());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertFalse(cf.isEmpty());
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertTrue(cf.isEmpty());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertFalse(cf.isEmpty());
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertFalse(cf.isEmpty());
}
public void testIsEmptyFilter() {
ClassFields<?> cf = null;
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertFalse( cf.isEmpty(FieldsFilter.ALL));
assertFalse( cf.isEmpty(FieldsFilter.COMPLETE));
assertFalse( cf.isEmpty(FieldsFilter.READABLE));
assertFalse( cf.isEmpty(FieldsFilter.SERIALIZABLE));
assertFalse( cf.isEmpty(FieldsFilter.WRITEABLE));
cf = new ClassFields(TestTransientFinal.class);
assertNotNull(cf);
assertFalse( cf.isEmpty(FieldsFilter.ALL));
assertFalse( cf.isEmpty(FieldsFilter.COMPLETE));
assertFalse( cf.isEmpty(FieldsFilter.READABLE));
assertFalse( cf.isEmpty(FieldsFilter.SERIALIZABLE));
assertFalse( cf.isEmpty(FieldsFilter.WRITEABLE));
cf = new ClassFields(TestFilter.class);
assertNotNull(cf);
assertFalse( cf.isEmpty(FieldsFilter.ALL));
assertFalse( cf.isEmpty(FieldsFilter.COMPLETE));
assertFalse( cf.isEmpty(FieldsFilter.READABLE));
assertFalse( cf.isEmpty(FieldsFilter.SERIALIZABLE));
assertFalse( cf.isEmpty(FieldsFilter.WRITEABLE));
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#isFieldNameValid(java.lang.String)}.
*/
public void testIsFieldNameValid() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertFalse( cf.isFieldNameValid("myint") );
assertFalse( cf.isFieldNameValid("mystring") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertFalse( cf.isFieldNameValid("ID") );
assertFalse( cf.isFieldNameValid("mystring") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertTrue( cf.isFieldNameValid("myField") );
assertTrue( cf.isFieldNameValid("fieldInt") );
assertFalse( cf.isFieldNameValid("myint") );
assertFalse( cf.isFieldNameValid("mystring") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(6, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertTrue( cf.isFieldNameValid("extra") );
assertTrue( cf.isFieldNameValid("bool") );
assertTrue( cf.isFieldNameValid("sArray") );
assertFalse( cf.isFieldNameValid("entityid") );
assertFalse( cf.isFieldNameValid("sarray") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.size());
assertFalse( cf.isFieldNameValid("XXXXXX") );
assertFalse( cf.isFieldNameValid("") );
assertFalse( cf.isFieldNameValid(null) );
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt") );
assertTrue( cf.isFieldNameValid("myString") );
assertFalse( cf.isFieldNameValid("int1") );
assertFalse( cf.isFieldNameValid("str2") );
assertFalse( cf.isFieldNameValid("bool3") );
assertFalse( cf.isFieldNameValid("myint") );
assertFalse( cf.isFieldNameValid("mystring") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id") );
assertTrue( cf.isFieldNameValid("entityId") );
assertFalse( cf.isFieldNameValid("int1") );
assertFalse( cf.isFieldNameValid("str2") );
assertFalse( cf.isFieldNameValid("bool3") );
assertFalse( cf.isFieldNameValid("ID") );
assertFalse( cf.isFieldNameValid("mystring") );
assertFalse( cf.isFieldNameValid("XXXXXX") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#isFieldNameValid(java.lang.String)}.
*/
public void testIsAnyFieldNameValid() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("myString", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("myint", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("mystring", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("entityId", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("ID", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("mystring", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(4, cf.size());
assertTrue( cf.isFieldNameValid("myInt", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("myString", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("myField", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("fieldInt", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("myint", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("mystring", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(6, cf.size());
assertTrue( cf.isFieldNameValid("id", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("entityId", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("extra", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("bool", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("sArray", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("entityid", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("sarray", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.size());
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid(null) );
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("myInt", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("myString", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("int1", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("str2", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("bool3", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("myint", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("mystring", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertTrue( cf.isFieldNameValid("id", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("entityId", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("int1", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("str2", FieldsFilter.ALL) );
assertTrue( cf.isFieldNameValid("bool3", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("ID", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("mystring", FieldsFilter.ALL) );
assertFalse( cf.isFieldNameValid("XXXXXX", FieldsFilter.ALL) );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldType(java.lang.String)}.
*/
public void testGetFieldType() {
ClassFields<?> cf = null;
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(int.class, cf.getFieldType("myInt"));
assertEquals(String.class, cf.getFieldType("myString"));
assertEquals(String.class, cf.getFieldType("myField"));
assertEquals(Integer.class, cf.getFieldType("fieldInt"));
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(Long.class, cf.getFieldType("id"));
assertEquals(String.class, cf.getFieldType("entityId"));
assertEquals(String.class, cf.getFieldType("extra"));
assertEquals(Boolean.class, cf.getFieldType("bool"));
assertEquals(String[].class, cf.getFieldType("sArray"));
cf = new ClassFields(TestNesting.class);
assertNotNull(cf);
assertEquals(int.class, cf.getFieldType("id") );
assertEquals(String.class, cf.getFieldType("title") );
assertEquals(String.class, cf.getFieldType("extra") );
assertEquals(String[].class, cf.getFieldType("myArray") );
assertEquals(List.class, cf.getFieldType("sList") );
assertEquals(Map.class, cf.getFieldType("sMap") );
assertEquals(TestBean.class, cf.getFieldType("testBean") );
assertEquals(TestEntity.class, cf.getFieldType("testEntity") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getClassProperty(java.lang.String)}.
*/
public void testGetFieldProperty() {
ClassFields<?> cf = null;
ClassProperty cp = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
cp = cf.getClassProperty("myInt");
assertNotNull(cp);
assertEquals("myInt", cp.getFieldName());
assertEquals(int.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
cp = cf.getClassProperty("id");
assertNotNull(cp);
assertEquals("id", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertFalse( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
cp = cf.getClassProperty("myInt");
assertNotNull(cp);
assertEquals("myInt", cp.getFieldName());
assertEquals(int.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("myField");
assertNotNull(cp);
assertEquals("myField", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertFalse( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cf = new ClassFields(TestNesting.class);
assertNotNull(cf);
cp = cf.getClassProperty("id");
assertNotNull(cp);
assertEquals("id", cp.getFieldName());
assertEquals(int.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("myArray");
assertNotNull(cp);
assertEquals("myArray", cp.getFieldName());
assertEquals(String[].class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertTrue( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertTrue( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("sList");
assertNotNull(cp);
assertEquals("sList", cp.getFieldName());
assertEquals(List.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertTrue( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("sMap");
assertNotNull(cp);
assertEquals("sMap", cp.getFieldName());
assertEquals(Map.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertTrue( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
}
public void testPartialComplete() {
ClassFields<?> cf = null;
ClassProperty cp = null;
cf = new ClassFields(TestBeanAndGetters.class);
assertNotNull(cf);
cp = cf.getClassProperty("myInt");
assertNotNull(cp);
assertEquals("myInt", cp.getFieldName());
assertEquals(int.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertFalse( cp.isPublicField() );
assertTrue( cp.isPublicGettable() );
assertTrue( cp.isPublicSettable() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("int1");
assertNotNull(cp);
assertEquals("int1", cp.getFieldName());
assertEquals(int.class, cp.getType());
assertNotNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertFalse( cp.isComplete() );
assertTrue( cp.isField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertTrue( cp.isPartial() );
assertFalse( cp.isProperty() );
assertFalse( cp.isPublicField() );
assertTrue( cp.isPublicGettable() );
assertFalse( cp.isPublicSettable() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cf = new ClassFields(TestPeaAndSetters.class);
assertNotNull(cf);
cp = cf.getClassProperty("id");
assertNotNull(cp);
assertEquals("id", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertFalse( cp.isProperty() );
assertTrue( cp.isPublicField() );
assertTrue( cp.isPublicGettable() );
assertTrue( cp.isPublicSettable() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("str2");
assertNotNull(cp);
assertEquals("str2", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertFalse( cp.isComplete() );
assertTrue( cp.isField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertTrue( cp.isPartial() );
assertFalse( cp.isProperty() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isPublicGettable() );
assertTrue( cp.isPublicSettable() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
}
public void testTransientFinal() {
ClassFields<?> cf = null;
ClassProperty cp = null;
cf = new ClassFields(TestTransientFinal.class);
assertNotNull(cf);
cp = cf.getClassProperty("field1");
assertNotNull(cp);
assertEquals("field1", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertFalse( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("transField2");
assertNotNull(cp);
assertEquals("transField2", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertTrue( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertFalse( cp.isProperty() );
assertTrue( cp.isSettable() );
assertTrue( cp.isTransient() );
cp = cf.getClassProperty("finalStr3");
assertNotNull(cp);
assertEquals("finalStr3", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNull(cp.getGetter());
assertNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertFalse( cp.isComplete() );
assertTrue( cp.isPublicField() );
assertTrue( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertTrue( cp.isPartial() );
assertFalse( cp.isProperty() );
assertFalse( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("item1");
assertNotNull(cp);
assertEquals("item1", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertFalse( cp.isTransient() );
cp = cf.getClassProperty("item2");
assertNotNull(cp);
assertEquals("item2", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertTrue( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertFalse( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertFalse( cp.isPartial() );
assertTrue( cp.isProperty() );
assertTrue( cp.isSettable() );
assertTrue( cp.isTransient() );
cp = cf.getClassProperty("item3");
assertNotNull(cp);
assertEquals("item3", cp.getFieldName());
assertEquals(String.class, cp.getType());
assertNotNull(cp.getGetter());
assertNotNull(cp.getSetter());
assertNotNull(cp.getField());
assertFalse( cp.isArray() );
assertFalse( cp.isComplete() );
assertFalse( cp.isPublicField() );
assertTrue( cp.isFinal() );
assertTrue( cp.isGettable() );
assertFalse( cp.isIndexed() );
assertFalse( cp.isMapped() );
assertTrue( cp.isPartial() );
assertTrue( cp.isProperty() );
assertFalse( cp.isSettable() );
assertFalse( cp.isTransient() );
}
public void testGetAllClassProperties() {
ClassFields<?> cf = null;
Map<String, ClassProperty> m = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
m = cf.getAllClassProperties();
assertNotNull(m);
assertEquals(2, m.size());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
m = cf.getAllClassProperties();
assertNotNull(m);
assertEquals(2, m.size());
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
m = cf.getAllClassProperties();
assertNotNull(m);
assertEquals(0, m.size());
cf = new ClassFields(TestTransientFinal.class);
assertNotNull(cf);
m = cf.getAllClassProperties();
assertNotNull(m);
assertEquals(8, m.size());
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getClassAnnotations()}.
*/
public void testGetClassAnnotations() {
ClassFields<?> cf = null;
Set<Annotation> s = null;
Annotation a = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(1, cf.getClassAnnotations().size());
s = cf.getClassAnnotations();
a = s.iterator().next();
assertEquals(TestAnnoteClass1.class, a.annotationType());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(1, cf.getClassAnnotations().size());
s = cf.getClassAnnotations();
a = s.iterator().next();
assertEquals(TestAnnoteClass2.class, a.annotationType());
assertEquals("TEST", ((TestAnnoteClass2)a).value());
cf = new ClassFields(TestNone.class);
assertNotNull(cf);
assertEquals(0, cf.getClassAnnotations().size());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(2, cf.getClassAnnotations().size());
s = cf.getClassAnnotations();
for (Annotation an : s) {
assertTrue(an.annotationType().equals(TestAnnoteClass1.class) || an.annotationType().equals(TestAnnoteClass2.class));
}
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(0, cf.getClassAnnotations().size());
cf = new ClassFields(TestExtendBean.class);
assertNotNull(cf);
assertEquals(1, cf.getClassAnnotations().size());
s = cf.getClassAnnotations();
for (Annotation an : s) {
an.annotationType().equals(TestAnnoteClass2.class);
}
}
/**
* Test getting a single annotation from a class by type
*/
public void testGetClassAnnotation() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
TestAnnoteClass1 tac1 = cf.getClassAnnotation(TestAnnoteClass1.class);
assertNotNull(tac1);
TestAnnoteClass2 tac2 = cf.getClassAnnotation(TestAnnoteClass2.class);
assertNull(tac2);
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
tac1 = cf.getClassAnnotation(TestAnnoteClass1.class);
assertNull(tac1);
tac2 = cf.getClassAnnotation(TestAnnoteClass2.class);
assertNotNull(tac2);
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
tac1 = cf.getClassAnnotation(TestAnnoteClass1.class);
assertNotNull(tac1);
tac2 = cf.getClassAnnotation(TestAnnoteClass2.class);
assertNotNull(tac2);
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldAnnotations(java.lang.String)}.
*/
public void testGetFieldAnnotations() {
ClassFields<?> cf = null;
Set<Annotation> s = null;
Annotation a = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertEquals(1, cf.getFieldAnnotations("myInt").size());
s = cf.getFieldAnnotations("myInt");
a = s.iterator().next();
assertEquals(TestAnnote.class, a.annotationType());
assertEquals(1, cf.getFieldAnnotations("myString").size());
s = cf.getFieldAnnotations("myString");
a = s.iterator().next();
assertEquals(TestAnnoteField1.class, a.annotationType());
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldAnnotations("id").size());
assertEquals(1, cf.getFieldAnnotations("entityId").size());
s = cf.getFieldAnnotations("entityId");
a = s.iterator().next();
assertEquals(TestAnnote.class, a.annotationType());
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldAnnotations("fieldInt").size());
assertEquals(1, cf.getFieldAnnotations("myString").size());
s = cf.getFieldAnnotations("myString");
a = s.iterator().next();
assertEquals(TestAnnoteField1.class, a.annotationType());
assertEquals(2, cf.getFieldAnnotations("myInt").size());
assertEquals(2, cf.getFieldAnnotations("myField").size());
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertEquals(0, cf.getFieldAnnotations("id").size());
assertEquals(1, cf.getFieldAnnotations("entityId").size());
s = cf.getFieldAnnotations("entityId");
a = s.iterator().next();
assertEquals(TestAnnote.class, a.annotationType());
assertEquals(3, cf.getFieldAnnotations("extra").size());
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldAnnotation(java.lang.Class, java.lang.String)}.
*/
public void testGetFieldAnnotation() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertNotNull(cf);
assertNotNull( cf.getFieldAnnotation(TestAnnote.class, "myInt") );
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "myInt") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField1.class, "myString") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "myString") );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "id") );
assertNotNull( cf.getFieldAnnotation(TestAnnote.class, "entityId") );
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "entityId") );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertNotNull( cf.getFieldAnnotation(TestAnnote.class, "myInt") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField1.class, "myInt") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "myInt") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField1.class, "myString") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "myString") );
assertNull( cf.getFieldAnnotation(TestAnnote.class, "fieldInt") );
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "fieldInt") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "fieldInt") );
assertNull( cf.getFieldAnnotation(TestAnnote.class, "myField") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField1.class, "myField") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField2.class, "myField") );
cf = new ClassFields(TestEntity.class);
assertNotNull(cf);
assertNull( cf.getFieldAnnotation(TestAnnote.class, "id") );
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "id") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "id") );
assertNotNull( cf.getFieldAnnotation(TestAnnote.class, "entityId") );
assertNull( cf.getFieldAnnotation(TestAnnoteField1.class, "entityId") );
assertNull( cf.getFieldAnnotation(TestAnnoteField2.class, "entityId") );
assertNotNull( cf.getFieldAnnotation(TestAnnote.class, "extra") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField1.class, "extra") );
assertNotNull( cf.getFieldAnnotation(TestAnnoteField2.class, "extra") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#getFieldNameByAnnotation(java.lang.Class)}.
*/
public void testGetFieldNameByAnnotation() {
ClassFields<?> cf = null;
cf = new ClassFields(TestBean.class);
assertEquals("myInt", cf.getFieldNameByAnnotation(TestAnnote.class) );
assertEquals("myString", cf.getFieldNameByAnnotation(TestAnnoteField1.class) );
assertEquals(null, cf.getFieldNameByAnnotation(TestAnnoteField2.class) );
cf = new ClassFields(TestPea.class);
assertNotNull(cf);
assertEquals("entityId", cf.getFieldNameByAnnotation(TestAnnote.class) );
assertEquals(null, cf.getFieldNameByAnnotation(TestAnnoteField1.class) );
assertEquals(null, cf.getFieldNameByAnnotation(TestAnnoteField2.class) );
cf = new ClassFields(TestCompound.class);
assertNotNull(cf);
assertEquals("myInt", cf.getFieldNameByAnnotation(TestAnnote.class) );
// cannot tell because this annotation is on multiple fields
//assertEquals(null, cf.getFieldNameByAnnotation(TestAnnoteField1.class) );
assertEquals("myField", cf.getFieldNameByAnnotation(TestAnnoteField2.class) );
cf = new ClassFields(TestExtendBean.class);
assertNotNull(cf);
assertEquals("myInt", cf.getFieldNameByAnnotation(TestAnnote.class) );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#makeFieldNameFromMethod(java.lang.String)}.
*/
public void testMakeFieldNameFromMethod() {
String name = null;
name = ClassFields.makeFieldNameFromMethod("getStuff");
assertEquals("stuff", name);
name = ClassFields.makeFieldNameFromMethod("getSomeStuff");
assertEquals("someStuff", name);
name = ClassFields.makeFieldNameFromMethod("setStuff");
assertEquals("stuff", name);
name = ClassFields.makeFieldNameFromMethod("isStuff");
assertEquals("stuff", name);
name = ClassFields.makeFieldNameFromMethod("stuff");
assertEquals("stuff", name);
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#capitalize(java.lang.String)}.
*/
public void testCapitalize() {
assertTrue( ClassFields.capitalize("lower").equals("Lower") );
assertTrue( ClassFields.capitalize("UPPER").equals("UPPER") );
assertTrue( ClassFields.capitalize("myStuff").equals("MyStuff") );
assertTrue( ClassFields.capitalize("MyStuff").equals("MyStuff") );
assertTrue( ClassFields.capitalize("").equals("") );
assertTrue( ClassFields.capitalize("m").equals("M") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#unCapitalize(java.lang.String)}.
*/
public void testUnCapitalize() {
assertTrue( ClassFields.unCapitalize("lower").equals("lower") );
assertTrue( ClassFields.unCapitalize("UPPER").equals("uPPER") );
assertTrue( ClassFields.unCapitalize("MyStuff").equals("myStuff") );
assertTrue( ClassFields.unCapitalize("myStuff").equals("myStuff") );
assertTrue( ClassFields.unCapitalize("").equals("") );
assertTrue( ClassFields.unCapitalize("M").equals("m") );
}
/**
* Test method for {@link org.azeckoski.reflectutils.ClassFields#isGetClassMethod(java.lang.reflect.Method)}.
*/
public void testIsGetClassMethod() {
Method m = null;
try {
m = TestBean.class.getMethod("getClass", new Class<?>[] {});
assertTrue( ClassFields.isGetClassMethod(m) );
} catch (Exception e) {
fail("Failed to find method to test");
}
try {
m = TestBean.class.getMethod("getMyString", new Class<?>[] {});
assertFalse( ClassFields.isGetClassMethod(m) );
} catch (Exception e) {
fail("Failed to find method to test");
}
}
public void testExcludeFields() {
ClassFields<?> cf = null;
cf = new ClassFields<TestExcludeFields>(TestExcludeFields.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertEquals(2, cf.size(FieldsFilter.ALL));
assertTrue(cf.isFieldNameValid("name"));
assertTrue(cf.isFieldNameValid("email"));
assertFalse(cf.isFieldNameValid("password"));
assertEquals(2, cf.getFieldNames().size());
}
public void testExcludeStaticFields() {
ClassFields<?> cf = null;
cf = new ClassFields<TestStaticsExclude>(TestStaticsExclude.class);
assertNotNull(cf);
assertEquals(2, cf.size());
assertEquals(2, cf.size(FieldsFilter.ALL));
assertTrue(cf.isFieldNameValid("name"));
assertTrue(cf.isFieldNameValid("num"));
assertFalse(cf.isFieldNameValid("sname"));
assertFalse(cf.isFieldNameValid("snum"));
assertFalse(cf.isFieldNameValid("sbool"));
assertEquals(2, cf.getFieldNames().size());
}
public void testIncludeStaticFields() {
ClassFields<?> cf = null;
cf = new ClassFields<TestStaticsInclude>(TestStaticsInclude.class);
assertNotNull(cf);
assertEquals(5, cf.size());
assertEquals(5, cf.size(FieldsFilter.ALL));
assertTrue(cf.isFieldNameValid("name"));
assertTrue(cf.isFieldNameValid("num"));
assertTrue(cf.isFieldNameValid("sname"));
assertTrue(cf.isFieldNameValid("snum"));
assertTrue(cf.isFieldNameValid("sbool"));
assertEquals(5, cf.getFieldNames().size());
}
}