test/jdk/java/util/Optional/Basic.java
author smarks
Wed, 28 Mar 2018 23:43:54 -0700
branchJDK-8195649-branch
changeset 56364 ed0bfd119607
parent 56360 44f4a81c3b96
child 56375 e0530ee8af48
permissions -rw-r--r--
add test for equality with non-optional
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     1
/*
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
     2
 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     4
 *
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     7
 * published by the Free Software Foundation.
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     8
 *
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    13
 * accompanied this code).
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    14
 *
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    18
 *
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    21
 * questions.
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    22
 */
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    23
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    24
/* @test
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    25
 * @summary Basic functional test of Optional
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    26
 * @author Mike Duigou
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    27
 * @run testng Basic
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    28
 */
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    29
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    30
import java.util.List;
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    31
import java.util.NoSuchElementException;
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    32
import java.util.Optional;
28963
8498cdb7c54b 8071670: java.util.Optional: please add a way to specify if-else behavior
psandoz
parents: 28754
diff changeset
    33
import java.util.concurrent.atomic.AtomicBoolean;
28754
8fe59917548d 8050820: Please add java.util.Optional.stream() to convert Optional<T> to Stream<T>
psandoz
parents: 18819
diff changeset
    34
import java.util.stream.Stream;
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    35
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    36
import static java.util.stream.Collectors.toList;
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    37
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    38
import static org.testng.Assert.*;
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    39
import org.testng.annotations.Test;
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    40
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    41
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    42
public class Basic {
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
    43
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    44
    /**
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    45
     * Asserts that the runnable throws an exception of the given type.
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    46
     * Fails if no exception is thrown, or if an exception of the wrong
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    47
     * type is thrown. This is used instead of @Test(expectedExceptions)
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    48
     * because that can be applied only at the granularity of a test.
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    49
     */
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    50
    void assertThrows(Runnable r, Class<? extends Exception> clazz) {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    51
        try {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    52
            r.run();
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    53
            fail();
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    54
        } catch (Exception ex) {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    55
            assertTrue(clazz.isInstance(ex));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    56
        }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    57
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    58
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    59
    /**
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    60
     * Checks a block of assertions over an empty Optional.
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    61
     */
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    62
    void checkEmpty(Optional<String> empty) {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    63
        assertTrue(empty.equals(Optional.empty()));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    64
        assertTrue(Optional.empty().equals(empty));
56364
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
    65
        assertFalse(empty.equals(Optional.of("unexpected")));
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
    66
        assertFalse(Optional.of("unexpected").equals(empty));
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
    67
        assertFalse(empty.equals("unexpected"));
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
    68
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    69
        assertFalse(empty.isPresent());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    70
        assertEquals(empty.hashCode(), 0);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    71
        assertEquals(empty.orElse("x"), "x");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    72
        assertEquals(empty.orElseGet(() -> "y"), "y");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    73
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    74
        assertThrows(() -> empty.get(), NoSuchElementException.class);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    75
        assertThrows(() -> empty.orElseThrow(), NoSuchElementException.class);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    76
        assertThrows(() -> empty.orElseThrow(ObscureException::new), ObscureException.class);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    77
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    78
        var b = new AtomicBoolean();
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    79
        empty.ifPresent(s -> b.set(true));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    80
        assertFalse(b.get());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    81
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    82
        var b1 = new AtomicBoolean(false);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    83
        var b2 = new AtomicBoolean(false);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    84
        empty.ifPresentOrElse(s -> b1.set(true), () -> b2.set(true));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    85
        assertFalse(b1.get());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    86
        assertTrue(b2.get());
56360
44f4a81c3b96 restore Optional.or tests; add asserts for Optional.toString
smarks
parents: 56359
diff changeset
    87
44f4a81c3b96 restore Optional.or tests; add asserts for Optional.toString
smarks
parents: 56359
diff changeset
    88
        assertEquals(empty.toString(), "Optional.empty");
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    89
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    90
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    91
    /**
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    92
     * Checks a block of assertions over an Optional that is expected to
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    93
     * have a particular value present.
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    94
     */
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    95
    void checkPresent(Optional<String> opt, String expected) {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    96
        assertFalse(opt.equals(Optional.empty()));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    97
        assertFalse(Optional.empty().equals(opt));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    98
        assertTrue(opt.equals(Optional.of(expected)));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
    99
        assertTrue(Optional.of(expected).equals(opt));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   100
        assertFalse(opt.equals(Optional.of("unexpected")));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   101
        assertFalse(Optional.of("unexpected").equals(opt));
56364
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
   102
        assertFalse(opt.equals("unexpected"));
ed0bfd119607 add test for equality with non-optional
smarks
parents: 56360
diff changeset
   103
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   104
        assertTrue(opt.isPresent());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   105
        assertEquals(opt.hashCode(), expected.hashCode());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   106
        assertEquals(opt.orElse("unexpected"), expected);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   107
        assertEquals(opt.orElseGet(() -> "unexpected"), expected);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   108
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   109
        assertEquals(opt.get(), expected);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   110
        assertEquals(opt.orElseThrow(), expected);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   111
        assertEquals(opt.orElseThrow(ObscureException::new), expected);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   112
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   113
        var b = new AtomicBoolean(false);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   114
        opt.ifPresent(s -> b.set(true));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   115
        assertTrue(b.get());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   116
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   117
        var b1 = new AtomicBoolean(false);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   118
        var b2 = new AtomicBoolean(false);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   119
        opt.ifPresentOrElse(s -> b1.set(true), () -> b2.set(true));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   120
        assertTrue(b1.get());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   121
        assertFalse(b2.get());
56360
44f4a81c3b96 restore Optional.or tests; add asserts for Optional.toString
smarks
parents: 56359
diff changeset
   122
44f4a81c3b96 restore Optional.or tests; add asserts for Optional.toString
smarks
parents: 56359
diff changeset
   123
        assertEquals(opt.toString(), "Optional[" + expected + "]");
56357
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   124
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   125
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   126
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   127
    public void testEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   128
        checkEmpty(Optional.empty());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   129
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   130
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   131
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   132
    public void testOfNull() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   133
        assertThrows(() -> Optional.of(null), NullPointerException.class);
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   134
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   135
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   136
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   137
    public void testOfPresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   138
        checkPresent(Optional.of("xyzzy"), "xyzzy");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   139
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   140
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   141
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   142
    public void testOfNullableNull() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   143
        checkEmpty(Optional.ofNullable(null));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   144
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   145
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   146
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   147
    public void testOfNullablePresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   148
        checkPresent(Optional.of("xyzzy"), "xyzzy");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   149
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   150
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   151
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   152
    public void testFilterEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   153
        checkEmpty(Optional.<String>empty().filter(s -> { fail(); return true; }));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   154
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   155
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   156
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   157
    public void testFilterFalse() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   158
        checkEmpty(Optional.of("xyzzy").filter(s -> s.equals("plugh")));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   159
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   160
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   161
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   162
    public void testFilterTrue() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   163
        checkPresent(Optional.of("xyzzy").filter(s -> s.equals("xyzzy")), "xyzzy");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   164
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   165
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   166
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   167
    public void testMapEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   168
        checkEmpty(Optional.empty().map(s -> { fail(); return ""; }));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   169
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   170
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   171
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   172
    public void testMapPresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   173
        checkPresent(Optional.of("xyzzy").map(s -> s.replace("xyzzy", "plugh")), "plugh");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   174
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   175
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   176
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   177
    public void testFlatMapEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   178
        checkEmpty(Optional.empty().flatMap(s -> { fail(); return Optional.of(""); }));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   179
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   180
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   181
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   182
    public void testFlatMapPresentReturnEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   183
        checkEmpty(Optional.of("xyzzy")
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   184
                           .flatMap(s -> { assertEquals(s, "xyzzy"); return Optional.empty(); }));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   185
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   186
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   187
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   188
    public void testFlatMapPresentReturnPresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   189
        checkPresent(Optional.of("xyzzy")
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   190
                             .flatMap(s -> { assertEquals(s, "xyzzy"); return Optional.of("plugh"); }),
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   191
                     "plugh");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   192
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   193
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   194
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   195
    public void testOrEmptyEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   196
        checkEmpty(Optional.<String>empty().or(() -> Optional.empty()));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   197
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   198
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   199
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   200
    public void testOrEmptyPresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   201
        checkPresent(Optional.<String>empty().or(() -> Optional.of("plugh")), "plugh");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   202
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   203
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   204
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   205
    public void testOrPresentDontCare() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   206
        checkPresent(Optional.of("xyzzy").or(() -> { fail(); return Optional.of("plugh"); }), "xyzzy");
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   207
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   208
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   209
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   210
    public void testStreamEmpty() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   211
        assertEquals(Optional.empty().stream().collect(toList()), List.of());
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   212
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   213
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   214
    @Test
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   215
    public void testStreamPresent() {
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   216
        assertEquals(Optional.of("xyzzy").stream().collect(toList()), List.of("xyzzy"));
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   217
    }
2954c0c19403 8195649: reorganize tests for java.util.Optional
smarks
parents: 48328
diff changeset
   218
56358
bcc8ae80f427 remove old Optional tests
smarks
parents: 56357
diff changeset
   219
    private static class ObscureException extends RuntimeException { }
16489
53619efef3fb 8001642: Add Optional<T>, OptionalDouble, OptionalInt, OptionalLong
mduigou
parents:
diff changeset
   220
}