ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/Collections/EmptyCollectionSerialization.java
Revision: 1.5
Committed: Mon Jan 8 03:12:03 2018 UTC (6 years, 4 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +13 -5 lines
Log Message:
organize imports

File Contents

# User Rev Content
1 jsr166 1.1 /*
2 jsr166 1.3 * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
3 jsr166 1.1 * 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 jsr166 1.2 * 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 jsr166 1.1 */
23    
24     /*
25     * @test
26 jsr166 1.3 * @bug 4684279 7129185
27 jsr166 1.1 * @summary Empty utility collections should be singletons
28     * @author Josh Bloch
29 jsr166 1.3 * @run testng EmptyCollectionSerialization
30 jsr166 1.1 */
31    
32 jsr166 1.5 import org.testng.annotations.DataProvider;
33     import org.testng.annotations.Test;
34    
35     import java.io.ByteArrayInputStream;
36     import java.io.ByteArrayOutputStream;
37     import java.io.InputStream;
38     import java.io.ObjectInputStream;
39     import java.io.ObjectOutputStream;
40     import java.util.Arrays;
41     import java.util.Collection;
42     import java.util.Collections;
43     import java.util.Iterator;
44 jsr166 1.3 import java.util.function.Supplier;
45    
46 jsr166 1.5 import static org.testng.Assert.assertSame;
47 jsr166 1.3 import static org.testng.Assert.fail;
48 jsr166 1.1
49     public class EmptyCollectionSerialization {
50     private static Object patheticDeepCopy(Object o) throws Exception {
51     // Serialize
52     ByteArrayOutputStream bos = new ByteArrayOutputStream();
53     ObjectOutputStream oos = new ObjectOutputStream(bos);
54     oos.writeObject(o);
55     byte[] serializedForm = bos.toByteArray();
56    
57     // Deserialize
58     InputStream is = new ByteArrayInputStream(serializedForm);
59     ObjectInputStream ois = new ObjectInputStream(is);
60     return ois.readObject();
61     }
62    
63 jsr166 1.3 @Test(dataProvider="SerializableSingletons")
64     public static void serializableSingletons(String description, Supplier<Object> o) {
65     try {
66     Object singleton = o.get();
67     assertSame(o.get(), singleton, description + ": broken Supplier not returning singleton");
68     Object copy = patheticDeepCopy(singleton);
69 jsr166 1.4 assertSame(copy, singleton, description + ": " +
70 jsr166 1.3 copy.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(copy)) +
71     " is not the singleton " +
72     singleton.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(singleton)));
73     } catch (Exception all) {
74     fail(description + ": Unexpected Exception", all);
75     }
76     }
77    
78     @DataProvider(name = "SerializableSingletons", parallel = true)
79     public static Iterator<Object[]> navigableMapProvider() {
80     return makeSingletons().iterator();
81 jsr166 1.1 }
82    
83 jsr166 1.3 public static Collection<Object[]> makeSingletons() {
84 jsr166 1.4 Object[][] params = {
85     {"Collections.EMPTY_LIST",
86     (Supplier) () -> Collections.EMPTY_LIST},
87     {"Collections.EMPTY_MAP",
88     (Supplier) () -> Collections.EMPTY_MAP},
89     {"Collections.EMPTY_SET",
90     (Supplier) () -> Collections.EMPTY_SET},
91     {"Collections.emptyList()",
92     (Supplier) () -> Collections.emptyList()},
93     {"Collections.emptyMap()",
94     (Supplier) () -> Collections.emptyMap()},
95     {"Collections.emptySet()",
96     (Supplier) () -> Collections.emptySet()},
97     {"Collections.emptySortedSet()",
98     (Supplier) () -> Collections.emptySortedSet()},
99     {"Collections.emptySortedMap()",
100     (Supplier) () -> Collections.emptySortedMap()},
101     {"Collections.emptyNavigableSet()",
102     (Supplier) () -> Collections.emptyNavigableSet()},
103     {"Collections.emptyNavigableMap()",
104     (Supplier) () -> Collections.emptyNavigableMap()},
105     };
106     return Arrays.asList(params);
107 jsr166 1.1 }
108     }