diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..01d8b33 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -2,19 +2,22 @@ import org.junit.Test; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Function; +import java.util.function.Supplier; +import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class OptionalExample { - - @Test + @Test(expected = UnsupportedOperationException.class) public void get() { final Optional o1 = Optional.empty(); - o1.ifPresent(s -> System.out.println(s)); + o1.ifPresent(System.out::println); o1.orElse("t"); o1.orElseGet(() -> "t"); @@ -55,4 +58,96 @@ private Optional getOptional() { ? Optional.empty() : Optional.of("abc"); } + + @Test + public void filter(){ + final Optional o1 = getOptional(); + + final Optional expected = o1.filter((s) -> s.length() < 5); + + final Optional actual; + + if (o1.isPresent()){ + if (o1.get().length() < 5) + actual = Optional.of(o1.get()); + else actual = Optional.empty(); + } else actual = Optional.empty(); + + assertThat(expected, equalTo(actual)); + } + + @Test + public void flatMap() { + final Optional o1 = getOptional(); + + final Function> f = Optional::of; + + final Optional expected = o1.flatMap(f); + + final Optional actual; + + if (o1.isPresent()){ + actual = f.apply(o1.get()); + } else actual = Optional.empty(); + + assertThat(expected, equalTo(actual)); + + } + + @Test + public void orElse() { + final Optional o1 = getOptional(); + + final String els = "cba"; + + final String expected = o1.orElse(els); + + final String actual; + + if (o1.isPresent()){ + actual = o1.get(); + } else actual = els; + + assertThat(expected, equalTo(actual)); + + } + + @Test + public void orElseGet() { + final Optional o1 = getOptional(); + + final Supplier s = () -> "cba"; + + final String expected = o1.orElseGet(s); + + final String actual; + + if (o1.isPresent()){ + actual = o1.get(); + } else actual = s.get(); + + assertThat(expected, equalTo(actual)); + + } + + @Test(expected = NoSuchElementException.class) + public void orElseThrow() { + final Optional o1 = getOptional(); + + final Supplier s = NoSuchElementException::new; + + final String actual; + + if (o1.isPresent()){ + actual = o1.get(); + } else throw s.get(); + + final String expected = o1.orElseThrow(s); + + assertThat(expected, equalTo(actual)); + + throw new NoSuchElementException(); + } + + }