test/java/util/Collections/EmptyCollectionSerialization.java
Print this page
rev 7291 : 7129185: Add Collections.{checked|empty|unmodifiable}Navigable{Map|Set}
Reviewed-by: dmocek, martin
*** 21,37 ****
* questions.
*/
/*
* @test
! * @bug 4684279
* @summary Empty utility collections should be singletons
* @author Josh Bloch
*/
import java.util.*;
import java.io.*;
public class EmptyCollectionSerialization {
private static Object patheticDeepCopy(Object o) throws Exception {
// Serialize
ByteArrayOutputStream bos = new ByteArrayOutputStream();
--- 21,44 ----
* questions.
*/
/*
* @test
! * @bug 4684279 7129185
* @summary Empty utility collections should be singletons
* @author Josh Bloch
+ * @run testng EmptyCollectionSerialization
*/
import java.util.*;
+ import java.util.function.Supplier;
import java.io.*;
+ import org.testng.annotations.Test;
+ import org.testng.annotations.DataProvider;
+
+ import static org.testng.Assert.fail;
+ import static org.testng.Assert.assertSame;
public class EmptyCollectionSerialization {
private static Object patheticDeepCopy(Object o) throws Exception {
// Serialize
ByteArrayOutputStream bos = new ByteArrayOutputStream();
*** 43,60 ****
InputStream is = new ByteArrayInputStream(serializedForm);
ObjectInputStream ois = new ObjectInputStream(is);
return ois.readObject();
}
! private static boolean isSingleton(Object o) throws Exception {
! return patheticDeepCopy(o) == o;
}
! public static void main(String[] args) throws Exception {
! if (!isSingleton(Collections.EMPTY_SET))
! throw new Exception("EMPTY_SET");
! if (!isSingleton(Collections.EMPTY_LIST))
! throw new Exception("EMPTY_LIST");
! if (!isSingleton(Collections.EMPTY_MAP))
! throw new Exception("EMPTY_MAP");
}
}
--- 50,93 ----
InputStream is = new ByteArrayInputStream(serializedForm);
ObjectInputStream ois = new ObjectInputStream(is);
return ois.readObject();
}
! @Test(dataProvider="SerializableSingletons")
! public static void serializableSingletons(String description, Supplier<Object> o) {
! try {
! assertSame(patheticDeepCopy(o.get()), o.get(), description + ": not a singleton");
! } catch(Exception all) {
! fail(description + ": Unexpected Exception", all);
! }
! }
!
! @DataProvider(name = "SerializableSingletons", parallel = true)
! public static Iterator<Object[]> navigableMapProvider() {
! return makeSingletons().iterator();
}
! public static Collection<Object[]> makeSingletons() {
! return Arrays.asList(
! new Object[]{"Collections.EMPTY_LIST",
! (Supplier) () -> {return Collections.EMPTY_LIST;}},
! new Object[]{"Collections.EMPTY_MAP",
! (Supplier) () -> {return Collections.EMPTY_MAP;}},
! new Object[]{"Collections.EMPTY_SET",
! (Supplier) () -> {return Collections.EMPTY_SET;}},
! new Object[]{"Collections.singletonMap()",
! (Supplier) () -> {return Collections.emptyList();}},
! new Object[]{"Collections.emptyMap()",
! (Supplier) () -> {return Collections.emptyMap();}},
! new Object[]{"Collections.emptySet()",
! (Supplier) () -> {return Collections.emptySet();}},
! new Object[]{"Collections.emptySortedSet()",
! (Supplier) () -> {return Collections.emptySortedSet();}},
! new Object[]{"Collections.emptySortedMap()",
! (Supplier) () -> {return Collections.emptySortedMap();}},
! new Object[]{"Collections.emptyNavigableSet()",
! (Supplier) () -> {return Collections.emptyNavigableSet();}},
! new Object[]{"Collections.emptyNavigableMap()",
! (Supplier) () -> {return Collections.emptyNavigableMap();}}
! );
}
}