diff --git a/pom.xml b/pom.xml index 4217514..7448be7 100755 --- a/pom.xml +++ b/pom.xml @@ -9,10 +9,11 @@ 1.0-SNAPSHOT + - junit - junit - 4.12 + org.junit.jupiter + junit-jupiter-api + 5.0.0-M4 test diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..42584cd 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -1,12 +1,17 @@ package option; -import org.junit.Test; - import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.Assert.assertEquals; public class OptionalExample { @@ -18,7 +23,8 @@ public void get() { o1.orElse("t"); o1.orElseGet(() -> "t"); - o1.orElseThrow(() -> new UnsupportedOperationException()); + assertThrows(UnsupportedOperationException.class, + () -> o1.orElseThrow(UnsupportedOperationException::new)); } @Test @@ -35,17 +41,12 @@ public void ifPresent() { @Test public void map() { final Optional o1 = getOptional(); - final Function getLength = String::length; final Optional expected = o1.map(getLength); final Optional actual; - if (o1.isPresent()) { - actual = Optional.of(getLength.apply(o1.get())); - } else { - actual = Optional.empty(); - } + actual = o1.map(getLength::apply); assertEquals(expected, actual); } @@ -55,4 +56,100 @@ private Optional getOptional() { ? Optional.empty() : Optional.of("abc"); } + + @Test + void filter() { + Optional o1 = Optional.of("abc"); + Predicate predicate = s -> s.equals("test"); + Optional expected = o1.filter(predicate); + Optional actual = predicate.test(o1.get())? o1 : Optional.empty(); + + assertEquals(expected, actual); + + + o1 = Optional.empty(); + expected = o1.filter(predicate); + actual = Optional.empty(); + + assertEquals(expected, actual); + } + + @Test + void flatMap() { + Optional o1 = Optional.of("abc"); + Function> function = s -> Optional.of("test"); + Optional expected = o1.flatMap(function); + Optional actual; + actual = function.apply(o1.get()); + + assertEquals(expected, actual); + + o1 = Optional.empty(); + expected = o1.flatMap(function); + actual = Optional.empty(); + + assertEquals(expected, actual); + } + + @Test + void orElse() { + Optional o1 = Optional.of("abc"); + String expected = o1.orElse("other"); + String actual; + actual = o1.get(); + + assertEquals(expected, actual); + + + o1 = Optional.empty(); + expected = o1.orElse("other"); + actual = "other"; + + assertEquals(expected, actual); + } + + @Test + void orElseThrow() { + final Optional o1 = Optional.of("abc"); + Supplier supplier = NullPointerException::new; + + final Class exception = NullPointerException.class; + o1.orElseThrow(supplier); + o1.get(); + + final Optional o2 = Optional.empty(); + assertThrows(exception, () -> o2.orElseThrow(supplier)); + } + + @Test + void orElseGet() { + Optional o1 = Optional.of("abc"); + final Supplier supplier = () -> "test"; + String expected = o1.orElseGet(supplier); + String actual = o1.get(); + + assertEquals(expected,actual); + + + o1 = Optional.empty(); + expected = o1.orElseGet(supplier); + actual = supplier.get(); + + assertEquals(expected,actual); + + } + + // TODO: 07.07.17 fill out and test method using map and flatMap + private static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(x -> o2.map(y -> f.apply(x,y))); + } + + @Test + void testZipMap(){ + final BiFunction mrTractor = String::concat; + + assertEquals(zipMap(Optional.of("KuKa"), Optional.of("ReKu"), mrTractor), Optional.of("KuKaReKu")); + assertEquals(zipMap(Optional.of("Aloha, boys"), Optional.empty(), mrTractor), Optional.empty()); + assertEquals(zipMap(Optional.empty(), Optional.empty(), mrTractor), Optional.empty()); + } }