BeanWrapper supports traversal of nested paths with Java 8 Optional declarations

Issue: SPR-12241
This commit is contained in:
Juergen Hoeller
2014-09-24 17:56:24 +02:00
parent 281b243b88
commit 0934751d7a
4 changed files with 143 additions and 9 deletions

View File

@@ -28,6 +28,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
import java.util.SortedMap;
@@ -1537,9 +1538,45 @@ public final class BeanWrapperTests extends AbstractConfigurablePropertyAccessor
BeanWrapperImpl bwi = new BeanWrapperImpl(foo);
bwi.setPropertyValue("object", "a String");
assertEquals("a String", foo.value);
assertTrue(foo.getObject() == 8);
assertEquals(8, bwi.getPropertyValue("object"));
}
@Test
public void testGetterWithOptional() {
GetterWithOptional foo = new GetterWithOptional();
TestBean tb = new TestBean("x");
BeanWrapperImpl bwi = new BeanWrapperImpl(foo);
bwi.setPropertyValue("object", tb);
assertSame(tb, foo.value);
assertSame(tb, foo.getObject().get());
assertSame(tb, ((Optional<String>) bwi.getPropertyValue("object")).get());
assertEquals("x", foo.value.getName());
assertEquals("x", foo.getObject().get().getName());
assertEquals("x", bwi.getPropertyValue("object.name"));
bwi.setPropertyValue("object.name", "y");
assertSame(tb, foo.value);
assertSame(tb, foo.getObject().get());
assertSame(tb, ((Optional<String>) bwi.getPropertyValue("object")).get());
assertEquals("y", foo.value.getName());
assertEquals("y", foo.getObject().get().getName());
assertEquals("y", bwi.getPropertyValue("object.name"));
}
@Test
public void testGetterWithOptionalAndAutoGrowing() {
GetterWithOptional foo = new GetterWithOptional();
BeanWrapperImpl bwi = new BeanWrapperImpl(foo);
bwi.setAutoGrowNestedPaths(true);
bwi.setPropertyValue("object.name", "x");
assertEquals("x", foo.value.getName());
assertEquals("x", foo.getObject().get().getName());
assertEquals("x", bwi.getPropertyValue("object.name"));
}
@Test
public void testGenericArraySetter() {
SkipReaderStub foo = new SkipReaderStub();
@@ -1967,6 +2004,20 @@ public final class BeanWrapperTests extends AbstractConfigurablePropertyAccessor
}
public static class GetterWithOptional {
public TestBean value;
public void setObject(TestBean object) {
this.value = object;
}
public Optional<TestBean> getObject() {
return Optional.ofNullable(this.value);
}
}
public static class SkipReaderStub<T> {
public T[] items;