diff --git a/spring-core/src/test/java/org/springframework/util/ObjectUtilsTests.java b/spring-core/src/test/java/org/springframework/util/ObjectUtilsTests.java index 4ea30cfa4a1b..74d0dee6115f 100644 --- a/spring-core/src/test/java/org/springframework/util/ObjectUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/ObjectUtilsTests.java @@ -62,6 +62,7 @@ * @author Rick Evans * @author Sam Brannen * @author Hyunjin Choi + * @author Ngoc Nhan */ class ObjectUtilsTests { @@ -1114,4 +1115,22 @@ private static String prefix(Class clazz) { } } + @Test + void unwrapOptional() { + + assertThat(ObjectUtils.unwrapOptional(null)).isNull(); + assertThat(ObjectUtils.unwrapOptional(Optional.empty())).isNull(); + assertThat(ObjectUtils.unwrapOptional(Optional.of("some value"))).isEqualTo("some value"); + + Optional> nestedEmptyOptional = Optional.of(Optional.empty()); + assertThatIllegalArgumentException() + .isThrownBy(() -> ObjectUtils.unwrapOptional(nestedEmptyOptional)) + .withMessage("Multi-level Optional usage not supported"); + + Optional> nestedStringOptional = Optional.of(Optional.of("some value")); + assertThatIllegalArgumentException() + .isThrownBy(() -> ObjectUtils.unwrapOptional(nestedStringOptional)) + .withMessage("Multi-level Optional usage not supported"); + } + }