package com.vaadin.util;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
public class ReflectToolsGetFieldValueByTypeTest {
@Test
public void getFieldValue() {
class MyClass {
public Integer getField() {
return 1;
}
public void setField(Integer i) {
}
}
class MySubClass extends MyClass {
public String field = "Hello";
}
MySubClass myInstance = new MySubClass();
java.lang.reflect.Field memberField;
Object fieldValue = false;
try {
memberField = myInstance.getClass().getField("field");
// Should get a String value. Without the third parameter (calling
// ReflectTools.getJavaFieldValue(Object object, LegacyField field))
// would
// get an Integer value
fieldValue = ReflectTools.getJavaFieldValue(myInstance, memberField,
String.class);
} catch (Exception e) {
}
assertTrue(fieldValue instanceof String);
}
@Test
public void getFieldValueViaGetter() {
class MyClass {
public Integer field = 1;
}
class MySubClass extends MyClass {
public String field = "Hello";
}
MySubClass myInstance = new MySubClass();
java.lang.reflect.Field memberField;
try {
memberField = myInstance.getClass().getField("field");
// Should throw an IllegalArgument exception as the mySubClass class
// doesn't have an Integer field.
ReflectTools.getJavaFieldValue(myInstance, memberField,
Integer.class);
fail("Previous method call should have thrown an exception");
} catch (Exception e) {
}
}
}