diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..7411144 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -5,6 +5,8 @@ import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; import static org.junit.Assert.assertEquals; @@ -32,6 +34,101 @@ public void ifPresent() { } } + @Test + public void filter() { + final Optional o1 = getOptional(); + + final Predicate isEmpty = String::isEmpty; + + final Optional expected = o1.filter(isEmpty); + + final Optional actual; + if (o1.isPresent()) { + if (isEmpty.test(o1.get())) { + actual = Optional.of(o1.get()); + } else { + actual = Optional.empty(); + } + } else { + actual = Optional.empty(); + } + assertEquals(expected, actual); + } + + @Test + public void flatMap() { + final Optional o1 = getOptional(); + + final Function> optionalFunction = (g) -> Optional.of(g + "abc"); + + final Optional expected = o1.flatMap(optionalFunction); + + final Optional actual; + if (o1.isPresent()) { + actual = optionalFunction.apply(o1.get()); + } else { + actual = Optional.empty(); + } + assertEquals(expected, actual); + } + + @Test + public void orElse() { + final Optional o1 = getOptional(); + + final String abc = "abc"; + + final Optional expected = Optional.of(o1.orElse(abc)); + + final Optional actual; + + if (o1.isPresent()) { + actual = Optional.of(o1.get()); + } else { + actual = Optional.of(abc); + } + assertEquals(expected, actual); + } + + @Test + public void orElseGet() { + final Optional o1 = getOptional(); + + final Supplier supplier = () -> "abc"; + + final Optional expected = Optional.of(o1.orElseGet(supplier)); + + final Optional actual; + + if (o1.isPresent()) { + actual = Optional.of(o1.get()); + } else { + actual = Optional.of(supplier.get()); + } + assertEquals(expected, actual); + } + + @Test + public void orElseThrow() { + final Optional o1 = getOptional(); + + final Supplier supplier = () -> new NullPointerException("Another NPE"); + try { + final Optional expected = Optional.of(o1.orElseThrow(supplier)); + + final Optional actual; + + if (o1.isPresent()) { + actual = Optional.of(o1.get()); + } else { + throw supplier.get(); + } + assertEquals(expected, actual); + } catch (NullPointerException e) { + assertEquals(e.getClass(), NullPointerException.class); + } + } + @Test public void map() { final Optional o1 = getOptional(); @@ -52,7 +149,7 @@ public void map() { private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); } }