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.2 by jsr166, Sun Sep 5 21:32:19 2010 UTC vs.
Revision 1.4 by jsr166, Sun Oct 18 17:34:26 2015 UTC

# Line 1 | Line 1
1   /*
2 < * Copyright (c) 2002, Oracle and/or its affiliates. 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 23 | Line 23
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.util.function.Supplier;
34   import java.io.*;
35 + 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  
41   public class EmptyCollectionSerialization {
42      private static Object patheticDeepCopy(Object o) throws Exception {
# Line 45 | Line 52 | public class EmptyCollectionSerializatio
52          return ois.readObject();
53      }
54  
55 <    private static boolean isSingleton(Object o) throws Exception {
56 <        return patheticDeepCopy(o) == o;
55 >    @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      }
74  
75 <    public static void main(String[] args) throws Exception {
76 <        if (!isSingleton(Collections.EMPTY_SET))
77 <            throw new Exception("EMPTY_SET");
78 <        if (!isSingleton(Collections.EMPTY_LIST))
79 <            throw new Exception("EMPTY_LIST");
80 <        if (!isSingleton(Collections.EMPTY_MAP))
81 <            throw new Exception("EMPTY_MAP");
75 >    public static Collection<Object[]> makeSingletons() {
76 >        Object[][] params = {
77 >            {"Collections.EMPTY_LIST",
78 >             (Supplier) () -> Collections.EMPTY_LIST},
79 >            {"Collections.EMPTY_MAP",
80 >             (Supplier) () -> Collections.EMPTY_MAP},
81 >            {"Collections.EMPTY_SET",
82 >             (Supplier) () -> Collections.EMPTY_SET},
83 >            {"Collections.emptyList()",
84 >             (Supplier) () -> Collections.emptyList()},
85 >            {"Collections.emptyMap()",
86 >             (Supplier) () -> Collections.emptyMap()},
87 >            {"Collections.emptySet()",
88 >             (Supplier) () -> Collections.emptySet()},
89 >            {"Collections.emptySortedSet()",
90 >             (Supplier) () -> Collections.emptySortedSet()},
91 >            {"Collections.emptySortedMap()",
92 >             (Supplier) () -> Collections.emptySortedMap()},
93 >            {"Collections.emptyNavigableSet()",
94 >             (Supplier) () -> Collections.emptyNavigableSet()},
95 >            {"Collections.emptyNavigableMap()",
96 >             (Supplier) () -> Collections.emptyNavigableMap()},
97 >        };
98 >        return Arrays.asList(params);
99      }
100   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines