1b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath/*
2b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  this work for additional information regarding copyright ownership.
5b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  (the "License"); you may not use this file except in compliance with
7b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  the License.  You may obtain a copy of the License at
8b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
9b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
11b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  Unless required by applicable law or agreed to in writing, software
12b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  See the License for the specific language governing permissions and
15b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *  limitations under the License.
16b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath */
17b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
18b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathpackage org.apache.harmony.tests.java.util.prefs;
19b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
20b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.ByteArrayInputStream;
21b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.ByteArrayOutputStream;
22b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.File;
23b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.IOException;
24b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.InputStream;
25b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.UnsupportedEncodingException;
26b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.nio.charset.StandardCharsets;
27b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.Arrays;
28b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.AbstractPreferences;
29b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.BackingStoreException;
3096b40e87c32023084d7153360b1fa0c44c598095Narayan Kamathimport java.util.prefs.FileSystemPreferences;
31b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.NodeChangeEvent;
32b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.NodeChangeListener;
33b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferenceChangeEvent;
34b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferenceChangeListener;
35b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.Preferences;
36b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferencesFactory;
37b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport javax.xml.parsers.DocumentBuilder;
38b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport javax.xml.parsers.DocumentBuilderFactory;
39b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport javax.xml.parsers.ParserConfigurationException;
40b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport junit.framework.TestCase;
41b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport libcore.io.IoUtils;
42b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport org.w3c.dom.Document;
43b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport org.xml.sax.SAXException;
44b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
45b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathpublic class AbstractPreferencesTest extends TestCase {
46b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
47b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public static final class TestPreferencesFactory implements PreferencesFactory {
48b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private final Preferences userPrefs;
49b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private final Preferences systemPrefs;
50b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
5196b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath        private final File userLockFile;
5296b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath        private final File systemLockFile;
5396b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath
5496b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath        public TestPreferencesFactory(String root) throws IOException {
5596b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            userLockFile = new File(root, "user.lock");
5696b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            systemLockFile = new File(root, "system.lock");
5796b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            assertTrue(userLockFile.createNewFile());
5896b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            assertTrue(systemLockFile.createNewFile());
5996b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            userPrefs = new FileSystemPreferences(root + "/user", userLockFile, true);
6096b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            systemPrefs = new FileSystemPreferences(root + "/system", systemLockFile, false);
61b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
62b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
63b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences userRoot() {
64b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return userPrefs;
65b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
66b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
67b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences systemRoot() {
68b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return systemPrefs;
69b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
70b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
71b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
72b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private AbstractPreferences pref;
73b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private AbstractPreferences root;
74b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private AbstractPreferences parent;
75b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private PreferencesFactory defaultFactory;
76b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
77b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private final static String LONG_KEY;
78b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private final static String LONG_VALUE;
79b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private final static String LONG_NAME;
80b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
81b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    static {
82b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        final byte[] chars = new byte[Preferences.MAX_VALUE_LENGTH];
83b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
84b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        LONG_VALUE = new String(chars, StandardCharsets.US_ASCII);
85b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        LONG_KEY = LONG_VALUE.substring(0, Preferences.MAX_KEY_LENGTH);
86b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        LONG_NAME = LONG_VALUE.substring(0, Preferences.MAX_NAME_LENGTH);
87b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
88b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
89b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
90b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void setUp() throws Exception {
91b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        File tmpDir = IoUtils.createTemporaryDirectory("OldAbstractPreferencesTest");
92b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        defaultFactory = Preferences.setPreferencesFactory(
93b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                new TestPreferencesFactory(tmpDir.getAbsolutePath()));
94b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        root = (AbstractPreferences) Preferences.userRoot();
95b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        parent = (AbstractPreferences) Preferences.userNodeForPackage(Preferences.class);
96b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
97b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref = (AbstractPreferences) parent.node("mock");
98b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
99b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
100b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
101b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void tearDown() throws Exception {
102b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences.setPreferencesFactory(defaultFactory);
103b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
104b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
105b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testConstructor() throws BackingStoreException {
106b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
107b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref = new MockAbstractPreferences(
108b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    (AbstractPreferences) Preferences.userRoot(), "mo/ck");
109b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
110b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
111b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
112b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
113b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref = new MockAbstractPreferences(null, "mock");
114b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
115b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
116b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
117b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
118b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            new MockAbstractPreferences(null, " ");
119b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
120b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
121b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
122b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
123b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            new MockAbstractPreferences(pref, "");
124b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
125b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
126b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
127b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
128b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            new MockAbstractPreferences(pref, null);
129b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
130b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
131b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
132b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
133b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
134b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
135b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        new MockAbstractPreferences(pref, " ");
136b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
137b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p2 = new MockAbstractPreferences(null, "");
138b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(p2, Preferences.systemRoot());
139b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(p2, Preferences.userRoot());
140b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p2.isUserNode());
141b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
142b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p2 = new MockAbstractPreferences((AbstractPreferences) Preferences
143b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .userRoot(), "mock");
144b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(p2, pref);
145b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p2.removeNode();
146b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
147b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
148b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testProtectedFields() throws BackingStoreException {
149b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
150b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
151b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
152b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = new MockAbstractPreferences(pref, "newNode");
153b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.getNewNode());
154b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(p.getLock().getClass(), Object.class);
155b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
156b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p = (MockAbstractPreferences) pref.node("child");
157b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.getNewNode());
158b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
159b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p = (MockAbstractPreferences) ((MockAbstractPreferences) pref)
160b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .publicChildSpi("child2");
161b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.getNewNode());
162b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
163b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
164b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testToString() {
165b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("User Preference Node: " + pref.absolutePath(), pref
166b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
167b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
168b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref = new MockAbstractPreferences((AbstractPreferences) Preferences
169b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .systemRoot(), "mock");
170b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("System Preference Node: " + pref.absolutePath(), pref
171b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
172b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
173b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
174b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testAbsolutePath() {
175b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/util/prefs/mock", pref.absolutePath());
176b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
177b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref = new MockAbstractPreferences(pref, " ");
178b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/util/prefs/mock/ ", pref.absolutePath());
179b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
180b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
181b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testChildrenNames() throws BackingStoreException {
182b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, pref.childrenNames().length);
183b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
184b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // MockAbstractPreferences child1 = new MockAbstractPreferences(pref,
185b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "child1");
186b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // MockAbstractPreferences child2 = new MockAbstractPreferences(pref,
187b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "child2");
188b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // MockAbstractPreferences child3 = new MockAbstractPreferences(pref,
189b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "child3");
190b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // MockAbstractPreferences subchild1 = new
191b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // MockAbstractPreferences(child1,
192b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "subchild1");
193b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child1 = pref.node("child1");
194b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
195b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.node("child2");
196b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.node("child3");
197b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child1.node("subchild1");
198b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
199b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(pref, child1.parent());
200b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(3, pref.childrenNames().length);
201b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
202b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
203b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testClear() throws BackingStoreException {
204b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testClearKey", "testClearValue");
205b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testClearKey1", "testClearValue1");
206b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("testClearValue", pref.get("testClearKey", null));
207b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("testClearValue1", pref.get("testClearKey1", null));
208b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.clear();
209b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("testClearKey", null));
210b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("testClearKey1", null));
211b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
212b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
213b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGet() throws BackingStoreException {
214b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("", null));
215b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("default", pref.get("key", "default"));
216b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("key", null));
217b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetkey", "value");
218b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("testGetKey", null));
219b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("value", pref.get("testGetkey", null));
220b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
221b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
222b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.get(null, "abc");
223b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
224b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
225b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
226b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
227b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.get("", "abc");
228b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.get("key", null);
229b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.get("key", "");
230b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putFloat("floatKey", 1.0f);
231b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("1.0", pref.get("floatKey", null));
232b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
233b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNode();
234b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
235b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.get("key", "abc");
236b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
237b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
238b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
239b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
240b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.get(null, "abc");
241b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
242b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
243b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
244b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
245b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
246b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetBoolean() {
247b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
248b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getBoolean(null, false);
249b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
250b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
251b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
252b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
253b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetBooleanKey", "false");
254b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetBooleanKey2", "value");
255b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.getBoolean("testGetBooleanKey", true));
256b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.getBoolean("testGetBooleanKey2", true));
257b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
258b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
259b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutByteArray() {
260b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
261b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putByteArray(null, new byte[0]);
262b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
263b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
264b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
265b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
266b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putByteArray("testPutByteArrayKey4", null);
267b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
268b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
269b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
270b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
271b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray(LONG_KEY, new byte[0]);
272b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
273b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putByteArray(LONG_KEY + "a", new byte[0]);
274b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
275b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
276b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
277b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] longArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.74)];
278b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] longerArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.75) + 1];
279b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray(LONG_KEY, longArray);
280b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
281b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putByteArray(LONG_KEY, longerArray);
282b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
283b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
284b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
285b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
286b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray("testPutByteArrayKey", new byte[0]);
287b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("", pref.get("testPutByteArrayKey", null));
288b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(new byte[0], pref.getByteArray(
289b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "testPutByteArrayKey", null)));
290b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
291b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray("testPutByteArrayKey3", new byte[] { 'a', 'b', 'c' });
292b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("YWJj", pref.get("testPutByteArrayKey3", null));
293b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
294b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .getByteArray("testPutByteArrayKey3", null)));
295b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
296b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
297b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetByteArray() throws UnsupportedEncodingException {
298b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
299b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getByteArray(null, new byte[0]);
300b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
301b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
302b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
303b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] b64Array = new byte[] { 0x59, 0x57, 0x4a, 0x6a };// BASE64
304b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // encoding for
305b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "abc"
306b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
307b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetByteArrayKey", "abc=");
308b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetByteArrayKey2", new String(b64Array, "UTF-8"));
309b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("invalidKey", "<>?");
310b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // assertTrue(Arrays.equals(new byte[0], p.getByteArray(
311b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // "testGetByteArrayKey", new byte[0])));
312b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(new byte[] { 105, -73 }, pref.getByteArray(
313b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "testGetByteArrayKey", new byte[0])));
314b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
315b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .getByteArray("testGetByteArrayKey2", new byte[0])));
316b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(new byte[0], pref.getByteArray("invalidKey",
317b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                new byte[0])));
318b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
319b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray("testGetByteArrayKey3", b64Array);
320b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putByteArray("testGetByteArrayKey4", "abc".getBytes());
321b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals(b64Array, pref.getByteArray(
322b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "testGetByteArrayKey3", new byte[0])));
323b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(Arrays.equals("abc".getBytes(), pref.getByteArray(
324b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "testGetByteArrayKey4", new byte[0])));
325b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
326b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
327b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetDouble() {
328b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
329b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getDouble(null, 0);
330b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
331b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
332b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
333b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
334b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetDoubleKey", "1");
335b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetDoubleKey2", "value");
336b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putDouble("testGetDoubleKey3", 1);
337b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putInt("testGetDoubleKey4", 1);
338b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1.0, pref.getDouble("testGetDoubleKey", 0.0), 0);
339b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0.0, pref.getDouble("testGetDoubleKey2", 0.0), 0);
340b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1.0, pref.getDouble("testGetDoubleKey3", 0.0), 0);
341b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1.0, pref.getDouble("testGetDoubleKey4", 0.0), 0);
342b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
343b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
344b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetFloat() {
345b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
346b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getFloat(null, 0f);
347b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
348b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
349b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
350b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetFloatKey", "1");
351b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetFloatKey2", "value");
352b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1f, pref.getFloat("testGetFloatKey", 0f), 0); //$NON-NLS-1$
353b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0f, pref.getFloat("testGetFloatKey2", 0f), 0);
354b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
355b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
356b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetInt() {
357b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
358b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getInt(null, 0);
359b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
360b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
361b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
362b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
363b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetIntKey", "1");
364b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetIntKey2", "value");
365b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, pref.getInt("testGetIntKey", 0));
366b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, pref.getInt("testGetIntKey2", 0));
367b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
368b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
369b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetLong() {
370b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
371b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getLong(null, 0);
372b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
373b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
374b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
375b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
376b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetLongKey", "1");
377b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testGetLongKey2", "value");
378b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, pref.getInt("testGetLongKey", 0));
379b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, pref.getInt("testGetLongKey2", 0));
380b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
381b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
382b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testIsUserNode() {
383b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.isUserNode());
384b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
385b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref = new MockAbstractPreferences((AbstractPreferences) Preferences
386b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .systemRoot(), "mock");
387b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.isUserNode());
388b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
389b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
390b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    // TODO, how to test the "stored defaults"
391b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    // TODO, how to test the multi-thread
392b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testKeys() throws BackingStoreException {
393b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, pref.keys().length);
394b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
395b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("key0", "value");
396b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("key1", "value1");
397b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("key2", "value2");
398b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("key3", "value3");
399b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
400b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        String[] keys = pref.keys();
401b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(4, keys.length);
402b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        for (int i = 0; i < keys.length; i++) {
403b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals(0, keys[i].indexOf("key"));
404b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals(4, keys[i].length());
405b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
406b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
407b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
408b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testName() {
409b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("mock", pref.name());
410b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
411b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref = new MockAbstractPreferences(pref, " ");
412b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(" ", pref.name());
413b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
414b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
415b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testCharCase() throws BackingStoreException {
416b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(pref.node("samechild"), pref.node("samechild"));
417b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(pref.node("sameChild"), pref.node("samechild"));
418b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(pref.node("child"), pref.node("Child"));
419b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(pref.node("child"), pref.node("Child"));
420b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(pref.node("child"), pref.node(" child"));
421b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        String[] names = pref.childrenNames();
422b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(5, names.length);
423b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        for (int i = 0; i < names.length; i++) {
424b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            String name = names[i];
425b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertTrue("samechild".equals(name) || "sameChild".equals(name)
426b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    || "child".equals(name) || "Child".equals(name)
427b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    || " child".equals(name));
428b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
429b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
430b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences mock1 = pref.node("mock1");
431b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        mock1.put("key", "1value");
432b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        mock1.put("KEY", "2value");
433b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        mock1.put("/K/E/Y", "7value");
434b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        mock1.put("/K/E\\Y\\abc~@!#$%^&*(\\", "8value");
435b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
436b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("8value", mock1.get("/K/E\\Y\\abc~@!#$%^&*(\\", null));
437b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(mock1.get("/k/e/y", null));
438b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("7value", mock1.get("/K/E/Y", null));
439b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("1value", mock1.get("key", null));
440b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
441b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        String[] keys = mock1.keys();
442b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(4, keys.length);
443b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        for (int i = 0; i < keys.length; i++) {
444b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            String key = keys[i];
445b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertTrue("key".equals(key) || "KEY".equals(key)
446b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    || "/K/E/Y".equals(key)
447b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    || "/K/E\\Y\\abc~@!#$%^&*(\\".equals(key));
448b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
449b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
450b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
451b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testNode() throws BackingStoreException {
452b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
453b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.node(null);
454b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
455b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
456b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
457b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
458b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.node("/java/util/prefs/");
459b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
460b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
461b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
462b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
463b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.node("/java//util/prefs");
464b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
465b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
466b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
467b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
468b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.node(LONG_NAME + "a");
469b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
470b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
471b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
472b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotNull(pref.node(LONG_NAME));
473b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
474b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(root, pref.node("/"));
475b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
476b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences prefs = pref.node("/java/util/prefs");
477b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(prefs, parent);
478b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
479b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(pref, pref.node(""));
480b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
481b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
482b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
483b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
484b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child = (MockAbstractPreferences) ((MockAbstractPreferences) pref)
485b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .publicChildSpi("child");
486b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, pref.node("child"));
487b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
488b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child2 = pref.node("child2");
489b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child2, ((MockAbstractPreferences) pref)
490b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .publicChildSpi("child2"));
491b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
492b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandchild = pref.node("child/grandchild");
493b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(grandchild, child.childSpi("grandchild"));
494b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(grandchild, child.cachedChildrenImpl()[0]);
495b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandchild.removeNode();
496b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNotSame(grandchild, pref.node("child/grandchild"));
497b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
498b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandchild = pref.node("child3/grandchild");
499b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        AbstractPreferences[] childs = ((MockAbstractPreferences) pref)
500b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .cachedChildrenImpl();
501b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child3 = child;
502b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        for (int i = 0; i < childs.length; i++) {
503b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            if (childs[i].name().equals("child3")) {
504b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                child3 = childs[i];
505b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                break;
506b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
507b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
508b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child3, grandchild.parent());
509b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
510b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
511b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testNodeExists() throws BackingStoreException {
512b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
513b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.nodeExists(null);
514b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
515b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
516b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
517b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
518b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.nodeExists("/java/util/prefs/");
519b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
520b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
521b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
522b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
523b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.nodeExists("/java//util/prefs");
524b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
525b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
526b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
527b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
528b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("/"));
529b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
530b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("/java/util/prefs"));
531b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
532b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists(""));
533b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
534b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.nodeExists("child"));
535b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandchild = pref.node("child/grandchild");
536b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("child"));
537b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("child/grandchild"));
538b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandchild.removeNode();
539b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("child"));
540b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.nodeExists("child/grandchild"));
541b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(grandchild.nodeExists(""));
542b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
543b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.nodeExists("child2/grandchild"));
544b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.node("child2/grandchild");
545b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(pref.nodeExists("child2/grandchild"));
546b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
547b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
548b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void test_nodeExists() throws BackingStoreException {
549b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        AbstractPreferences test = (AbstractPreferences) Preferences.userRoot()
550b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .node("test");
551b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
552b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            test.nodeExists(null);
553b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
554b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
555b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
556b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
557b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        test.removeNode();
558b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
559b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            test.nodeExists(null);
560b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
561b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
562b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
563b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
564b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
565b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testParent() {
566b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(parent, pref.parent());
567b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        AbstractPreferences child1 = new MockAbstractPreferences(pref, "child1");
568b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(pref, child1.parent());
569b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(root.parent());
570b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
571b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
572b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPut() throws BackingStoreException {
573b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("", "emptyvalue");
574b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("emptyvalue", pref.get("", null));
575b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testPutkey", "value1");
576b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("value1", pref.get("testPutkey", null));
577b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("testPutkey", "value2");
578b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("value2", pref.get("testPutkey", null));
579b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
580b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("", "emptyvalue");
581b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("emptyvalue", pref.get("", null));
582b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
583b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
584b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put(null, "value");
585b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
586b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
587b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
588b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
589b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
590b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put("key", null);
591b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
592b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
593b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
594b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
595b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put(LONG_KEY, LONG_VALUE);
596b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
597b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put(LONG_KEY + 1, LONG_VALUE);
598b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
599b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
600b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
601b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
602b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
603b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put(LONG_KEY, LONG_VALUE + 1);
604b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
605b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
606b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
607b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
608b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNode();
609b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
610b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put(LONG_KEY, LONG_VALUE + 1);
611b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
612b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
613b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
614b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
615b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
616b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put(LONG_KEY, LONG_VALUE);
617b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
618b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
619b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
620b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
621b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
622b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutBoolean() {
623b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
624b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putBoolean(null, false);
625b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
626b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
627b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
628b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
629b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putBoolean(LONG_KEY, false);
630b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
631b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putBoolean(LONG_KEY + "a", false);
632b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
633b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
634b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
635b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
636b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putBoolean("testPutBooleanKey", false);
637b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("false", pref.get("testPutBooleanKey", null));
638b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.getBoolean("testPutBooleanKey", true));
639b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
640b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
641b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutDouble() {
642b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
643b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putDouble(null, 3);
644b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
645b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
646b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
647b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
648b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putDouble(LONG_KEY, 3);
649b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
650b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putDouble(LONG_KEY + "a", 3);
651b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
652b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
653b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
654b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
655b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putDouble("testPutDoubleKey", 3);
656b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("3.0", pref.get("testPutDoubleKey", null));
657b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(3, pref.getDouble("testPutDoubleKey", 0), 0);
658b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
659b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
660b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutFloat() {
661b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
662b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putFloat(null, 3f);
663b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
664b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
665b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
666b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
667b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putFloat(LONG_KEY, 3f);
668b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
669b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putFloat(LONG_KEY + "a", 3f);
670b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
671b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
672b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
673b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
674b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putFloat("testPutFloatKey", 3f);
675b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("3.0", pref.get("testPutFloatKey", null));
676b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(3f, pref.getFloat("testPutFloatKey", 0), 0);
677b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
678b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
679b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutInt() {
680b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
681b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putInt(null, 3);
682b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
683b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
684b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
685b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
686b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putInt(LONG_KEY, 3);
687b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
688b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putInt(LONG_KEY + "a", 3);
689b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
690b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
691b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
692b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
693b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putInt("testPutIntKey", 3);
694b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("3", pref.get("testPutIntKey", null));
695b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(3, pref.getInt("testPutIntKey", 0));
696b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
697b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
698b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testPutLong() {
699b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
700b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putLong(null, 3L);
701b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
702b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
703b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
704b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
705b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putLong(LONG_KEY, 3L);
706b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
707b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putLong(LONG_KEY + "a", 3L);
708b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
709b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
710b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
711b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
712b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putLong("testPutLongKey", 3L);
713b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("3", pref.get("testPutLongKey", null));
714b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(3L, pref.getLong("testPutLongKey", 0));
715b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
716b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
717b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testRemove() throws BackingStoreException {
718b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.remove("key");
719b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
720b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.put("key", "value");
721b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("value", pref.get("key", null));
722b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.remove("key");
723b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(pref.get("key", null));
724b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
725b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.remove("key");
726b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
727b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
728b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.remove(null);
729b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
730b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
731b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
732b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
733b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNode();
734b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
735b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.remove("key");
736b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
737b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
738b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
739b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
740b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
741b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testRemoveNode() throws BackingStoreException {
742b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child = pref.node("child");
743b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child1 = pref.node("child1");
744b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandchild = child.node("grandchild");
745b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
746b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNode();
747b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
748b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(child.nodeExists(""));
749b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(child1.nodeExists(""));
750b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(grandchild.nodeExists(""));
751b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.nodeExists(""));
752b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
753b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
754b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testRemoveNodeChangeListener() {
755b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
756b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removeNodeChangeListener(null);
757b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
758b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
759b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
760b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
761b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockNodeChangeListener l1 = new MockNodeChangeListener();
762b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockNodeChangeListener l2 = new MockNodeChangeListener();
763b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.addNodeChangeListener(l1);
764b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.addNodeChangeListener(l1);
765b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
766b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNodeChangeListener(l1);
767b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNodeChangeListener(l1);
768b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
769b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removeNodeChangeListener(l1);
770b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
771b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
772b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
773b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
774b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
775b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removeNodeChangeListener(l2);
776b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
777b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
778b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
779b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
780b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
781b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testRemovePreferenceChangeListener() {
782b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
783b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removePreferenceChangeListener(null);
784b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
785b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
786b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
787b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockPreferenceChangeListener l1 = new MockPreferenceChangeListener();
788b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockPreferenceChangeListener l2 = new MockPreferenceChangeListener();
789b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.addPreferenceChangeListener(l1);
790b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.addPreferenceChangeListener(l1);
791b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
792b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removePreferenceChangeListener(l2);
793b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
794b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
795b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
796b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removePreferenceChangeListener(l1);
797b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removePreferenceChangeListener(l1);
798b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
799b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removePreferenceChangeListener(l1);
800b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalArgumentException");
801b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalArgumentException expected) {
802b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
803b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
804b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
805b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSync() throws BackingStoreException {
806b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.sync();
807b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
808b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
809b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
810b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
811b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetSyncTimes();
812b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.sync();
813b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.getSyncTimes());
814b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
815b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetSyncTimes();
816b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child = (MockAbstractPreferences) p
817b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .node("child");
818b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child2 = new MockAbstractPreferences(p,
819b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "child2");
820b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.childs.put("child2", child2);
821b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.cachedChildrenImpl().length);
822b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.cachedChildrenImpl()[0]);
823b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.sync();
824b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.getSyncTimes());
825b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getSyncTimes());
826b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, child2.getSyncTimes());
827b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
828b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetSyncTimes();
829b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.resetSyncTimes();
830b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.sync();
831b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.getSyncTimes());
832b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getSyncTimes());
833b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
834b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetSyncTimes();
835b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.resetSyncTimes();
836b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences grandson = (MockAbstractPreferences) child
837b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .node("grandson");
838b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.sync();
839b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.getSyncTimes());
840b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getSyncTimes());
841b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, grandson.getSyncTimes());
842b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
843b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
844b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testFlush() throws BackingStoreException {
845b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.flush();
846b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
847b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
848b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
849b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
850b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetFlushedTimes();
851b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.flush();
852b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.getFlushedTimes());
853b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
854b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetFlushedTimes();
855b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child = (MockAbstractPreferences) p
856b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .node("child");
857b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child2 = new MockAbstractPreferences(p,
858b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "child2");
859b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.childs.put("child2", child2);
860b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.cachedChildrenImpl().length);
861b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.cachedChildrenImpl()[0]);
862b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.flush();
863b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.getFlushedTimes());
864b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getFlushedTimes());
865b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, child2.getFlushedTimes());
866b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
867b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetFlushedTimes();
868b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.resetFlushedTimes();
869b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.flush();
870b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.getFlushedTimes());
871b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getFlushedTimes());
872b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
873b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetFlushedTimes();
874b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.resetFlushedTimes();
875b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences grandson = (MockAbstractPreferences) child
876b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .node("grandson");
877b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.flush();
878b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.getFlushedTimes());
879b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getFlushedTimes());
880b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, grandson.getFlushedTimes());
881b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
882b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.resetFlushedTimes();
883b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.resetFlushedTimes();
884b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandson.resetFlushedTimes();
885b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.removeNode();
886b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.flush();
887b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.getFlushedTimes());
888b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.getFlushedTimes());
889b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, grandson.getFlushedTimes());
890b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
891b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
892b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testGetChild() throws BackingStoreException {
893b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
894b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
895b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
896b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
897b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child"));
898b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child = new MockAbstractPreferences(p, "child");
899b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.childs.put("child", child);
900b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.getChildImpl("child"));
901b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child "));
902b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
903b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child/grandson"));
904b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.childs.put("grandson", new MockAbstractPreferences(child,
905b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "grandson"));
906b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child/grandson"));
907b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
908b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl(null));
909b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl(""));
910b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl(" "));
911b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("abc//abc"));
912b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child/"));
913b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl(LONG_NAME + "a"));
914b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
915b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.removeNode();
916b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("child"));
917b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
918b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
919b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testIsRemoved() throws BackingStoreException {
920b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
921b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
922b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
923b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
924b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.isRemovedImpl());
925b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removeNode();
926b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.isRemovedImpl());
927b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
928b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
929b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testExportNode() throws Exception {
930b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
931b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.exportNode(null);
932b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
933b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
934b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
935b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
936b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putBoolean("key", false);
937b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child = pref.node("child<");
938b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.put("key2", "value2<");
939b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandson = child.node("grandson");
940b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandson.put("key3", "value3");
941b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        ByteArrayOutputStream out = new ByteArrayOutputStream();
942b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.exportNode(out);
943b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
944b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] result = out.toByteArray();
945b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        ByteArrayInputStream in = new ByteArrayInputStream(result);
946b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
947b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        parseXmlStream(in, false);
948b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
949b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
950b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private static Document parseXmlStream(InputStream input, boolean validating)
951b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            throws SAXException, IOException, ParserConfigurationException {
952b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // Create a builder factory
953b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
954b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        factory.setValidating(validating);
955b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // Create the builder and parse the file
956b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        DocumentBuilder builder = factory.newDocumentBuilder();
957b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        return builder.parse(input);
958b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
959b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
960b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testExportSubtree() throws Exception {
961b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
962b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.exportSubtree(null);
963b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
964b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
965b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
966b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
967b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        ByteArrayOutputStream out = new ByteArrayOutputStream();
968b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.putBoolean("key", false);
969b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences child = pref.node("child");
970b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.put("key2", "value2");
971b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandson = child.node("grandson");
972b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandson.put("key3", "value3");
973b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.node("grandson2");
974b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences grandgrandson = grandson.node("grandgrandson");
975b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        grandgrandson.put("key4", "value4");
976b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child.exportSubtree(out);
977b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
978b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] result = out.toByteArray();
979b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        ByteArrayInputStream in = new ByteArrayInputStream(result);
980b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
981b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // We don't have an xpath API so all we can do is test that the
982b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // generated XML parses correctly.
983b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        parseXmlStream(in, false);
984b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
985b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
986b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testCachedChildren() throws Exception {
987b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
988b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
989b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
990b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
991b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.cachedChildrenImpl().length);
992b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
993b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences child = (MockAbstractPreferences) p
994b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .getChildImpl("child");
995b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(child);
996b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
997b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        child = new MockAbstractPreferences(p, "child");
998b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.getChildImpl("child"));
999b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1000b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.cachedChildrenImpl().length);
1001b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1002b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.node("child");
1003b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.cachedChildrenImpl()[0]);
1004b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1005b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences grandchild = new MockAbstractPreferences(child,
1006b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                "grandchild");
1007b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(grandchild, child.getChildImpl("grandchild"));
1008b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertNull(p.getChildImpl("grandchild"));
1009b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1010b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.cachedChildrenImpl().length);
1011b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, child.cachedChildrenImpl().length);
1012b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1013b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.node("child/grandchild");
1014b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.cachedChildrenImpl()[0]);
1015b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(grandchild, child.cachedChildrenImpl()[0]);
1016b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.cachedChildrenImpl().length);
1017b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.cachedChildrenImpl().length);
1018b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1019b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.childs.put("child2", new MockAbstractPreferences(p, "child2"));
1020b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.nodeExists("child2/grandchild");
1021b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(child, p.cachedChildrenImpl()[0]);
1022b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(grandchild, child.cachedChildrenImpl()[0]);
1023b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, p.cachedChildrenImpl().length);
1024b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(1, child.cachedChildrenImpl().length);
1025b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1026b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1027b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testAbstractMethod() {
1028b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1029b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1030b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1031b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        ((MockAbstractPreferences) pref).protectedAbstractMethod();
1032b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1033b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1034b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testBackingStoreException() throws IOException,
1035b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            BackingStoreException {
1036b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1037b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1038b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1039b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
1040b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.setResult(MockAbstractPreferences.backingException);
1041b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1042b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1043b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1044b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException e) {
1045b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1046b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.put("exceptionkey", "value");
1047b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1048b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1049b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("exception default", p.get("key", "exception default"));
1050b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.remove("key");
1051b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1052b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.clear();
1053b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1054b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1055b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1056b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1057b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putInt("key", 3);
1058b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getInt("key", 3);
1059b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putLong("key", 3l);
1060b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getLong("key", 3l);
1061b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putDouble("key", 3);
1062b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getDouble("key", 3);
1063b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putBoolean("key", true);
1064b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getBoolean("key", true);
1065b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putFloat("key", 3f);
1066b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getFloat("key", 3f);
1067b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putByteArray("key", new byte[0]);
1068b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getByteArray("key", new byte[0]);
1069b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1070b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.keys();
1071b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1072b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1073b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1074b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1075b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1076b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.keys();
1077b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1078b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1079b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1080b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1081b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1082b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1083b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1084b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1085b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.parent();
1086b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.node("");
1087b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.nodeExists("");
1088b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1089b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.removeNode();
1090b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1091b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1092b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1093b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.name();
1094b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1095b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isUserNode();
1096b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockPreferenceChangeListener mockPreferenceChangeListener = new MockPreferenceChangeListener();
1097b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addPreferenceChangeListener(mockPreferenceChangeListener);
1098b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removePreferenceChangeListener(mockPreferenceChangeListener);
1099b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockNodeChangeListener mockNodeChangeListener = new MockNodeChangeListener();
1100b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addNodeChangeListener(mockNodeChangeListener);
1101b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removeNodeChangeListener(mockNodeChangeListener);
1102b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1103b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1104b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.sync();
1105b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1106b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1107b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1108b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1109b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.flush();
1110b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1111b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1112b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1113b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1114b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportNode(new ByteArrayOutputStream());
1115b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1116b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1117b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1118b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1119b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportSubtree(new ByteArrayOutputStream());
1120b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1121b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1122b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1123b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isRemovedImpl();
1124b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1125b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getChildImpl(null);
1126b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw BackingStoreException");
1127b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (BackingStoreException expected) {
1128b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1129b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.cachedChildrenImpl();
1130b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1131b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1132b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testRuntimeException() throws IOException,
1133b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            BackingStoreException {
1134b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1135b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1136b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1137b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
1138b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.setResult(MockAbstractPreferences.runtimeException);
1139b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1140b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1141b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1142b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1143b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1144b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1145b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.put("exceptionkey", "value");
1146b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1147b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1148b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1149b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1150b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1151b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("exception default", p.get("key", "exception default"));
1152b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1153b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.remove("key");
1154b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1155b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1156b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1157b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1158b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.clear();
1159b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1160b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1161b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1162b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1163b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putInt("key", 3);
1164b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1165b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1166b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1167b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getInt("key", 3);
1168b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1169b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putLong("key", 3l);
1170b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1171b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1172b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1173b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getLong("key", 3l);
1174b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1175b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putDouble("key", 3);
1176b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1177b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1178b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1179b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getDouble("key", 3);
1180b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1181b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putBoolean("key", true);
1182b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1183b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1184b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1185b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getBoolean("key", true);
1186b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1187b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putFloat("key", 3f);
1188b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1189b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1190b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1191b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getFloat("key", 3f);
1192b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1193b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putByteArray("key", new byte[0]);
1194b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1195b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1196b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1197b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getByteArray("key", new byte[0]);
1198b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1199b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.keys();
1200b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1201b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1202b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1203b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1204b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.keys();
1205b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1206b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1207b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1208b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1209b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1210b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1211b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1212b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1213b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.parent();
1214b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.node("");
1215b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.nodeExists("");
1216b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1217b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.removeNode();
1218b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1219b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1220b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1221b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.name();
1222b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1223b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isUserNode();
1224b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockPreferenceChangeListener pcl = new MockPreferenceChangeListener();
1225b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addPreferenceChangeListener(pcl);
1226b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removePreferenceChangeListener(pcl);
1227b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockNodeChangeListener ncl = new MockNodeChangeListener();
1228b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addNodeChangeListener(ncl);
1229b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removeNodeChangeListener(ncl);
1230b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1231b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1232b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.sync();
1233b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1234b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1235b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1236b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1237b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.flush();
1238b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1239b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1240b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1241b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1242b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportNode(new ByteArrayOutputStream());
1243b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1244b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1245b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1246b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1247b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportSubtree(new ByteArrayOutputStream());
1248b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1249b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1250b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1251b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isRemovedImpl();
1252b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1253b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getChildImpl(null);
1254b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MockRuntimeException");
1255b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MockRuntimeException expected) {
1256b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1257b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.cachedChildrenImpl();
1258b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1259b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1260b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSPIReturnNull() throws IOException, BackingStoreException {
1261b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1262b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1263b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1264b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
1265b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.setResult(MockAbstractPreferences.returnNull);
1266b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1267b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1268b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1269b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1270b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1271b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1272b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1273b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.put("nullkey", "value");
1274b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("null default", p.get("key", "null default"));
1275b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.remove("key");
1276b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1277b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.clear();
1278b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1279b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1280b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1281b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putInt("key", 3);
1282b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getInt("key", 3);
1283b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putLong("key", 3l);
1284b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getLong("key", 3l);
1285b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putDouble("key", 3);
1286b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getDouble("key", 3);
1287b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putBoolean("key", true);
1288b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getBoolean("key", true);
1289b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putFloat("key", 3f);
1290b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getFloat("key", 3f);
1291b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.putByteArray("key", new byte[0]);
1292b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.getByteArray("key", new byte[0]);
1293b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.keys();
1294b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1295b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.childrenNames();
1296b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1297b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1298b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1299b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.parent();
1300b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.node("");
1301b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.nodeExists("");
1302b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1303b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.removeNode();
1304b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1305b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1306b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1307b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.name();
1308b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.absolutePath();
1309b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isUserNode();
1310b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockPreferenceChangeListener mockPreferenceChangeListener = new MockPreferenceChangeListener();
1311b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addPreferenceChangeListener(mockPreferenceChangeListener);
1312b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removePreferenceChangeListener(mockPreferenceChangeListener);
1313b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockNodeChangeListener mockNodeChangeListener = new MockNodeChangeListener();
1314b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.addNodeChangeListener(mockNodeChangeListener);
1315b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removeNodeChangeListener(mockNodeChangeListener);
1316b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.toString();
1317b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.sync();
1318b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.flush();
1319b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1320b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportNode(System.out);
1321b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1322b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1323b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1324b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1325b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.exportSubtree(System.out);
1326b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1327b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1328b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1329b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isRemovedImpl();
1330b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1331b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getChildImpl("");
1332b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1333b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1334b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1335b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.cachedChildrenImpl();
1336b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1337b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1338b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testIllegalStateException() throws IOException,
1339b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            BackingStoreException {
1340b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1341b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1342b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1343b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.removeNode();
1344b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // after remove node, every methods, except name(), absolutePath(),
1345b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // isUserNode(), flush() or nodeExists(""),
1346b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        // will throw illegal state exception
1347b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.nodeExists("");
1348b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.name();
1349b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.absolutePath();
1350b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.isUserNode();
1351b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.toString();
1352b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        pref.flush();
1353b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1354b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.nodeExists("child");
1355b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1356b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1357b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1358b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1359b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.childrenNames();
1360b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1361b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1362b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1363b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1364b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.remove(null);
1365b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1366b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1367b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1368b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1369b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.clear();
1370b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1371b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1372b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1373b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1374b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.get("key", "null default");
1375b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1376b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1377b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1378b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1379b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.put("nullkey", "value");
1380b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1381b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1382b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1383b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1384b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putInt("key", 3);
1385b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1386b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1387b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1388b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1389b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getInt("key", 3);
1390b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1391b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1392b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1393b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1394b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putLong("key", 3l);
1395b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1396b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1397b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1398b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1399b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getLong("key", 3l);
1400b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1401b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1402b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1403b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1404b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putDouble("key", 3);
1405b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1406b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1407b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1408b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1409b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getDouble("key", 3);
1410b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1411b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1412b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1413b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1414b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putBoolean("key", true);
1415b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1416b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1417b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1418b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1419b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getBoolean("key", true);
1420b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1421b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1422b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1423b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1424b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putFloat("key", 3f);
1425b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1426b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1427b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1428b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1429b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getFloat("key", 3f);
1430b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1431b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1432b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1433b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1434b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.putByteArray("key", new byte[0]);
1435b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1436b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1437b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1438b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1439b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.getByteArray("key", new byte[0]);
1440b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1441b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1442b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1443b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1444b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.keys();
1445b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1446b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1447b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1448b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1449b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.keys();
1450b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1451b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1452b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1453b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1454b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.childrenNames();
1455b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1456b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1457b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1458b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1459b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.parent();
1460b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1461b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1462b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1463b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1464b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.node(null);
1465b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1466b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1467b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1468b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1469b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removeNode();
1470b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1471b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1472b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1473b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1474b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref
1475b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    .addPreferenceChangeListener(new MockPreferenceChangeListener());
1476b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1477b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1478b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1479b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1480b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref
1481b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    .removePreferenceChangeListener(new MockPreferenceChangeListener());
1482b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1483b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1484b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1485b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1486b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.addNodeChangeListener(new MockNodeChangeListener());
1487b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1488b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1489b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1490b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1491b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.removeNodeChangeListener(new MockNodeChangeListener());
1492b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1493b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1494b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1495b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1496b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.sync();
1497b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1498b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1499b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1500b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1501b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.exportNode(null);
1502b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1503b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1504b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1505b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1506b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            pref.exportSubtree(null);
1507b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1508b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1509b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1510b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1511b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1512b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1513b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
1514b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.isRemovedImpl();
1515b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.cachedChildrenImpl();
1516b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1517b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getChildImpl(null);
1518b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1519b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1520b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1521b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1522b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1523b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testNullAndIllegalStateException() throws Exception {
1524b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        if (!(pref instanceof MockAbstractPreferences)) {
1525b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return;
1526b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1527b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        MockAbstractPreferences p = (MockAbstractPreferences) pref;
1528b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        p.removeNode();
1529b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1530b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.get(null, "null default");
1531b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1532b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1533b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1534b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1535b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.put(null, "value");
1536b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1537b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1538b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1539b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1540b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putInt(null, 3);
1541b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1542b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1543b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1544b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1545b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getInt(null, 3);
1546b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1547b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1548b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1549b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1550b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putLong(null, 3l);
1551b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1552b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1553b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1554b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1555b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getLong(null, 3l);
1556b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1557b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1558b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1559b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1560b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putDouble(null, 3);
1561b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1562b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1563b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1564b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1565b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getDouble(null, 3);
1566b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1567b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1568b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1569b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1570b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putBoolean(null, true);
1571b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1572b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1573b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1574b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1575b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getBoolean(null, true);
1576b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1577b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1578b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1579b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1580b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putFloat(null, 3f);
1581b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1582b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1583b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1584b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1585b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getFloat(null, 3f);
1586b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1587b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1588b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1589b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1590b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.putByteArray(null, new byte[0]);
1591b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1592b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1593b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1594b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1595b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.getByteArray(null, new byte[0]);
1596b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1597b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1598b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1599b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1600b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.addPreferenceChangeListener(null);
1601b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1602b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1603b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1604b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1605b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.removePreferenceChangeListener(null);
1606b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1607b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1608b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1609b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1610b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.addNodeChangeListener(null);
1611b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
1612b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException expected) {
1613b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1614b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
1615b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            p.removeNodeChangeListener(null);
1616b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IllegalStateException");
1617b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IllegalStateException expected) {
1618b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1619b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1620b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1621b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    /**
1622b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath     * Regression for HARMONY-828
1623b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath     */
1624b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testLongPath() throws Exception {
1625b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(pref.nodeExists("ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"));
1626b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1627b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1628b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public static class MockPreferenceChangeListener implements
1629b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            PreferenceChangeListener {
1630b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private int changed = 0;
1631b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1632b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void preferenceChange(PreferenceChangeEvent pce) {
1633b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            changed++;
1634b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1635b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1636b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int getChanged() {
1637b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            int result = changed;
1638b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            changed = 0;
1639b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return result;
1640b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1641b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1642b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1643b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public static class MockNodeChangeListener implements NodeChangeListener {
1644b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private boolean addDispatched = false;
1645b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1646b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private boolean removeDispatched = false;
1647b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1648b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private Object addLock = new Object();
1649b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1650b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private Object removeLock = new Object();
1651b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1652b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private int added = 0;
1653b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1654b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private int removed = 0;
1655b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1656b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void childAdded(NodeChangeEvent e) {
1657b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            synchronized (addLock) {
1658b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                ++added;
1659b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                addDispatched = true;
1660b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                addLock.notifyAll();
1661b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
1662b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1663b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1664b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void childRemoved(NodeChangeEvent e) {
1665b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            synchronized (removeLock) {
1666b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                removed++;
1667b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                removeDispatched = true;
1668b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                removeLock.notifyAll();
1669b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
1670b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1671b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1672b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int getAdded() {
1673b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            synchronized (addLock) {
1674b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                if (!addDispatched) {
1675b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    try {
1676b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                        // TODO: don't know why must add limitation
1677b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                        addLock.wait(100);
1678b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    } catch (InterruptedException e) {
1679b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    }
1680b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                }
1681b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                addDispatched = false;
1682b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
1683b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return added;
1684b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1685b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1686b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int getRemoved() {
1687b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            synchronized (removeLock) {
1688b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                if (!removeDispatched) {
1689b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    try {
1690b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                        removeLock.wait(100);
1691b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    } catch (InterruptedException e) {
1692b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    }
1693b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                }
1694b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                removeDispatched = false;
1695b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
1696b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return removed;
1697b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1698b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1699b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1700b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void reset() {
1701b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            added = 0;
1702b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            removed = 0;
1703b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
1704b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
1705b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
1706b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath}
1707