--- a/jdk/test/java/util/Optional/Basic.java Fri Feb 13 11:03:57 2015 +0800
+++ b/jdk/test/java/util/Optional/Basic.java Fri Feb 13 11:13:27 2015 +0100
@@ -27,8 +27,12 @@
* @run testng Basic
*/
+import java.lang.AssertionError;
+import java.lang.NullPointerException;
+import java.lang.Throwable;
import java.util.NoSuchElementException;
import java.util.Optional;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream;
import static org.testng.Assert.*;
@@ -51,7 +55,23 @@
assertTrue(!empty.toString().isEmpty());
assertTrue(!empty.toString().equals(presentEmptyString.toString()));
assertTrue(!empty.isPresent());
- empty.ifPresent(v -> { fail(); });
+
+ empty.ifPresent(v -> fail());
+
+ AtomicBoolean emptyCheck = new AtomicBoolean();
+ empty.ifPresentOrElse(v -> fail(), () -> emptyCheck.set(true));
+ assertTrue(emptyCheck.get());
+
+ try {
+ empty.ifPresentOrElse(v -> fail(), () -> { throw new ObscureException(); });
+ fail();
+ } catch (ObscureException expected) {
+ } catch (AssertionError e) {
+ throw e;
+ } catch (Throwable t) {
+ fail();
+ }
+
assertSame(null, empty.orElse(null));
RuntimeException orElse = new RuntimeException() { };
assertSame(Boolean.FALSE, empty.orElse(Boolean.FALSE));
@@ -59,6 +79,31 @@
assertSame(Boolean.FALSE, empty.orElseGet(() -> Boolean.FALSE));
}
+ @Test(groups = "unit")
+ public void testIfPresentAndOrElseAndNull() {
+ Optional<Boolean> empty = Optional.empty();
+ Optional<Boolean> present = Optional.of(Boolean.TRUE);
+
+ // No NPE
+ present.ifPresentOrElse(v -> {}, null);
+ empty.ifPresent(null);
+ empty.ifPresentOrElse(null, () -> {});
+
+ // NPE
+ try {
+ present.ifPresent(null);
+ fail();
+ } catch (NullPointerException ex) {}
+ try {
+ present.ifPresentOrElse(null, () -> {});
+ fail();
+ } catch (NullPointerException ex) {}
+ try {
+ empty.ifPresentOrElse(v -> {}, null);
+ fail();
+ } catch (NullPointerException ex) {}
+ }
+
@Test(expectedExceptions=NoSuchElementException.class)
public void testEmptyGet() {
Optional<Boolean> empty = Optional.empty();
@@ -102,12 +147,33 @@
assertTrue(!present.toString().equals(presentEmptyString.toString()));
assertTrue(-1 != present.toString().indexOf(Boolean.TRUE.toString()));
assertSame(Boolean.TRUE, present.get());
+
+ AtomicBoolean presentCheck = new AtomicBoolean();
+ present.ifPresent(v -> presentCheck.set(true));
+ assertTrue(presentCheck.get());
+ presentCheck.set(false);
+ present.ifPresentOrElse(v -> presentCheck.set(true), () -> fail());
+ assertTrue(presentCheck.get());
+
try {
present.ifPresent(v -> { throw new ObscureException(); });
fail();
} catch (ObscureException expected) {
+ } catch (AssertionError e) {
+ throw e;
+ } catch (Throwable t) {
+ fail();
+ }
+ try {
+ present.ifPresentOrElse(v -> { throw new ObscureException(); }, () -> fail());
+ fail();
+ } catch (ObscureException expected) {
+ } catch (AssertionError e) {
+ throw e;
+ } catch (Throwable t) {
+ fail();
+ }
- }
assertSame(Boolean.TRUE, present.orElse(null));
assertSame(Boolean.TRUE, present.orElse(Boolean.FALSE));
assertSame(Boolean.TRUE, present.orElseGet(null));