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