From 5e0697c43febfe313e07feb8c9015611d6b07230 Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Thu, 13 Jul 2017 18:20:51 +0300 Subject: [PATCH 1/2] from lab --- src/test/java/option/OptionalExample.java | 82 +++++++++++++++++++++-- 1 file changed, 78 insertions(+), 4 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index db18993..e176d89 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -1,15 +1,26 @@ package option; +import com.sun.istack.internal.Nullable; import org.junit.Test; +import java.lang.reflect.Field; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import java.util.function.BiFunction; import java.util.function.Function; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.*; public class OptionalExample { + private final String TEST_VALUE_1 = "TEST_VALUE_1"; + private final String TEST_VALUE_2 = "TEST_VALUE_2"; + @Test public void get() { final Optional o1 = Optional.empty(); @@ -50,9 +61,72 @@ public void map() { assertEquals(expected, actual); } + @Test(expected = NoSuchElementException.class) + public void orELseThrow1() { + Optional optional = Optional.empty(); + optional.orElseThrow(() -> new NoSuchElementException("empty value")); + } + + @Test + public void orELseThrow2() { + Optional optional = Optional.of(TEST_VALUE_1); + String fromOptional = optional.orElseThrow(() -> new NoSuchElementException("empty value")); + assertThat(fromOptional, is(TEST_VALUE_1)); + } + + @Test + public void flatMap() { + class TesterFlatMap{ + @Nullable + private String field; + Optional getField(){ + return Optional.ofNullable(field); + } + + void setField(String field) { + this.field = field; + } + } + TesterFlatMap testerFlatMap = new TesterFlatMap(); + testerFlatMap.setField(TEST_VALUE_1); + assertTrue(Optional.of(testerFlatMap) + .flatMap(TesterFlatMap::getField) + .isPresent()); + } + + @Test + public void tet(){ + getOptional().orElseGet(s-> new ) + } + + // TODO: 7/7/2017 написать несколько тестов, которые должны быть с get и function private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() - ? Optional.empty() - : Optional.of("abc"); + ? Optional.empty() + : Optional.of("abc"); + } + + @Test + public void filter() { + Optional optional_1 = Optional.of(TEST_VALUE_1); + optional_1 = optional_1.filter(s -> s.startsWith("J")); + assertFalse(optional_1.isPresent()); + + Optional optional_2 = Optional.of(TEST_VALUE_2); + optional_2 = optional_2.filter(s->s.startsWith("T")); + assertTrue(optional_2.isPresent()); + + + } + + @Test + public void testZipMap(){ + + } + // TODO: 7/7/2017 написание метода zip для коллекции не использовать get и ifPresent (Можно использовать map и flatMap). + // Ну и написать тесты на это днище. И да, без мутабельных переменных. + + public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(obj1 -> o2.map(obj2 -> f.apply(obj1, obj2))); } -} +} \ No newline at end of file From 9133a79d5c524c6a47d03fef3db7d6f1a9e98959 Mon Sep 17 00:00:00 2001 From: Vasiliy Bobkov Date: Thu, 13 Jul 2017 21:31:03 +0300 Subject: [PATCH 2/2] Task completed --- src/test/java/option/OptionalExample.java | 48 +++++++++++++---------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/src/test/java/option/OptionalExample.java b/src/test/java/option/OptionalExample.java index e176d89..257365f 100644 --- a/src/test/java/option/OptionalExample.java +++ b/src/test/java/option/OptionalExample.java @@ -3,10 +3,6 @@ import com.sun.istack.internal.Nullable; import org.junit.Test; -import java.lang.reflect.Field; -import java.lang.reflect.Parameter; -import java.util.ArrayList; -import java.util.List; import java.util.NoSuchElementException; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; @@ -76,10 +72,11 @@ public void orELseThrow2() { @Test public void flatMap() { - class TesterFlatMap{ + class TesterFlatMap { @Nullable private String field; - Optional getField(){ + + Optional getField() { return Optional.ofNullable(field); } @@ -92,20 +89,33 @@ void setField(String field) { assertTrue(Optional.of(testerFlatMap) .flatMap(TesterFlatMap::getField) .isPresent()); + testerFlatMap.setField(null); + assertFalse(Optional.of(testerFlatMap) + .flatMap(TesterFlatMap::getField) + .isPresent()); } @Test - public void tet(){ - getOptional().orElseGet(s-> new ) + public void testOrElseGet() { + String actual = (String) Optional.empty().orElseGet(this::getTestValue); + String expected = getTestValue(); + assertThat(actual, is(expected)); + } + + public String getTestValue() { + return "test"; } - // TODO: 7/7/2017 написать несколько тестов, которые должны быть с get и function private Optional getOptional() { return ThreadLocalRandom.current().nextBoolean() ? Optional.empty() : Optional.of("abc"); } + public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { + return o1.flatMap(obj1 -> o2.map(obj2 -> f.apply(obj1, obj2))); + } + @Test public void filter() { Optional optional_1 = Optional.of(TEST_VALUE_1); @@ -113,20 +123,18 @@ public void filter() { assertFalse(optional_1.isPresent()); Optional optional_2 = Optional.of(TEST_VALUE_2); - optional_2 = optional_2.filter(s->s.startsWith("T")); + optional_2 = optional_2.filter(s -> s.startsWith("T")); assertTrue(optional_2.isPresent()); - - } @Test - public void testZipMap(){ - - } - // TODO: 7/7/2017 написание метода zip для коллекции не использовать get и ifPresent (Можно использовать map и flatMap). - // Ну и написать тесты на это днище. И да, без мутабельных переменных. - - public static Optional zipMap(Optional o1, Optional o2, BiFunction f) { - return o1.flatMap(obj1 -> o2.map(obj2 -> f.apply(obj1, obj2))); + public void testZipMap() { + BiFunction function = String::concat; + final Optional hello = Optional.of("Hello"); + final Optional world = Optional.of(" world"); + assertThat(zipMap(hello, world, function), is(Optional.of("Hello world"))); + assertThat(zipMap(hello, Optional.empty(), function), is(Optional.empty())); + assertThat(zipMap(Optional.empty(), hello, function), is(Optional.empty())); + assertThat(zipMap(Optional.empty(), Optional.empty(), function), is(Optional.empty())); } } \ No newline at end of file