1 /* 2 * Copyright (c) 2014, 2026, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8037857 27 * @summary tests for stream and spliterator factory methods 28 * @run junit StreamAndSpliterator 29 */ 30 31 import java.time.LocalDate; 32 import java.util.Arrays; 33 import java.util.Optional; 34 import java.util.Spliterators; 35 36 import static org.junit.jupiter.api.Assertions.assertThrows; 37 import org.junit.jupiter.api.Test; 38 import org.junit.jupiter.api.function.Executable; 39 40 public class StreamAndSpliterator { 41 @Test 42 public void testStreamNPEs() { 43 assertThrowsNPE(() -> Arrays.stream((int[]) null, 0, 0)); 44 assertThrowsNPE(() -> Arrays.stream((long[]) null, 0, 0)); 45 assertThrowsNPE(() -> Arrays.stream((double[]) null, 0, 0)); 46 assertThrowsNPE(() -> Arrays.stream((String[]) null, 0, 0)); 47 48 assertThrowsNPE(() -> Arrays.stream((Integer[]) null, 0, 0)); 49 assertThrowsNPE(() -> Arrays.stream((Long[]) null, 0, 0)); 50 assertThrowsNPE(() -> Arrays.stream((Optional[]) null, 0, 0)); 51 assertThrowsNPE(() -> Arrays.stream((LocalDate[]) null, 0, 0)); 52 } 53 54 @Test 55 public void testStreamAIOBEs() { 56 // origin > fence 57 assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, 1, 0)); 58 assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, 1, 0)); 59 assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, 1, 0)); 60 assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, 1, 0)); 61 62 assertThrowsAIOOB(() -> Arrays.stream(new Integer[]{}, 1, 0)); 63 assertThrowsAIOOB(() -> Arrays.stream(new Long[]{}, 1, 0)); 64 assertThrowsAIOOB(() -> Arrays.stream(new Optional[]{}, 1, 0)); 65 assertThrowsAIOOB(() -> Arrays.stream(new LocalDate[]{}, 1, 0)); 66 67 // bad origin 68 assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, -1, 0)); 69 assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, -1, 0)); 70 assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, -1, 0)); 71 assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, -1, 0)); 72 73 assertThrowsAIOOB(() -> Arrays.stream(new Integer[]{}, -1, 0)); 74 assertThrowsAIOOB(() -> Arrays.stream(new Long[]{}, -1, 0)); 75 assertThrowsAIOOB(() -> Arrays.stream(new Optional[]{}, -1, 0)); 76 assertThrowsAIOOB(() -> Arrays.stream(new LocalDate[]{}, -1, 0)); 77 78 // bad fence 79 assertThrowsAIOOB(() -> Arrays.stream(new int[]{}, 0, 1)); 80 assertThrowsAIOOB(() -> Arrays.stream(new long[]{}, 0, 1)); 81 assertThrowsAIOOB(() -> Arrays.stream(new double[]{}, 0, 1)); 82 assertThrowsAIOOB(() -> Arrays.stream(new String[]{}, 0, 1)); 83 84 assertThrowsAIOOB(() -> Arrays.stream(new Integer[]{}, 0, 1)); 85 assertThrowsAIOOB(() -> Arrays.stream(new Long[]{}, 0, 1)); 86 assertThrowsAIOOB(() -> Arrays.stream(new Optional[]{}, 0, 1)); 87 assertThrowsAIOOB(() -> Arrays.stream(new LocalDate[]{}, 0, 1)); 88 } 89 90 91 @Test 92 public void testSpliteratorNPEs() { 93 assertThrowsNPE(() -> Arrays.spliterator((int[]) null, 0, 0)); 94 assertThrowsNPE(() -> Arrays.spliterator((long[]) null, 0, 0)); 95 assertThrowsNPE(() -> Arrays.spliterator((double[]) null, 0, 0)); 96 assertThrowsNPE(() -> Arrays.spliterator((String[]) null, 0, 0)); 97 98 assertThrowsNPE(() -> Arrays.spliterator((Integer[]) null, 0, 0)); 99 assertThrowsNPE(() -> Arrays.spliterator((Long[]) null, 0, 0)); 100 assertThrowsNPE(() -> Arrays.spliterator((Optional[]) null, 0, 0)); 101 assertThrowsNPE(() -> Arrays.spliterator((LocalDate[]) null, 0, 0)); 102 } 103 104 @Test 105 public void testSpliteratorAIOBEs() { 106 // origin > fence 107 assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, 1, 0)); 108 assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, 1, 0)); 109 assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, 1, 0)); 110 assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, 1, 0)); 111 112 // bad origin 113 assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, -1, 0)); 114 assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, -1, 0)); 115 assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, -1, 0)); 116 assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, -1, 0)); 117 118 // bad fence 119 assertThrowsAIOOB(() -> Arrays.spliterator(new int[]{}, 0, 1)); 120 assertThrowsAIOOB(() -> Arrays.spliterator(new long[]{}, 0, 1)); 121 assertThrowsAIOOB(() -> Arrays.spliterator(new double[]{}, 0, 1)); 122 assertThrowsAIOOB(() -> Arrays.spliterator(new String[]{}, 0, 1)); 123 } 124 125 126 @Test 127 public void testSpliteratorNPEsFromSpliterators() { 128 assertThrowsNPE(() -> Spliterators.spliterator((int[]) null, 0, 0, 0)); 129 assertThrowsNPE(() -> Spliterators.spliterator((long[]) null, 0, 0, 0)); 130 assertThrowsNPE(() -> Spliterators.spliterator((double[]) null, 0, 0, 0)); 131 assertThrowsNPE(() -> Spliterators.spliterator((String[]) null, 0, 0, 0)); 132 133 assertThrowsNPE(() -> Spliterators.spliterator((Integer[]) null, 0, 0, 0)); 134 assertThrowsNPE(() -> Spliterators.spliterator((Long[]) null, 0, 0, 0)); 135 assertThrowsNPE(() -> Spliterators.spliterator((Optional[]) null, 0, 0, 0)); 136 assertThrowsNPE(() -> Spliterators.spliterator((LocalDate[]) null, 0, 0, 0)); 137 } 138 139 @Test 140 public void testSpliteratorAIOBEsFromSpliterators() { 141 // origin > fence 142 assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, 1, 0, 0)); 143 assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, 1, 0, 0)); 144 assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, 1, 0, 0)); 145 assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, 1, 0, 0)); 146 147 // bad origin 148 assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, -1, 0, 0)); 149 assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, -1, 0, 0)); 150 assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, -1, 0, 0)); 151 assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, -1, 0, 0)); 152 153 // bad fence 154 assertThrowsAIOOB(() -> Spliterators.spliterator(new int[]{}, 0, 1, 0)); 155 assertThrowsAIOOB(() -> Spliterators.spliterator(new long[]{}, 0, 1, 0)); 156 assertThrowsAIOOB(() -> Spliterators.spliterator(new double[]{}, 0, 1, 0)); 157 assertThrowsAIOOB(() -> Spliterators.spliterator(new String[]{}, 0, 1, 0)); 158 } 159 160 void assertThrowsNPE(Executable r) { 161 assertThrows(NullPointerException.class, r); 162 } 163 164 void assertThrowsAIOOB(Executable r) { 165 assertThrows(ArrayIndexOutOfBoundsException.class, r); 166 } 167 } --- EOF ---