BeanWrapperImpl.getPropertyDescriptor allows for nested paths again

Issue: SPR-13403
This commit is contained in:
Juergen Hoeller
2015-08-28 11:17:42 +02:00
parent 90f46f9327
commit ff9fb9aa88
6 changed files with 68 additions and 35 deletions

View File

@@ -214,7 +214,6 @@ public abstract class AbstractPropertyAccessorTests {
public void getNestedDeepProperty() {
Person target = createPerson("John", "London", "UK");
AbstractPropertyAccessor accessor = createAccessor(target);
assertThat(accessor.getPropertyValue("address.country.name"), is("UK"));
}

View File

@@ -36,15 +36,16 @@ import static org.junit.Assert.*;
* @author Chris Beams
* @author Dave Syer
*/
public final class BeanWrapperTests extends AbstractPropertyAccessorTests {
public class BeanWrapperTests extends AbstractPropertyAccessorTests {
@Override
protected BeanWrapperImpl createAccessor(Object target) {
return new BeanWrapperImpl(target);
}
@Test
public void setterDoestNotCallGetter() {
public void setterDoesNotCallGetter() {
GetterBean target = new GetterBean();
BeanWrapper accessor = createAccessor(target);
accessor.setPropertyValue("name", "tom");
@@ -133,7 +134,7 @@ public final class BeanWrapperTests extends AbstractPropertyAccessorTests {
}
}
@Test // Can't be shared: no type mismatch with a field")
@Test // Can't be shared: no type mismatch with a field
public void setPropertyTypeMismatch() {
PropertyTypeMismatch target = new PropertyTypeMismatch();
BeanWrapper accessor = createAccessor(target);
@@ -143,6 +144,21 @@ public final class BeanWrapperTests extends AbstractPropertyAccessorTests {
assertEquals(8, accessor.getPropertyValue("object"));
}
@Test
public void propertyDescriptors() {
TestBean target = new TestBean();
target.setSpouse(new TestBean());
BeanWrapper accessor = createAccessor(target);
accessor.setPropertyValue("name", "a");
accessor.setPropertyValue("spouse.name", "b");
assertEquals("a", target.getName());
assertEquals("b", target.getSpouse().getName());
assertEquals("a", accessor.getPropertyValue("name"));
assertEquals("b", accessor.getPropertyValue("spouse.name"));
assertEquals(String.class, accessor.getPropertyDescriptor("name").getPropertyType());
assertEquals(String.class, accessor.getPropertyDescriptor("spouse.name").getPropertyType());
}
@Test
public void getPropertyWithOptional() {
GetterWithOptional target = new GetterWithOptional();

View File

@@ -27,7 +27,7 @@ import static org.junit.Assert.*;
*
* @author Jose Luis Martin
* @author Chris Beams
* @@author Stephane Nicoll
* @author Stephane Nicoll
*/
public class DirectFieldAccessorTests extends AbstractPropertyAccessorTests {
@@ -39,14 +39,17 @@ public class DirectFieldAccessorTests extends AbstractPropertyAccessorTests {
@Test
public void withShadowedField() throws Exception {
final StringBuilder sb = new StringBuilder();
@SuppressWarnings("serial")
TestBean target = new TestBean() {
@SuppressWarnings("unused")
StringBuilder name = new StringBuilder();
StringBuilder name = sb;
};
DirectFieldAccessor dfa = createAccessor(target);
assertEquals(StringBuilder.class, dfa.getPropertyType("name"));
assertEquals(sb, dfa.getPropertyValue("name"));
}
}