Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/util/List/ListFactories.java
41149 views
1
/*
2
* Copyright (c) 2015, 2018, 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
import java.io.ByteArrayInputStream;
25
import java.io.ByteArrayOutputStream;
26
import java.io.IOException;
27
import java.io.ObjectInputStream;
28
import java.io.ObjectOutputStream;
29
import java.io.Serializable;
30
import java.util.ArrayList;
31
import java.util.Arrays;
32
import java.util.Collections;
33
import java.util.Iterator;
34
import java.util.List;
35
import java.util.ListIterator;
36
import java.util.stream.Stream;
37
38
import org.testng.annotations.DataProvider;
39
import org.testng.annotations.Test;
40
41
import static java.util.Arrays.asList;
42
43
import static org.testng.Assert.assertEquals;
44
import static org.testng.Assert.assertFalse;
45
import static org.testng.Assert.assertNotEquals;
46
import static org.testng.Assert.assertNotSame;
47
import static org.testng.Assert.assertSame;
48
import static org.testng.Assert.assertTrue;
49
import static org.testng.Assert.fail;
50
51
/*
52
* @test
53
* @bug 8048330 8203184
54
* @summary Test convenience static factory methods on List.
55
* @run testng ListFactories
56
*/
57
58
public class ListFactories {
59
60
static final int NUM_STRINGS = 20; // should be larger than the largest fixed-arg overload
61
static final String[] stringArray;
62
static {
63
String[] sa = new String[NUM_STRINGS];
64
for (int i = 0; i < NUM_STRINGS; i++) {
65
sa[i] = String.valueOf((char)('a' + i));
66
}
67
stringArray = sa;
68
}
69
70
// returns array of [actual, expected]
71
static Object[] a(List<String> act, List<String> exp) {
72
return new Object[] { act, exp };
73
}
74
75
@DataProvider(name="empty")
76
public Iterator<Object[]> empty() {
77
return Collections.singletonList(
78
a(List.of(), asList())
79
).iterator();
80
}
81
82
@DataProvider(name="nonempty")
83
public Iterator<Object[]> nonempty() {
84
return asList(
85
a(List.of("a"),
86
asList("a")),
87
a(List.of("a", "b"),
88
asList("a", "b")),
89
a(List.of("a", "b", "c"),
90
asList("a", "b", "c")),
91
a(List.of("a", "b", "c", "d"),
92
asList("a", "b", "c", "d")),
93
a(List.of("a", "b", "c", "d", "e"),
94
asList("a", "b", "c", "d", "e")),
95
a(List.of("a", "b", "c", "d", "e", "f"),
96
asList("a", "b", "c", "d", "e", "f")),
97
a(List.of("a", "b", "c", "d", "e", "f", "g"),
98
asList("a", "b", "c", "d", "e", "f", "g")),
99
a(List.of("a", "b", "c", "d", "e", "f", "g", "h"),
100
asList("a", "b", "c", "d", "e", "f", "g", "h")),
101
a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i"),
102
asList("a", "b", "c", "d", "e", "f", "g", "h", "i")),
103
a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"),
104
asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")),
105
a(List.of(stringArray),
106
asList(stringArray))
107
).iterator();
108
}
109
110
@DataProvider(name="sublists")
111
public Iterator<Object[]> sublists() {
112
return asList(
113
a(List.<String>of().subList(0,0),
114
asList()),
115
a(List.of("a").subList(0,0),
116
asList("a").subList(0,0)),
117
a(List.of("a", "b").subList(0,1),
118
asList("a", "b").subList(0,1)),
119
a(List.of("a", "b", "c").subList(1,3),
120
asList("a", "b", "c").subList(1,3)),
121
a(List.of("a", "b", "c", "d").subList(0,4),
122
asList("a", "b", "c", "d").subList(0,4)),
123
a(List.of("a", "b", "c", "d", "e").subList(0,3),
124
asList("a", "b", "c", "d", "e").subList(0,3)),
125
a(List.of("a", "b", "c", "d", "e", "f").subList(3, 5),
126
asList("a", "b", "c", "d", "e", "f").subList(3, 5)),
127
a(List.of("a", "b", "c", "d", "e", "f", "g").subList(0, 7),
128
asList("a", "b", "c", "d", "e", "f", "g").subList(0, 7)),
129
a(List.of("a", "b", "c", "d", "e", "f", "g", "h").subList(0, 0),
130
asList("a", "b", "c", "d", "e", "f", "g", "h").subList(0, 0)),
131
a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i").subList(4, 5),
132
asList("a", "b", "c", "d", "e", "f", "g", "h", "i").subList(4, 5)),
133
a(List.of("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").subList(1,10),
134
asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j").subList(1,10)),
135
a(List.of(stringArray).subList(5, NUM_STRINGS),
136
asList(Arrays.copyOfRange(stringArray, 5, NUM_STRINGS)))
137
).iterator();
138
}
139
140
@DataProvider(name="all")
141
public Iterator<Object[]> all() {
142
List<Object[]> all = new ArrayList<>();
143
empty().forEachRemaining(all::add);
144
nonempty().forEachRemaining(all::add);
145
sublists().forEachRemaining(all::add);
146
return all.iterator();
147
}
148
149
@DataProvider(name="nonsublists")
150
public Iterator<Object[]> nonsublists() {
151
List<Object[]> all = new ArrayList<>();
152
empty().forEachRemaining(all::add);
153
nonempty().forEachRemaining(all::add);
154
return all.iterator();
155
}
156
157
@Test(dataProvider="all", expectedExceptions=UnsupportedOperationException.class)
158
public void cannotAddLast(List<String> act, List<String> exp) {
159
act.add("x");
160
}
161
162
@Test(dataProvider="all", expectedExceptions=UnsupportedOperationException.class)
163
public void cannotAddFirst(List<String> act, List<String> exp) {
164
act.add(0, "x");
165
}
166
167
@Test(dataProvider="nonempty", expectedExceptions=UnsupportedOperationException.class)
168
public void cannotRemove(List<String> act, List<String> exp) {
169
act.remove(0);
170
}
171
172
@Test(dataProvider="nonempty", expectedExceptions=UnsupportedOperationException.class)
173
public void cannotSet(List<String> act, List<String> exp) {
174
act.set(0, "x");
175
}
176
177
@Test(dataProvider="all")
178
public void contentsMatch(List<String> act, List<String> exp) {
179
assertEquals(act, exp);
180
}
181
182
@Test(expectedExceptions=NullPointerException.class)
183
public void nullDisallowed1() {
184
List.of((Object)null); // force one-arg overload
185
}
186
187
@Test(expectedExceptions=NullPointerException.class)
188
public void nullDisallowed2a() {
189
List.of("a", null);
190
}
191
192
@Test(expectedExceptions=NullPointerException.class)
193
public void nullDisallowed2b() {
194
List.of(null, "b");
195
}
196
197
@Test(expectedExceptions=NullPointerException.class)
198
public void nullDisallowed3() {
199
List.of("a", "b", null);
200
}
201
202
@Test(expectedExceptions=NullPointerException.class)
203
public void nullDisallowed4() {
204
List.of("a", "b", "c", null);
205
}
206
207
@Test(expectedExceptions=NullPointerException.class)
208
public void nullDisallowed5() {
209
List.of("a", "b", "c", "d", null);
210
}
211
212
@Test(expectedExceptions=NullPointerException.class)
213
public void nullDisallowed6() {
214
List.of("a", "b", "c", "d", "e", null);
215
}
216
217
@Test(expectedExceptions=NullPointerException.class)
218
public void nullDisallowed7() {
219
List.of("a", "b", "c", "d", "e", "f", null);
220
}
221
222
@Test(expectedExceptions=NullPointerException.class)
223
public void nullDisallowed8() {
224
List.of("a", "b", "c", "d", "e", "f", "g", null);
225
}
226
227
@Test(expectedExceptions=NullPointerException.class)
228
public void nullDisallowed9() {
229
List.of("a", "b", "c", "d", "e", "f", "g", "h", null);
230
}
231
232
@Test(expectedExceptions=NullPointerException.class)
233
public void nullDisallowed10() {
234
List.of("a", "b", "c", "d", "e", "f", "g", "h", "i", null);
235
}
236
237
@Test(expectedExceptions=NullPointerException.class)
238
public void nullDisallowedN() {
239
String[] array = stringArray.clone();
240
array[0] = null;
241
List.of(array);
242
}
243
244
@Test(expectedExceptions=NullPointerException.class)
245
public void nullArrayDisallowed() {
246
List.of((Object[])null);
247
}
248
249
@Test
250
public void ensureArrayCannotModifyList() {
251
String[] array = stringArray.clone();
252
List<String> list = List.of(array);
253
array[0] = "xyzzy";
254
assertEquals(list, Arrays.asList(stringArray));
255
}
256
257
@Test(dataProvider="all", expectedExceptions=NullPointerException.class)
258
public void containsNullShouldThrowNPE(List<String> act, List<String> exp) {
259
act.contains(null);
260
}
261
262
@Test(dataProvider="all", expectedExceptions=NullPointerException.class)
263
public void indexOfNullShouldThrowNPE(List<String> act, List<String> exp) {
264
act.indexOf(null);
265
}
266
267
@Test(dataProvider="all", expectedExceptions=NullPointerException.class)
268
public void lastIndexOfNullShouldThrowNPE(List<String> act, List<String> exp) {
269
act.lastIndexOf(null);
270
}
271
272
// List.of().subList views should not be Serializable
273
@Test(dataProvider="sublists")
274
public void isNotSerializable(List<String> act, List<String> exp) {
275
assertFalse(act instanceof Serializable);
276
}
277
278
// ... but List.of() should be
279
@Test(dataProvider="nonsublists")
280
public void serialEquality(List<String> act, List<String> exp) {
281
// assume that act.equals(exp) tested elsewhere
282
List<String> copy = serialClone(act);
283
assertEquals(act, copy);
284
assertEquals(copy, exp);
285
}
286
287
@SuppressWarnings("unchecked")
288
static <T> T serialClone(T obj) {
289
try {
290
ByteArrayOutputStream baos = new ByteArrayOutputStream();
291
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
292
oos.writeObject(obj);
293
}
294
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
295
ObjectInputStream ois = new ObjectInputStream(bais);
296
return (T) ois.readObject();
297
} catch (IOException | ClassNotFoundException e) {
298
throw new AssertionError(e);
299
}
300
}
301
302
List<Integer> genList() {
303
return new ArrayList<>(Arrays.asList(1, 2, 3));
304
}
305
306
@Test
307
public void copyOfResultsEqual() {
308
List<Integer> orig = genList();
309
List<Integer> copy = List.copyOf(orig);
310
311
assertEquals(orig, copy);
312
assertEquals(copy, orig);
313
}
314
315
@Test
316
public void copyOfModifiedUnequal() {
317
List<Integer> orig = genList();
318
List<Integer> copy = List.copyOf(orig);
319
orig.add(4);
320
321
assertNotEquals(orig, copy);
322
assertNotEquals(copy, orig);
323
}
324
325
@Test
326
public void copyOfIdentity() {
327
List<Integer> orig = genList();
328
List<Integer> copy1 = List.copyOf(orig);
329
List<Integer> copy2 = List.copyOf(copy1);
330
331
assertNotSame(orig, copy1);
332
assertSame(copy1, copy2);
333
}
334
335
@Test
336
public void copyOfSubList() {
337
List<Integer> orig = List.of(0, 1, 2, 3);
338
List<Integer> sub = orig.subList(0, 3);
339
List<Integer> copy = List.copyOf(sub);
340
341
assertNotSame(sub, copy);
342
}
343
344
@Test
345
public void copyOfSubSubList() {
346
List<Integer> orig = List.of(0, 1, 2, 3);
347
List<Integer> sub = orig.subList(0, 3).subList(0, 2);
348
List<Integer> copy = List.copyOf(sub);
349
350
assertNotSame(sub, copy);
351
}
352
353
@Test(expectedExceptions=NullPointerException.class)
354
public void copyOfRejectsNullCollection() {
355
List<Integer> list = List.copyOf(null);
356
}
357
358
@Test(expectedExceptions=NullPointerException.class)
359
public void copyOfRejectsNullElements() {
360
List<Integer> list = List.copyOf(Arrays.asList(1, null, 3));
361
}
362
363
@Test(expectedExceptions=NullPointerException.class)
364
public void copyOfRejectsNullElements2() {
365
List<String> list = List.copyOf(Stream.of("a", null, "c").toList());
366
}
367
368
@Test
369
public void copyOfCopiesNullAllowingList() {
370
List<String> orig = Stream.of("a", "b", "c").toList();
371
List<String> copy = List.copyOf(orig);
372
373
assertNotSame(orig, copy);
374
}
375
376
@Test
377
public void iteratorShouldNotBeListIterator() {
378
List<Integer> list = List.of(1, 2, 3, 4, 5);
379
Iterator<Integer> it = list.iterator();
380
it.next();
381
try {
382
((ListIterator<Integer>) it).previous();
383
fail("ListIterator operation succeeded on Iterator");
384
} catch (ClassCastException|UnsupportedOperationException ignore) { }
385
}
386
}
387
388