ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/jtreg/util/Collections/EmptyCollectionSerialization.java
(Generate patch)

Comparing jsr166/src/test/jtreg/util/Collections/EmptyCollectionSerialization.java (file contents):
Revision 1.1 by jsr166, Tue Sep 1 01:24:16 2009 UTC vs.
Revision 1.5 by jsr166, Mon Jan 8 03:12:03 2018 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright 2002 Sun Microsystems, Inc.  All Rights Reserved.
2 > * Copyright (c) 2002, 2013, 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
# Line 16 | Line 16
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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 < * CA 95054 USA or visit www.sun.com if you need additional information or
21 < * have any questions.
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     4684279
26 > * @bug     4684279 7129185
27   * @summary Empty utility collections should be singletons
28   * @author  Josh Bloch
29 + * @run testng EmptyCollectionSerialization
30   */
31  
32 < import java.util.*;
33 < import java.io.*;
32 > 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 > import java.util.function.Supplier;
45 >
46 > import static org.testng.Assert.assertSame;
47 > import static org.testng.Assert.fail;
48  
49   public class EmptyCollectionSerialization {
50      private static Object patheticDeepCopy(Object o) throws Exception {
# Line 45 | Line 60 | public class EmptyCollectionSerializatio
60          return ois.readObject();
61      }
62  
63 <    private static boolean isSingleton(Object o) throws Exception {
64 <        return patheticDeepCopy(o) == o;
63 >    @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 >            assertSame(copy, singleton, description + ": " +
70 >                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      }
82  
83 <    public static void main(String[] args) throws Exception {
84 <        if (!isSingleton(Collections.EMPTY_SET))
85 <            throw new Exception("EMPTY_SET");
86 <        if (!isSingleton(Collections.EMPTY_LIST))
87 <            throw new Exception("EMPTY_LIST");
88 <        if (!isSingleton(Collections.EMPTY_MAP))
89 <            throw new Exception("EMPTY_MAP");
83 >    public static Collection<Object[]> makeSingletons() {
84 >        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      }
108   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines