jdk/test/java/util/prefs/RemoveNullKeyCheck.java
changeset 12681 ebee74a1fd8c
parent 12552 06a22aed06d1
child 14694 6d6d54dc0ae1
--- a/jdk/test/java/util/prefs/RemoveNullKeyCheck.java	Wed May 09 07:28:12 2012 -0700
+++ b/jdk/test/java/util/prefs/RemoveNullKeyCheck.java	Wed May 09 11:14:22 2012 -0700
@@ -22,23 +22,77 @@
  */
 
 /* @test
- * @bug 7160242
+ * @bug 7160242 7165118
  * @summary Check if NullPointerException is thrown if the key passed
  *          to remove() is null.
  */
 
 import java.util.prefs.Preferences;
+import java.util.prefs.AbstractPreferences;
+import java.util.prefs.BackingStoreException;
 
 public class RemoveNullKeyCheck {
 
+    private static boolean failed = false;
+
     public static void main(String[] args) throws Exception {
-       try {
-           Preferences node = Preferences.userRoot().node("N1");
-           node.remove(null);
-           throw new RuntimeException("Expected NullPointerException " +
-                                      "not thrown");
-       } catch (NullPointerException npe) {
-           System.out.println("NullPointerException thrown");
-       }
+        checkPreferencesRemove();
+        checkAbstractPreferencesRemove();
+        if (failed) {
+            throw new RuntimeException("Expected NullPointerException " +
+                                       "not thrown");
+        }
+    }
+
+    public static void checkPreferencesRemove() {
+        try {
+            Preferences node = Preferences.userRoot().node("N1");
+            node.remove(null);
+            failed = true;
+        } catch (NullPointerException npe) {
+        }
+    }
+
+    public static void checkAbstractPreferencesRemove() {
+
+        Preferences abstrPrefs = new AbstractPreferences(null, "") {
+            @Override
+            protected void putSpi(String key, String value) {
+            }
+            @Override
+            protected String getSpi(String key) {
+                return null;
+            }
+            @Override
+            protected void removeSpi(String key) {
+            }
+            @Override
+            protected void removeNodeSpi() throws BackingStoreException {
+            }
+            @Override
+            protected String[] keysSpi() throws BackingStoreException {
+                return new String[0];
+            }
+            @Override
+            protected String[] childrenNamesSpi() throws BackingStoreException {
+                return new String[0];
+            }
+            @Override
+            protected AbstractPreferences childSpi(String name) {
+                return null;
+            }
+            @Override
+            protected void syncSpi() throws BackingStoreException {
+            }
+            @Override
+            protected void flushSpi() throws BackingStoreException {
+            }
+        };
+
+        try {
+            abstrPrefs.remove(null);
+            failed = true;
+        } catch(NullPointerException npe) {
+        }
     }
 }