ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/Collections/EmptyCollectionSerialization.java
Revision: 1.3
Committed: Wed Sep 9 22:05:28 2015 UTC (8 years, 8 months ago) by jsr166
Branch: MAIN
Changes since 1.2: +50 -11 lines
Log Message:
merge upstream changes

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     import java.util.*;
33 jsr166 1.3 import java.util.function.Supplier;
34 jsr166 1.1 import java.io.*;
35 jsr166 1.3 import org.testng.annotations.Test;
36     import org.testng.annotations.DataProvider;
37    
38     import static org.testng.Assert.fail;
39     import static org.testng.Assert.assertSame;
40 jsr166 1.1
41     public class EmptyCollectionSerialization {
42     private static Object patheticDeepCopy(Object o) throws Exception {
43     // Serialize
44     ByteArrayOutputStream bos = new ByteArrayOutputStream();
45     ObjectOutputStream oos = new ObjectOutputStream(bos);
46     oos.writeObject(o);
47     byte[] serializedForm = bos.toByteArray();
48    
49     // Deserialize
50     InputStream is = new ByteArrayInputStream(serializedForm);
51     ObjectInputStream ois = new ObjectInputStream(is);
52     return ois.readObject();
53     }
54    
55 jsr166 1.3 @Test(dataProvider="SerializableSingletons")
56     public static void serializableSingletons(String description, Supplier<Object> o) {
57     try {
58     Object singleton = o.get();
59     assertSame(o.get(), singleton, description + ": broken Supplier not returning singleton");
60     Object copy = patheticDeepCopy(singleton);
61     assertSame( copy, singleton, description + ": " +
62     copy.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(copy)) +
63     " is not the singleton " +
64     singleton.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(singleton)));
65     } catch (Exception all) {
66     fail(description + ": Unexpected Exception", all);
67     }
68     }
69    
70     @DataProvider(name = "SerializableSingletons", parallel = true)
71     public static Iterator<Object[]> navigableMapProvider() {
72     return makeSingletons().iterator();
73 jsr166 1.1 }
74    
75 jsr166 1.3 public static Collection<Object[]> makeSingletons() {
76     return Arrays.asList(
77     new Object[]{"Collections.EMPTY_LIST",
78     (Supplier) () -> {return Collections.EMPTY_LIST;}},
79     new Object[]{"Collections.EMPTY_MAP",
80     (Supplier) () -> {return Collections.EMPTY_MAP;}},
81     new Object[]{"Collections.EMPTY_SET",
82     (Supplier) () -> {return Collections.EMPTY_SET;}},
83     new Object[]{"Collections.singletonMap()",
84     (Supplier) () -> {return Collections.emptyList();}},
85     new Object[]{"Collections.emptyMap()",
86     (Supplier) () -> {return Collections.emptyMap();}},
87     new Object[]{"Collections.emptySet()",
88     (Supplier) () -> {return Collections.emptySet();}},
89     new Object[]{"Collections.emptySortedSet()",
90     (Supplier) () -> {return Collections.emptySortedSet();}},
91     new Object[]{"Collections.emptySortedMap()",
92     (Supplier) () -> {return Collections.emptySortedMap();}},
93     new Object[]{"Collections.emptyNavigableSet()",
94     (Supplier) () -> {return Collections.emptyNavigableSet();}},
95     new Object[]{"Collections.emptyNavigableMap()",
96     (Supplier) () -> {return Collections.emptyNavigableMap();}}
97     );
98 jsr166 1.1 }
99     }