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());
+ }
}