ReflectUtil: test for getAllFieldsForClass

- code comment turned to javadoc
- added braces to if and for statements to make it look more like the rest
- tests added

Signed-off-by: Laszlo Hornyak <laszlo.hornyak@gmail.com>
This commit is contained in:
Laszlo Hornyak 2013-10-08 21:02:58 +02:00
parent 66fe3abe3b
commit d1dd85a4c4
2 changed files with 75 additions and 4 deletions

View File

@ -106,7 +106,12 @@ public class ReflectUtil {
return fields;
}
// Returns all unique fields except excludeClasses for a cmd class
/**
* Returns all unique fields except excludeClasses for a cmd class
* @param cmdClass the class in which fields should be collected
* @param excludeClasses the classes whose fields must be ignored
* @return list of fields
*/
public static Set<Field> getAllFieldsForClass(Class<?> cmdClass,
Class<?>[] excludeClasses) {
Set<Field> fields = new HashSet<Field>();
@ -116,14 +121,17 @@ public class ReflectUtil {
while (superClass != null && superClass != Object.class) {
String superName = superClass.getName();
boolean isNameEqualToSuperName = false;
for (Class<?> baseClass: excludeClasses)
if (superName.equals(baseClass.getName()))
for (Class<?> baseClass: excludeClasses) {
if (superName.equals(baseClass.getName())) {
isNameEqualToSuperName = true;
}
}
if (!isNameEqualToSuperName) {
Field[] superClassFields = superClass.getDeclaredFields();
if (superClassFields != null)
if (superClassFields != null) {
Collections.addAll(fields, superClassFields);
}
}
superClass = superClass.getSuperclass();
}

View File

@ -16,7 +16,11 @@
// under the License.package com.cloud.utils;
package com.cloud.utils;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Test;
import static com.cloud.utils.ReflectUtil.flattenProperties;
@ -88,4 +92,63 @@ public final class ReflectUtilTest {
}
}
static class Empty {
}
static class Foo {
String fooField;
int fooIntField;
}
static class Bar extends Foo {
String barField;
int barIntField;
}
static class Baz extends Foo {
String bazField;
int bazIntField;
}
@Test
public void getAllFieldsForClassWithFoo() throws NoSuchFieldException, SecurityException {
Set<Field> fooFields = ReflectUtil.getAllFieldsForClass(Foo.class, new Class<?> [] {});
Assert.assertNotNull(fooFields);
Assert.assertEquals(2, fooFields.size());
Assert.assertTrue(fooFields.contains(Foo.class.getDeclaredField("fooField")));
Assert.assertTrue(fooFields.contains(Foo.class.getDeclaredField("fooIntField")));
}
@Test
public void getAllFieldsForClassWithBar() throws NoSuchFieldException, SecurityException {
Set<Field> barFields = ReflectUtil.getAllFieldsForClass(Bar.class, new Class<?> [] {});
Assert.assertNotNull(barFields);
Assert.assertEquals(4, barFields.size());
Assert.assertTrue(barFields.contains(Foo.class.getDeclaredField("fooField")));
Assert.assertTrue(barFields.contains(Foo.class.getDeclaredField("fooIntField")));
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barField")));
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barIntField")));
}
@Test
public void getAllFieldsForClassWithBarWithoutFoo() throws NoSuchFieldException, SecurityException {
Set<Field> barFields = ReflectUtil.getAllFieldsForClass(Bar.class, new Class<?> [] {Foo.class});
Assert.assertNotNull(barFields);
Assert.assertEquals(2, barFields.size());
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barField")));
Assert.assertTrue(barFields.contains(Bar.class.getDeclaredField("barIntField")));
}
@Test
public void getAllFieldsForClassWithBazWithoutBar() throws NoSuchFieldException, SecurityException {
Set<Field> bazFields = ReflectUtil.getAllFieldsForClass(Baz.class, new Class<?> [] {Bar.class});
Assert.assertNotNull(bazFields);
Assert.assertEquals(4, bazFields.size());
Assert.assertTrue(bazFields.contains(Foo.class.getDeclaredField("fooField")));
Assert.assertTrue(bazFields.contains(Foo.class.getDeclaredField("fooIntField")));
Assert.assertTrue(bazFields.contains(Baz.class.getDeclaredField("bazField")));
Assert.assertTrue(bazFields.contains(Baz.class.getDeclaredField("bazIntField")));
}
}