test/java/util/Collection/MOAT.java
Print this page
rev 7046 : 4802647: Throw required NPEs from removeAll()/retainAll()
Reviewed-by: mduigou, chegar, dholmes
Contributed-by: Brandon Passanisi <brandon.passanisi@oracle.com>
@@ -24,10 +24,11 @@
/*
* @test
* @bug 6207984 6272521 6192552 6269713 6197726 6260652 5073546 4137464
* 4155650 4216399 4294891 6282555 6318622 6355327 6383475 6420753
* 6431845 4802633 6570566 6570575 6570631 6570924 6691185 6691215
+ * 4802647 7123424
* @summary Run many tests on many Collection and Map implementations
* @author Martin Buchholz
* @run main MOAT
* @run main/othervm -XX:+AggressiveOpts MOAT
*/
@@ -56,10 +57,12 @@
import static java.util.Collections.*;
public class MOAT {
public static void realMain(String[] args) {
+ testCollection(new NewAbstractCollection<Integer>());
+ testCollection(new NewAbstractSet<Integer>());
testCollection(new LinkedHashSet<Integer>());
testCollection(new HashSet<Integer>());
testCollection(new Vector<Integer>());
testCollection(new Vector<Integer>().subList(0,0));
testCollection(new ArrayDeque<Integer>());
@@ -751,18 +754,34 @@
//----------------------------------------------------------------
// The "all" operations should throw NPE when passed null
//----------------------------------------------------------------
{
+ clear(c);
+ try {
+ c.removeAll(null);
+ fail("Expected NullPointerException");
+ }
+ catch (NullPointerException e) { pass(); }
+ catch (Throwable t) { unexpected(t); }
+
oneElement(c);
try {
c.removeAll(null);
fail("Expected NullPointerException");
}
catch (NullPointerException e) { pass(); }
catch (Throwable t) { unexpected(t); }
+ clear(c);
+ try {
+ c.retainAll(null);
+ fail("Expected NullPointerException");
+ }
+ catch (NullPointerException e) { pass(); }
+ catch (Throwable t) { unexpected(t); }
+
oneElement(c);
try {
c.retainAll(null);
fail("Expected NullPointerException");
}
@@ -1203,6 +1222,37 @@
return new ObjectInputStream(is).readObject();}
@SuppressWarnings("unchecked")
static <T> T serialClone(T obj) {
try { return (T) readObject(serializedForm(obj)); }
catch (Exception e) { throw new Error(e); }}
+ private static class NewAbstractCollection<E> extends AbstractCollection<E> {
+ ArrayList<E> list = new ArrayList<>();
+ public boolean remove(Object obj) {
+ return list.remove(obj);
+ }
+ public boolean add(E e) {
+ return list.add(e);
+ }
+ public Iterator<E> iterator() {
+ return list.iterator();
+ }
+ public int size() {
+ return list.size();
+ }
+ }
+ private static class NewAbstractSet<E> extends AbstractSet<E> {
+ HashSet<E> set = new HashSet<>();
+ public boolean remove(Object obj) {
+ return set.remove(obj);
+ }
+ public boolean add(E e) {
+ return set.add(e);
+ }
+ public Iterator<E> iterator() {
+ return set.iterator();
+ }
+ public int size() {
+ return set.size();
+ }
+ }
+
}