|  | // Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | package backport; | 
|  |  | 
|  | import java.util.Optional; | 
|  |  | 
|  | public final class OptionalBackportJava9Main { | 
|  |  | 
|  | public static void main(String[] args) { | 
|  | testOr(); | 
|  | testOrNull(); | 
|  | testIfPresentOrElse(); | 
|  | testStream(); | 
|  | } | 
|  |  | 
|  | private static void testOr() { | 
|  | Optional<String> value = Optional.of("value"); | 
|  | Optional<String> defaultValue = Optional.of("default"); | 
|  | Optional<String> emptyValue = Optional.empty(); | 
|  | Optional<String> result; | 
|  |  | 
|  | result = value.or(() -> defaultValue); | 
|  | assertTrue(value == result); | 
|  | result = emptyValue.or(() -> defaultValue); | 
|  | assertTrue(result == defaultValue); | 
|  | } | 
|  |  | 
|  | private static void testOrNull() { | 
|  | Optional<String> value = Optional.of("value"); | 
|  | Optional<String> emptyValue = Optional.empty(); | 
|  |  | 
|  | try { | 
|  | value.or(null); | 
|  | fail(); | 
|  | } catch (NullPointerException e) { | 
|  | } | 
|  |  | 
|  | try { | 
|  | emptyValue.or(null); | 
|  | fail(); | 
|  | } catch (NullPointerException e) { | 
|  | } | 
|  |  | 
|  | try { | 
|  | value.or(() -> null); | 
|  | } catch (NullPointerException e) { | 
|  | fail(); | 
|  | } | 
|  |  | 
|  | try { | 
|  | emptyValue.or(() -> null); | 
|  | fail(); | 
|  | } catch (NullPointerException e) { | 
|  | } | 
|  | } | 
|  |  | 
|  | private static void testIfPresentOrElse() { | 
|  | Optional<String> value = Optional.of("value"); | 
|  | Optional<String> emptyValue = Optional.empty(); | 
|  | value.ifPresentOrElse(val -> {}, () -> assertTrue(false)); | 
|  | emptyValue.ifPresentOrElse(val -> assertTrue(false), () -> {}); | 
|  | } | 
|  |  | 
|  | private static void testStream() { | 
|  | Optional<String> value = Optional.of("value"); | 
|  | Optional<String> emptyValue = Optional.empty(); | 
|  | assertTrue(value.stream().count() == 1); | 
|  | assertTrue(emptyValue.stream().count() == 0); | 
|  | } | 
|  |  | 
|  | private static void assertTrue(boolean value) { | 
|  | if (!value) { | 
|  | throw new AssertionError("Expected <true> but was <false>"); | 
|  | } | 
|  | } | 
|  |  | 
|  | private static void fail() { | 
|  | throw new AssertionError("Failure."); | 
|  | } | 
|  | } |