< prev index next >

test/java/util/Optional/Basic.java

Print this page
rev 11381 : 8071670: java.util.Optional: please add a way to specify if-else behavior
Reviewed-by: dfuchs

*** 25,36 **** --- 25,40 ---- * @summary Basic functional test of Optional * @author Mike Duigou * @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.*; import org.testng.annotations.Test;
*** 49,66 **** assertTrue(!empty.equals(present)); assertTrue(0 == empty.hashCode()); assertTrue(!empty.toString().isEmpty()); assertTrue(!empty.toString().equals(presentEmptyString.toString())); assertTrue(!empty.isPresent()); ! empty.ifPresent(v -> { fail(); }); assertSame(null, empty.orElse(null)); RuntimeException orElse = new RuntimeException() { }; assertSame(Boolean.FALSE, empty.orElse(Boolean.FALSE)); assertSame(null, empty.orElseGet(() -> null)); assertSame(Boolean.FALSE, empty.orElseGet(() -> Boolean.FALSE)); } @Test(expectedExceptions=NoSuchElementException.class) public void testEmptyGet() { Optional<Boolean> empty = Optional.empty(); Boolean got = empty.get(); --- 53,111 ---- assertTrue(!empty.equals(present)); assertTrue(0 == empty.hashCode()); assertTrue(!empty.toString().isEmpty()); assertTrue(!empty.toString().equals(presentEmptyString.toString())); assertTrue(!empty.isPresent()); ! ! 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)); assertSame(null, empty.orElseGet(() -> null)); 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(); Boolean got = empty.get();
*** 100,115 **** assertTrue(Boolean.TRUE.hashCode() == present.hashCode()); assertTrue(!present.toString().isEmpty()); assertTrue(!present.toString().equals(presentEmptyString.toString())); assertTrue(-1 != present.toString().indexOf(Boolean.TRUE.toString())); assertSame(Boolean.TRUE, present.get()); try { present.ifPresent(v -> { throw new ObscureException(); }); fail(); } catch (ObscureException expected) { ! } assertSame(Boolean.TRUE, present.orElse(null)); assertSame(Boolean.TRUE, present.orElse(Boolean.FALSE)); assertSame(Boolean.TRUE, present.orElseGet(null)); assertSame(Boolean.TRUE, present.orElseGet(() -> null)); assertSame(Boolean.TRUE, present.orElseGet(() -> Boolean.FALSE)); --- 145,181 ---- assertTrue(Boolean.TRUE.hashCode() == present.hashCode()); assertTrue(!present.toString().isEmpty()); 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)); assertSame(Boolean.TRUE, present.orElseGet(() -> null)); assertSame(Boolean.TRUE, present.orElseGet(() -> Boolean.FALSE));
< prev index next >