OldPreferencesTest.java revision cc5d0071987b9cacd58750e53ede3fd3b53fb2c9
180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson/* Licensed to the Apache Software Foundation (ASF) under one or more
280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * contributor license agreements.  See the NOTICE file distributed with
380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * this work for additional information regarding copyright ownership.
480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * (the "License"); you may not use this file except in compliance with
680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * the License.  You may obtain a copy of the License at
780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson *
880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson *
1080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * Unless required by applicable law or agreed to in writing, software
1180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
1280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * See the License for the specific language governing permissions and
1480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson * limitations under the License.
1580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson */
1680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
1780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonpackage libcore.java.util.prefs;
1880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
1980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.io.IOException;
2080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.io.OutputStream;
2180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.Arrays;
2280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.BackingStoreException;
2380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.NodeChangeEvent;
2480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.NodeChangeListener;
2580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.PreferenceChangeEvent;
2680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.PreferenceChangeListener;
2780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport java.util.prefs.Preferences;
2880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonimport junit.framework.TestCase;
2980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
3080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilsonpublic final class OldPreferencesTest extends TestCase {
3180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
32cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes    private static final boolean ENCOURAGE_RACES = false;
33cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes
34cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes    private static final String longKey;
35cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes    private static final String longValue;
3680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
3780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    static {
38a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder key = new StringBuilder(Preferences.MAX_KEY_LENGTH);
3980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_KEY_LENGTH; i++) {
4080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            key.append('a');
4180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
4280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        longKey = key.toString();
4380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
44a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder value = new StringBuilder(Preferences.MAX_VALUE_LENGTH);
4580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_VALUE_LENGTH; i++) {
4680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            value.append('a');
4780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
4880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        longValue = value.toString();
4980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
5080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
51a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    @Override protected void setUp() throws Exception {
52a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        super.setUp();
53a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson
54a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
55a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        for (String child : pref.childrenNames()) {
56a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node(child).removeNode();
57a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        }
58a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        pref.clear();
59a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    }
60a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson
61a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    public void testAbstractMethods() throws IOException, BackingStoreException {
6280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p = new MockPreferences();
6380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.absolutePath();
64a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.childrenNames();
65a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.clear();
66a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.exportNode(null);
67a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.exportSubtree(null);
68a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.flush();
6980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.get(null, null);
7080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getBoolean(null, false);
7180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getByteArray(null, null);
7280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getFloat(null, 0.1f);
7380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getDouble(null, 0.1);
7480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getInt(null, 1);
7580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getLong(null, 1l);
7680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.isUserNode();
77a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.keys();
7880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.name();
7980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.node(null);
80a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.nodeExists(null);
8180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.parent();
8280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.put(null, null);
8380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putBoolean(null, false);
8480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putByteArray(null, null);
8580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putDouble(null, 1);
8680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putFloat(null, 1f);
8780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putInt(null, 1);
8880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putLong(null, 1l);
8980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.remove(null);
90a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.removeNode();
9180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.addNodeChangeListener(null);
9280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.addPreferenceChangeListener(null);
9380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.removeNodeChangeListener(null);
9480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.removePreferenceChangeListener(null);
95a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.sync();
9680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.toString();
9780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
9880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
9980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testConstructor() {
10080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferences mp = new MockPreferences();
10180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(mp.getClass(), MockPreferences.class);
10280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
10380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
10480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testToString() {
10580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p1 = Preferences.userNodeForPackage(Preferences.class);
10680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p1.toString());
10780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
10880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p2 = Preferences.systemRoot();
10980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p2.toString());
11080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p3 = Preferences.userRoot();
11280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p3.toString());
11380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
11480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testAbsolutePath() {
11680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p = Preferences.userNodeForPackage(Preferences.class);
11780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("/java/util/prefs", p.absolutePath());
11880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
12080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testChildrenNames() throws BackingStoreException {
12280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
12380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = pref.node("child1");
12580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.node("child2");
12780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.node("child3");
12880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        child1.node("subchild1");
12980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
13080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(pref, child1.parent());
13180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.childrenNames().length);
13280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("child1", pref.childrenNames()[0]);
13380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, child1.childrenNames().length);
13480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("subchild1", child1.childrenNames()[0]);
13580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
13680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
13780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testClear() throws BackingStoreException {
13880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
13980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testClearKey", "testClearValue");
14080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testClearKey1", "testClearValue1");
14180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("testClearValue", pref.get("testClearKey", null));
14280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("testClearValue1", pref.get("testClearKey1", null));
14380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.clear();
14480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testClearKey", null));
14580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testClearKey1", null));
14680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
14780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
14880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGet() throws BackingStoreException {
14980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences root = Preferences.userNodeForPackage(Preferences.class);
15080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = root.node("mock");
15180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("", null));
15280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("default", pref.get("key", "default"));
15380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("key", null));
15480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetkey", "value");
15580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testGetKey", null));
15680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value", pref.get("testGetkey", null));
15780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
15880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
15980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get(null, "abc");
16080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
161a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
16280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
16380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("", "abc");
16480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("key", null);
16580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("key", "");
16680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat("floatKey", 1.0f);
16780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("1.0", pref.get("floatKey", null));
16880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
16980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
17080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
17180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get("key", "abc");
17280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
173a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
17480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
17580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
17680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get(null, "abc");
17780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
178a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
17980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
18080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
18180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
18280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetBoolean() {
18380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
18480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
18580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getBoolean(null, false);
18680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
187a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
18880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
18980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
19080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetBooleanKey", "false");
19180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetBooleanKey2", "value");
19280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.getBoolean("testGetBooleanKey", true));
19380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.getBoolean("testGetBooleanKey2", true));
19480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
19580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
19680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetByteArray() {
19780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
19880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
19980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getByteArray(null, new byte[0]);
20080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
201a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
20280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
20380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] b64Array = new byte[] { 0x59, 0x57, 0x4a, 0x6a };// BASE64
20480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
20580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetByteArrayKey", "abc=");
20680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetByteArrayKey2", new String(b64Array));
20780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("invalidKey", "<>?");
20880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 105, -73 }, pref.getByteArray(
20980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey", new byte[0])));
21080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
21180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .getByteArray("testGetByteArrayKey2", new byte[0])));
21280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[0], pref.getByteArray("invalidKey",
21380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                new byte[0])));
21480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
21580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testGetByteArrayKey3", b64Array);
21680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testGetByteArrayKey4", "abc".getBytes());
21780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(b64Array, pref.getByteArray(
21880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey3", new byte[0])));
21980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals("abc".getBytes(), pref.getByteArray(
22080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey4", new byte[0])));
22180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
22280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
22380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetDouble() {
22480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
22580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
22680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getDouble(null, 0);
22780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
228a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
22980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
23080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
23180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetDoubleKey", "1");
23280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetDoubleKey2", "value");
23380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble("testGetDoubleKey3", 1);
23480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt("testGetDoubleKey4", 1);
23580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey", 0.0), 0);
23680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0.0, pref.getDouble("testGetDoubleKey2", 0.0), 0);
23780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey3", 0.0), 0);
23880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey4", 0.0), 0);
23980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
24080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
24180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetFloat() {
24280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
24380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
24480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getFloat(null, 0f);
24580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
246a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
24780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
24880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetFloatKey", "1");
24980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetFloatKey2", "value");
25080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1f, pref.getFloat("testGetFloatKey", 0f), 0);
25180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0f, pref.getFloat("testGetFloatKey2", 0f), 0);
25280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
25380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
25480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetInt() {
25580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
25680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
25780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getInt(null, 0);
25880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
259a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
26080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
26180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
26280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetIntKey", "1");
26380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetIntKey2", "value");
26480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, pref.getInt("testGetIntKey", 0));
26580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0, pref.getInt("testGetIntKey2", 0));
26680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
26780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
26880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetLong() {
26980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
27080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
27180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getLong(null, 0);
27280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
273a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
27480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
27580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
27680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetLongKey", "1");
27780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetLongKey2", "value");
27880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, pref.getInt("testGetLongKey", 0));
27980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0, pref.getInt("testGetLongKey2", 0));
28080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
28180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
28280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testIsUserNode() {
28380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref1 = Preferences.userNodeForPackage(Preferences.class);
28480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref1.isUserNode());
28580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
28680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref2 = Preferences.systemNodeForPackage(Preferences.class);
28780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref2.isUserNode());
28880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
28980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
29080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testKeys() throws BackingStoreException {
29180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
29280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.clear();
29380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
29480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key0", "value");
29580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key1", "value1");
29680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key2", "value2");
29780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key3", "value3");
29880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
29980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        String[] keys = pref.keys();
30080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(4, keys.length);
301a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        for (String key : keys) {
302a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            assertEquals(0, key.indexOf("key"));
303a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            assertEquals(4, key.length());
30480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
30580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
30680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
30780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testName() {
30880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
30980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child = pref.node("mock");
31080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("mock", child.name());
31180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
31280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
31380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testNode() throws BackingStoreException {
314a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder name = new StringBuilder(Preferences.MAX_NAME_LENGTH);
31580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_NAME_LENGTH; i++) {
31680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            name.append('a');
31780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
31880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        String longName = name.toString();
31980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
32080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences root = Preferences.userRoot();
321cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences parent = Preferences.userNodeForPackage(Preferences.class);
32280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = parent.node("mock");
32380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
32480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
32580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node(null);
32680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
327a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
32880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
32980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
33080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node("/java/util/prefs/");
33180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
332a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
33380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
33480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
33580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node("/java//util/prefs");
33680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
337a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
33880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
33980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
34080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node(longName + "a");
34180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
342a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
34380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
34480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(pref.node(longName));
34580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
34680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(root, pref.node("/"));
34780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
34880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences prefs = pref.node("/java/util/prefs");
34980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(prefs, parent);
35080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(pref, pref.node(""));
35280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
35380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testNodeExists() throws BackingStoreException {
35580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
356cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences parent = Preferences.userNodeForPackage(Preferences.class);
35780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = parent.node("mock");
35880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
36080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.nodeExists(null);
36180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
362a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
36380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
36480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
36580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.nodeExists("/java/util/prefs/");
36680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
367a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
36880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
36980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
37080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.nodeExists("/java//util/prefs");
37180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
372a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
37380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
37480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
37580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("/"));
37680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
37780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("/java/util/prefs"));
37880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
37980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists(""));
38080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
38180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.nodeExists("child"));
38280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences grandchild = pref.node("child/grandchild");
38380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("child"));
38480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("child/grandchild"));
38580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        grandchild.removeNode();
38680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("child"));
38780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.nodeExists("child/grandchild"));
38880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(grandchild.nodeExists(""));
38980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
39080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.nodeExists("child2/grandchild"));
39180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.node("child2/grandchild");
39280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.nodeExists("child2/grandchild"));
39380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
39480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
39580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testParent() {
396cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences parent = Preferences.userNodeForPackage(Preferences.class);
39780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = parent.node("mock");
39880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
39980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(parent, pref.parent());
40080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
40180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
40280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPut() throws BackingStoreException {
403cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
40480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("", "emptyvalue");
40580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("emptyvalue", pref.get("", null));
40680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testPutkey", "value1");
40780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value1", pref.get("testPutkey", null));
40880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testPutkey", "value2");
40980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value2", pref.get("testPutkey", null));
41080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
41180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("", "emptyvalue");
41280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("emptyvalue", pref.get("", null));
41380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
41480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
41580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(null, "value");
41680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
417a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
41880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
41980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
42080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put("key", null);
42180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
422a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
42380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
42480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put(longKey, longValue);
42580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
42680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey + 1, longValue);
42780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
428a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
42980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
43080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
43180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue + 1);
43280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
433a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
43480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
43580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
43680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
43780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
43880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue + 1);
43980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
440a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
44180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
44280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
44380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
44480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue);
44580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
446a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
44780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
44880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
44980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
45080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutBoolean() {
451a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
45280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
45380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putBoolean(null, false);
45480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
455a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
45680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
45780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putBoolean(longKey, false);
45880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
45980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putBoolean(longKey + "a", false);
46080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
461a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
46280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
46380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putBoolean("testPutBooleanKey", false);
46480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("false", pref.get("testPutBooleanKey", null));
46580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.getBoolean("testPutBooleanKey", true));
46680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
46780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
46880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutDouble() {
469cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
47080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
47180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble(null, 3);
47280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
473a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
47480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
47580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble(longKey, 3);
47680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
47780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble(longKey + "a", 3);
47880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
479a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
48080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
48180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble("testPutDoubleKey", 3);
48280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3.0", pref.get("testPutDoubleKey", null));
48380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.getDouble("testPutDoubleKey", 0), 0);
48480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
48580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
48680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutFloat() {
487a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
48880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
48980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat(null, 3f);
49080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
491a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
49280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
49380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat(longKey, 3f);
49480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
49580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat(longKey + "a", 3f);
49680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
497a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
49880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
49980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat("testPutFloatKey", 3f);
50080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3.0", pref.get("testPutFloatKey", null));
50180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3f, pref.getFloat("testPutFloatKey", 0), 0);
50280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
50380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
50480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutInt() {
505a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
50680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
50780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt(null, 3);
50880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
509a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
51080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
51180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt(longKey, 3);
51280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
51380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt(longKey + "a", 3);
51480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
515a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
51680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
51780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt("testPutIntKey", 3);
51880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3", pref.get("testPutIntKey", null));
51980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.getInt("testPutIntKey", 0));
52080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
52180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
52280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutLong() {
523a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
52480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
52580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong(null, 3L);
52680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
527a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
52880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
52980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putLong(longKey, 3L);
53080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
53180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong(longKey + "a", 3L);
53280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
533a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
53480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
53580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putLong("testPutLongKey", 3L);
53680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3", pref.get("testPutLongKey", null));
53780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3L, pref.getLong("testPutLongKey", 0));
53880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
53980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
54080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutByteArray() {
541a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
54280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
54380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(null, new byte[0]);
54480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
545a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
54680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
54780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
54880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray("testPutByteArrayKey4", null);
54980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
550a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
55180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
55280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
55380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray(longKey, new byte[0]);
55480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
55580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(longKey + "a", new byte[0]);
55680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
557a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
55880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
55980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] longArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.74)];
56080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] longerArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.75) + 1];
56180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray(longKey, longArray);
56280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
56380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(longKey, longerArray);
56480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
565a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
56680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
56780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
56880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testPutByteArrayKey", new byte[0]);
56980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("", pref.get("testPutByteArrayKey", null));
57080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[0], pref.getByteArray(
57180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testPutByteArrayKey", null)));
57280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
57380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testPutByteArrayKey3", new byte[] { 'a', 'b', 'c' });
57480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("YWJj", pref.get("testPutByteArrayKey3", null));
57580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
57680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .getByteArray("testPutByteArrayKey3", null)));
57780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
57880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
57980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemove() throws BackingStoreException {
580cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
58180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
58280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
58380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key", "value");
58480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value", pref.get("key", null));
58580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
58680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("key", null));
58780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
58880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
58980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
59080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
59180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.remove(null);
59280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
593a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
59480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
59580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
59680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
59780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
59880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.remove("key");
59980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
600a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
60180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
60280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
60380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
60480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemoveNode() throws BackingStoreException {
605cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
60680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child = pref.node("child");
60780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = pref.node("child1");
60880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences grandchild = child.node("grandchild");
60980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
61080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
61180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
61280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(child.nodeExists(""));
61380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(child1.nodeExists(""));
61480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(grandchild.nodeExists(""));
61580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.nodeExists(""));
61680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
61780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
61880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testAddNodeChangeListener() throws BackingStoreException {
61980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
62080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
62180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(null);
62280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
623a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
62480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
62580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
62680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = null;
62780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
62880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener nl = null;
62980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // To get existed node doesn't create the change event
63080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
63180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
63280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
63380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock1");
634cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(1);
63580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
63680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
637a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock1");
638cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            // There shouldn't be an event, but wait in case one arrives...
639cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            try { Thread.sleep(1000); } catch (InterruptedException ignored) {}
64080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getAdded());
64180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
64280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
64380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
64480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
64580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
64680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same listener can be added twice, and must be removed twice
64780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
64880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
64980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
65080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
65180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock2");
652cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(2);
65380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, nl.getAdded());
65480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
65580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
65680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
65780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
65880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
65980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
66080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event
66180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
66280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
66380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
66480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock3");
66580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
666cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(2);
66780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getRemoved());
66880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
66980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
67080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
67180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
67280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event with two listeners
67380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
67480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
67580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
67680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
67780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock6");
67880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
679cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(4);
68080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, nl.getRemoved());
68180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
68280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
68380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
68480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
68580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
68680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test add/remove indirect children, or remove several children at the
68780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same time
688a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences child3;
68980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
69080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
69180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock4");
69280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.addNodeChangeListener(nl);
693a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock4/mock5");
694cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(1);
69580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
69680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
69780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child3 = pref.node("mock4/mock5/mock6");
698cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            // There shouldn't be an event, but wait in case one arrives...
699cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            try { Thread.sleep(1000); } catch (InterruptedException ignored) {}
70080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getAdded());
70180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
70280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
70380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child3.removeNode();
704cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            // There shouldn't be an event, but wait in case one arrives...
705cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            try { Thread.sleep(1000); } catch (InterruptedException ignored) {}
70680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getRemoved());
70780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
70880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
709a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock4/mock7");
710cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(1);
71180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
71280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
71380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
71480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
715cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            nl.waitForEvent(2);
716cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            assertEquals(2, nl.getRemoved());
71780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
71880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
71980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
72080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                child1.removeNode();
721a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            } catch (Exception ignored) {
72280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
72380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
72480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
72580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
726a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    public void testAddPreferenceChangeListener() throws Exception {
72780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
72880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener pl = null;
72980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
73080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
73180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(null);
73280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
733a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
73480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
73580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
73680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // To get existed node doesn't create the change event
73780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
73880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
73980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
74080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt("mock1", 123);
74180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(1);
74280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, pl.getChanged());
74380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong("long_key", Long.MAX_VALUE);
74480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(2);
74580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, pl.getChanged());
74680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
74780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
74880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
74980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(2);
750cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                assertEquals(2, pl.getChanged());
75180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
75280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.reset();
75380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
75480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
75580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
75680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
75780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
75880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            //child1.removeNode();
75980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
76080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
76180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same listener can be added twice, and must be removed twice
76280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
76380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
76480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
76580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
76680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat("float_key", Float.MIN_VALUE);
76780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(2);
76880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, pl.getChanged());
76980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
77080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
77180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
77280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
77380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
77480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
77580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event
77680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
77780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
77880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
77980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble("double_key", Double.MAX_VALUE);
78080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(1);
78180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, pl.getChanged());
78280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
78380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
78480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(3);
785cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                assertEquals(3, pl.getChanged());
78680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
78780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
78880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
78980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
79080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
79180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
79280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
79380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event with two listeners
79480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
79580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
79680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
79780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
79880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray("byte_array_key", new byte [] {1 ,2 , 3});
79980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
80080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
80180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(4);
80280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                assertEquals(4, pl.getChanged());
80380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
80480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
80580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
80680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
80780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
80880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
80980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
81080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
81180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
81280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
81380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
81480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemoveNodeChangeListener() {
81580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
81680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
81780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(null);
81880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
819a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
82080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
82180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener l1 = new MockNodeChangeListener();
82280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener l2 = new MockNodeChangeListener();
82380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addNodeChangeListener(l1);
82480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addNodeChangeListener(l1);
82580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
82680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNodeChangeListener(l1);
82780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNodeChangeListener(l1);
82880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
82980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(l1);
83080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
831a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
83280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
83380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
83480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(l2);
83580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
836a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
83780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
83880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
83980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
84080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemovePreferenceChangeListener() {
84180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
84280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
84380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(null);
84480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
845a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
84680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
84780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener l1 = new MockPreferenceChangeListener();
84880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener l2 = new MockPreferenceChangeListener();
84980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addPreferenceChangeListener(l1);
85080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addPreferenceChangeListener(l1);
85180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
85280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(l2);
85380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
854a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
85580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
85680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removePreferenceChangeListener(l1);
85780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removePreferenceChangeListener(l1);
85880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
85980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(l1);
86080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
861a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
86280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
86380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
86480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
86580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
86680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    static class MockNodeChangeListener implements NodeChangeListener {
86780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int added = 0;
86880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int removed = 0;
869cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        private int eventCount = 0;
87080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
871cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public void waitForEvent(int count) {
872cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            synchronized (this) {
873cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                while (eventCount < count) {
874cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                    try {
875cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                        wait();
876cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                    } catch (InterruptedException ignored) {
877cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                    }
878cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                }
87980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
88080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
88180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
882cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public void childAdded(NodeChangeEvent e) {
883cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            if (ENCOURAGE_RACES) try { Thread.sleep(1000); } catch (InterruptedException ignored) { }
884cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            synchronized (this) {
885cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++eventCount;
886cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++added;
887cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                notifyAll();
888cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            }
88980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
89080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
891cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public void childRemoved(NodeChangeEvent e) {
892cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            if (ENCOURAGE_RACES) try { Thread.sleep(1000); } catch (InterruptedException ignored) { }
893cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            synchronized (this) {
894cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++eventCount;
895cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++removed;
896cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                notifyAll();
897cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            }
89880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
89980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
900cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public synchronized int getAdded() {
90180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return added;
90280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
90380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
90480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized int getRemoved() {
90580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return removed;
90680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
90780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
908cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public synchronized void reset() {
909cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            eventCount = 0;
91080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            added = 0;
91180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            removed = 0;
91280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
91380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
91480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
91580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    private static class MockPreferenceChangeListener implements PreferenceChangeListener {
91680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int changed = 0;
917cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        private int eventCount = 0;
91880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
91980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void waitForEvent(int count) {
920cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            synchronized (this) {
921cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                while (eventCount < count) {
922cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                    try {
923cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                        wait();
924cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                    } catch (InterruptedException ignored) {
92580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                    }
92680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                }
92780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
92880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
92980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
930cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public void preferenceChange(PreferenceChangeEvent pce) {
931cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            if (ENCOURAGE_RACES) try { Thread.sleep(1000); } catch (InterruptedException ignored) { }
932cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            synchronized (this) {
933cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++eventCount;
934cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                ++changed;
935cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes                notifyAll();
93680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
93780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
93880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
939cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public synchronized int getChanged() {
94080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return changed;
94180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
94280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
943cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes        public synchronized void reset() {
944cc5d0071987b9cacd58750e53ede3fd3b53fb2c9Elliott Hughes            eventCount = 0;
94580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            changed = 0;
94680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
94780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
94880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
94980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    @SuppressWarnings("unused")
95080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    static class MockPreferences extends Preferences {
95180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
95280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
95380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String absolutePath() {
95480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
95580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
95680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
95780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
95880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String[] childrenNames() throws BackingStoreException {
95980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
96080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
96180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
96280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
96380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void clear() throws BackingStoreException {
96480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
96580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
96680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
96780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void exportNode(OutputStream ostream) throws IOException, BackingStoreException {
96880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
96980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
97080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
97180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void exportSubtree(OutputStream ostream) throws IOException, BackingStoreException {
97280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
97380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
97480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
97580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void flush() throws BackingStoreException {
97680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
97780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
97880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
97980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String get(String key, String deflt) {
98080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
98180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
98280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
98380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
98480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public boolean getBoolean(String key, boolean deflt) {
98580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return false;
98680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
98780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
98880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
98980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public byte[] getByteArray(String key, byte[] deflt) {
99080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
99180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
99280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
99380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
99480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public double getDouble(String key, double deflt) {
99580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return 0;
99680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
99780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
99880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
99980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public float getFloat(String key, float deflt) {
100080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return 0;
100180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
100280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
100380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
100480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public int getInt(String key, int deflt) {
100580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return 0;
100680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
100780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
100880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
100980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public long getLong(String key, long deflt) {
101080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return 0;
101180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
101280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
101380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
101480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public boolean isUserNode() {
101580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return false;
101680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
101780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
101880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
101980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String[] keys() throws BackingStoreException {
102080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
102180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
102280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
102380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
102480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String name() {
102580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
102680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
102780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
102880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
102980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public Preferences node(String name) {
103080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
103180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
103280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
103380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
103480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public boolean nodeExists(String name) throws BackingStoreException {
103580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return false;
103680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
103780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
103880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
103980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public Preferences parent() {
104080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
104180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
104280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
104380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
104480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void put(String key, String value) {
104580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
104680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
104780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
104880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putBoolean(String key, boolean value) {
104980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
105080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
105180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
105280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putByteArray(String key, byte[] value) {
105380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
105480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
105580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
105680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putDouble(String key, double value) {
105780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
105880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
105980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
106080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putFloat(String key, float value) {
106180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
106280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
106380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
106480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putInt(String key, int value) {
106580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
106680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
106780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
106880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void putLong(String key, long value) {
106980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
107080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
107180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
107280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void remove(String key) {
107380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
107480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
107580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
107680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void removeNode() throws BackingStoreException {
107780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
107880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
107980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
108080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void addNodeChangeListener(NodeChangeListener ncl) {
108180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
108280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
108380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
108480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void addPreferenceChangeListener(PreferenceChangeListener pcl) {
108580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
108680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
108780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
108880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void removeNodeChangeListener(NodeChangeListener ncl) {
108980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
109080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
109180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
109280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void removePreferenceChangeListener(PreferenceChangeListener pcl) {
109380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
109480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
109580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
109680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void sync() throws BackingStoreException {
109780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
109880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
109980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        @Override
110080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public String toString() {
110180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return null;
110280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
110380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
110480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson}
1105