OldPreferencesTest.java revision a744a0370d151794f5a20a23fa549cc2f34df7d6
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
3280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    final static String longKey;
3380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    final static String longValue;
3480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
3580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    static {
36a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder key = new StringBuilder(Preferences.MAX_KEY_LENGTH);
3780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_KEY_LENGTH; i++) {
3880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            key.append('a');
3980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
4080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        longKey = key.toString();
4180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
42a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder value = new StringBuilder(Preferences.MAX_VALUE_LENGTH);
4380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_VALUE_LENGTH; i++) {
4480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            value.append('a');
4580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
4680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        longValue = value.toString();
4780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
4880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
49a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    @Override protected void setUp() throws Exception {
50a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        super.setUp();
51a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson
52a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
53a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        for (String child : pref.childrenNames()) {
54a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node(child).removeNode();
55a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        }
56a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        pref.clear();
57a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    }
58a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson
59a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    public void testAbstractMethods() throws IOException, BackingStoreException {
6080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p = new MockPreferences();
6180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.absolutePath();
62a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.childrenNames();
63a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.clear();
64a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.exportNode(null);
65a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.exportSubtree(null);
66a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.flush();
6780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.get(null, null);
6880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getBoolean(null, false);
6980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getByteArray(null, null);
7080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getFloat(null, 0.1f);
7180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getDouble(null, 0.1);
7280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getInt(null, 1);
7380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.getLong(null, 1l);
7480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.isUserNode();
75a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.keys();
7680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.name();
7780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.node(null);
78a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.nodeExists(null);
7980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.parent();
8080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.put(null, null);
8180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putBoolean(null, false);
8280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putByteArray(null, null);
8380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putDouble(null, 1);
8480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putFloat(null, 1f);
8580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putInt(null, 1);
8680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.putLong(null, 1l);
8780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.remove(null);
88a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.removeNode();
8980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.addNodeChangeListener(null);
9080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.addPreferenceChangeListener(null);
9180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.removeNodeChangeListener(null);
9280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.removePreferenceChangeListener(null);
93a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        p.sync();
9480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        p.toString();
9580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
9680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
9780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testConstructor() {
9880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferences mp = new MockPreferences();
9980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(mp.getClass(), MockPreferences.class);
10080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
10180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
10280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testToString() {
10380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p1 = Preferences.userNodeForPackage(Preferences.class);
10480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p1.toString());
10580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
10680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p2 = Preferences.systemRoot();
10780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p2.toString());
10880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
10980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p3 = Preferences.userRoot();
11080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(p3.toString());
11180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
11280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testAbsolutePath() {
11480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences p = Preferences.userNodeForPackage(Preferences.class);
11580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("/java/util/prefs", p.absolutePath());
11680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
11880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
11980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testChildrenNames() throws BackingStoreException {
12080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
12180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = pref.node("child1");
12380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.node("child2");
12580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.node("child3");
12680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        child1.node("subchild1");
12780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
12880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(pref, child1.parent());
12980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.childrenNames().length);
13080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("child1", pref.childrenNames()[0]);
13180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, child1.childrenNames().length);
13280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("subchild1", child1.childrenNames()[0]);
13380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
13480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
13580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testClear() throws BackingStoreException {
13680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
13780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testClearKey", "testClearValue");
13880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testClearKey1", "testClearValue1");
13980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("testClearValue", pref.get("testClearKey", null));
14080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("testClearValue1", pref.get("testClearKey1", null));
14180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.clear();
14280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testClearKey", null));
14380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testClearKey1", null));
14480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
14580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
14680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGet() throws BackingStoreException {
14780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences root = Preferences.userNodeForPackage(Preferences.class);
14880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = root.node("mock");
14980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("", null));
15080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("default", pref.get("key", "default"));
15180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("key", null));
15280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetkey", "value");
15380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("testGetKey", null));
15480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value", pref.get("testGetkey", null));
15580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
15680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
15780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get(null, "abc");
15880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
159a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
16080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
16180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("", "abc");
16280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("key", null);
16380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.get("key", "");
16480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat("floatKey", 1.0f);
16580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("1.0", pref.get("floatKey", null));
16680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
16780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
16880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
16980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get("key", "abc");
17080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
171a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
17280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
17380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
17480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.get(null, "abc");
17580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
176a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
17780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
17880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
17980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
18080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetBoolean() {
18180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
18280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
18380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getBoolean(null, false);
18480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
185a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
18680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
18780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
18880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetBooleanKey", "false");
18980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetBooleanKey2", "value");
19080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.getBoolean("testGetBooleanKey", true));
19180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref.getBoolean("testGetBooleanKey2", true));
19280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
19380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
19480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetByteArray() {
19580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
19680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
19780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getByteArray(null, new byte[0]);
19880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
199a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
20080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
20180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] b64Array = new byte[] { 0x59, 0x57, 0x4a, 0x6a };// BASE64
20280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
20380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetByteArrayKey", "abc=");
20480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetByteArrayKey2", new String(b64Array));
20580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("invalidKey", "<>?");
20680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 105, -73 }, pref.getByteArray(
20780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey", new byte[0])));
20880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
20980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .getByteArray("testGetByteArrayKey2", new byte[0])));
21080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[0], pref.getByteArray("invalidKey",
21180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                new byte[0])));
21280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
21380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testGetByteArrayKey3", b64Array);
21480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testGetByteArrayKey4", "abc".getBytes());
21580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(b64Array, pref.getByteArray(
21680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey3", new byte[0])));
21780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals("abc".getBytes(), pref.getByteArray(
21880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testGetByteArrayKey4", new byte[0])));
21980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
22080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
22180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetDouble() {
22280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
22380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
22480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getDouble(null, 0);
22580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
226a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
22780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
22880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
22980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetDoubleKey", "1");
23080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetDoubleKey2", "value");
23180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble("testGetDoubleKey3", 1);
23280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt("testGetDoubleKey4", 1);
23380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey", 0.0), 0);
23480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0.0, pref.getDouble("testGetDoubleKey2", 0.0), 0);
23580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey3", 0.0), 0);
23680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1.0, pref.getDouble("testGetDoubleKey4", 0.0), 0);
23780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
23880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
23980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetFloat() {
24080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
24180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
24280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getFloat(null, 0f);
24380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
244a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
24580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
24680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetFloatKey", "1");
24780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetFloatKey2", "value");
24880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1f, pref.getFloat("testGetFloatKey", 0f), 0);
24980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0f, pref.getFloat("testGetFloatKey2", 0f), 0);
25080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
25180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
25280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetInt() {
25380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
25480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
25580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getInt(null, 0);
25680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
257a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
25880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
25980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
26080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetIntKey", "1");
26180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetIntKey2", "value");
26280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, pref.getInt("testGetIntKey", 0));
26380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0, pref.getInt("testGetIntKey2", 0));
26480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
26580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
26680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testGetLong() {
26780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
26880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
26980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.getLong(null, 0);
27080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
271a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
27280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
27380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
27480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetLongKey", "1");
27580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testGetLongKey2", "value");
27680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(1, pref.getInt("testGetLongKey", 0));
27780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(0, pref.getInt("testGetLongKey2", 0));
27880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
27980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
28080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testIsUserNode() {
28180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref1 = Preferences.userNodeForPackage(Preferences.class);
28280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(pref1.isUserNode());
28380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
28480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref2 = Preferences.systemNodeForPackage(Preferences.class);
28580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref2.isUserNode());
28680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
28780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
28880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testKeys() throws BackingStoreException {
28980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
29080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.clear();
29180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
29280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key0", "value");
29380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key1", "value1");
29480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key2", "value2");
29580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key3", "value3");
29680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
29780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        String[] keys = pref.keys();
29880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(4, keys.length);
299a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        for (String key : keys) {
300a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            assertEquals(0, key.indexOf("key"));
301a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            assertEquals(4, key.length());
30280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
30380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
30480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
30580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testName() {
30680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
30780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child = pref.node("mock");
30880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("mock", child.name());
30980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
31080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
31180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testNode() throws BackingStoreException {
312a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        StringBuilder name = new StringBuilder(Preferences.MAX_NAME_LENGTH);
31380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        for (int i = 0; i < Preferences.MAX_NAME_LENGTH; i++) {
31480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            name.append('a');
31580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
31680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        String longName = name.toString();
31780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
31880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences root = Preferences.userRoot();
31980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences parent = Preferences
32080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .userNodeForPackage(Preferences.class);
32180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = parent.node("mock");
32280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
32380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
32480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node(null);
32580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
326a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
32780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
32880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
32980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node("/java/util/prefs/");
33080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
331a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
33280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
33380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
33480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node("/java//util/prefs");
33580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
336a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
33780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
33880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
33980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.node(longName + "a");
34080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
341a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
34280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
34380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNotNull(pref.node(longName));
34480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
34580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(root, pref.node("/"));
34680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
34780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences prefs = pref.node("/java/util/prefs");
34880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(prefs, parent);
34980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(pref, pref.node(""));
35180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
35280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testNodeExists() throws BackingStoreException {
35480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
35580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences parent = Preferences
35680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .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() {
39680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences parent = Preferences
39780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .userNodeForPackage(Preferences.class);
39880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = parent.node("mock");
39980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
40080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertSame(parent, pref.parent());
40180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
40280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
40380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPut() throws BackingStoreException {
40480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences
40580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        .userNodeForPackage(Preferences.class);
40680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("", "emptyvalue");
40780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("emptyvalue", pref.get("", null));
40880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testPutkey", "value1");
40980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value1", pref.get("testPutkey", null));
41080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("testPutkey", "value2");
41180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value2", pref.get("testPutkey", null));
41280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
41380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("", "emptyvalue");
41480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("emptyvalue", pref.get("", null));
41580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
41680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
41780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(null, "value");
41880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
419a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
42080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
42180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
42280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put("key", null);
42380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
424a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
42580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
42680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put(longKey, longValue);
42780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
42880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey + 1, longValue);
42980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
430a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
43180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
43280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
43380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue + 1);
43480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
435a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
43680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
43780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
43880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
43980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
44080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue + 1);
44180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
442a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
44380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
44480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
44580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
44680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.put(longKey, longValue);
44780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
448a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
44980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
45080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
45180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
45280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutBoolean() {
453a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
45480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
45580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putBoolean(null, false);
45680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
457a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
45880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
45980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putBoolean(longKey, false);
46080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
46180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putBoolean(longKey + "a", false);
46280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
463a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
46480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
46580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putBoolean("testPutBooleanKey", false);
46680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("false", pref.get("testPutBooleanKey", null));
46780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.getBoolean("testPutBooleanKey", true));
46880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
46980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
47080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutDouble() {
47180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences
47280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        .userNodeForPackage(Preferences.class);
47380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
47480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble(null, 3);
47580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
476a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
47780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
47880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble(longKey, 3);
47980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
48080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble(longKey + "a", 3);
48180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
482a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
48380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
48480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putDouble("testPutDoubleKey", 3);
48580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3.0", pref.get("testPutDoubleKey", null));
48680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.getDouble("testPutDoubleKey", 0), 0);
48780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
48880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
48980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutFloat() {
490a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
49180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
49280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat(null, 3f);
49380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
494a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
49580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
49680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat(longKey, 3f);
49780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
49880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat(longKey + "a", 3f);
49980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
500a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
50180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
50280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putFloat("testPutFloatKey", 3f);
50380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3.0", pref.get("testPutFloatKey", null));
50480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3f, pref.getFloat("testPutFloatKey", 0), 0);
50580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
50680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
50780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutInt() {
508a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
50980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
51080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt(null, 3);
51180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
512a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
51380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
51480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt(longKey, 3);
51580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
51680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt(longKey + "a", 3);
51780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
518a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
51980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
52080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putInt("testPutIntKey", 3);
52180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3", pref.get("testPutIntKey", null));
52280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3, pref.getInt("testPutIntKey", 0));
52380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
52480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
52580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutLong() {
526a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
52780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
52880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong(null, 3L);
52980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
530a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
53180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
53280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putLong(longKey, 3L);
53380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
53480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong(longKey + "a", 3L);
53580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
536a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
53780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
53880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putLong("testPutLongKey", 3L);
53980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("3", pref.get("testPutLongKey", null));
54080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals(3L, pref.getLong("testPutLongKey", 0));
54180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
54280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
54380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testPutByteArray() {
544a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
54580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
54680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(null, new byte[0]);
54780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
548a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
54980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
55080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
55180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray("testPutByteArrayKey4", null);
55280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
553a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
55480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
55580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
55680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray(longKey, new byte[0]);
55780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
55880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(longKey + "a", new byte[0]);
55980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
560a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
56180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
56280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] longArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.74)];
56380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        byte[] longerArray = new byte[(int) (Preferences.MAX_VALUE_LENGTH * 0.75) + 1];
56480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray(longKey, longArray);
56580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
56680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray(longKey, longerArray);
56780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
568a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
56980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
57080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
57180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testPutByteArrayKey", new byte[0]);
57280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("", pref.get("testPutByteArrayKey", null));
57380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[0], pref.getByteArray(
57480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                "testPutByteArrayKey", null)));
57580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
57680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.putByteArray("testPutByteArrayKey3", new byte[] { 'a', 'b', 'c' });
57780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("YWJj", pref.get("testPutByteArrayKey3", null));
57880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertTrue(Arrays.equals(new byte[] { 'a', 'b', 'c' }, pref
57980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                .getByteArray("testPutByteArrayKey3", null)));
58080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
58180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
58280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemove() throws BackingStoreException {
58380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences
58480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        .userNodeForPackage(Preferences.class);
58580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
58680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
58780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.put("key", "value");
58880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertEquals("value", pref.get("key", null));
58980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
59080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertNull(pref.get("key", null));
59180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
59280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.remove("key");
59380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
59480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
59580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.remove(null);
59680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
597a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
59880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
59980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
60080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
60180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
60280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.remove("key");
60380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
604a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalStateException expected) {
60580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
60680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
60780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
60880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemoveNode() throws BackingStoreException {
60980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences
61080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        .userNodeForPackage(Preferences.class);
61180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child = pref.node("child");
61280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = pref.node("child1");
61380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences grandchild = child.node("grandchild");
61480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
61580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNode();
61680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
61780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(child.nodeExists(""));
61880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(child1.nodeExists(""));
61980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(grandchild.nodeExists(""));
62080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        assertFalse(pref.nodeExists(""));
62180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
62280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
62380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testAddNodeChangeListener() throws BackingStoreException {
62480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
62580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
62680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(null);
62780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
628a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
62980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
63080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
63180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences child1 = null;
63280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
63380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener nl = null;
63480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // To get existed node doesn't create the change event
63580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
63680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
63780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
63880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock1");
63980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
64080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
64180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
642a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock1");
64380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
64480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getAdded());
64580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
64680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
64780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
64880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
64980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
65080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same listener can be added twice, and must be removed twice
65180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
65280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
65380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
65480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
65580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock2");
65680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
65780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, nl.getAdded());
65880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
65980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
66080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
66180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
66280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
66380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
66480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event
66580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
66680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
66780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
66880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock3");
66980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
67080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
67180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getRemoved());
67280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
67380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
67480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
67580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
67680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event with two listeners
67780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
67880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
67980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
68080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addNodeChangeListener(nl);
68180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock6");
68280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
68380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
68480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, nl.getRemoved());
68580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
68680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
68780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
68880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(nl);
68980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
69080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test add/remove indirect children, or remove several children at the
69180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same time
692a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        Preferences child3;
69380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
69480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl = new MockNodeChangeListener();
69580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1 = pref.node("mock4");
69680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.addNodeChangeListener(nl);
697a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock4/mock5");
69880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
69980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
70080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
70180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child3 = pref.node("mock4/mock5/mock6");
70280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
70380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getAdded());
70480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
70580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
70680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child3.removeNode();
70780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
70880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(0, nl.getRemoved());
70980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
71080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
711a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            pref.node("mock4/mock7");
71280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
71380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, nl.getAdded());
71480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
71580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
71680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            child1.removeNode();
71780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.waitForEvent();
71880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, nl.getRemoved()); // fail 1
71980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            nl.reset();
72080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
72180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
72280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                child1.removeNode();
723a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            } catch (Exception ignored) {
72480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
72580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
72680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
72780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
728a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson    public void testAddPreferenceChangeListener() throws Exception {
72980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
73080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener pl = null;
73180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
73280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
73380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(null);
73480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
735a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (NullPointerException expected) {
73680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
73780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
73880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // To get existed node doesn't create the change event
73980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
74080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
74180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
74280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putInt("mock1", 123);
74380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(1);
74480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, pl.getChanged());
74580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putLong("long_key", Long.MAX_VALUE);
74680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(2);
74780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, pl.getChanged());
74880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
74980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
75080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
75180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(2);
75280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                assertEquals(2, pl.getChanged()); // fail 1
75380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
75480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.reset();
75580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
75680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
75780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
75880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
75980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
76080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            //child1.removeNode();
76180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
76280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
76380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // same listener can be added twice, and must be removed twice
76480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
76580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
76680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
76780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
76880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putFloat("float_key", Float.MIN_VALUE);
76980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(2);
77080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(2, pl.getChanged());
77180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
77280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
77380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
77480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
77580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
77680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
77780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event
77880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
77980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
78080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
78180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putDouble("double_key", Double.MAX_VALUE);
78280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.waitForEvent(1);
78380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            assertEquals(1, pl.getChanged());
78480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
78580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
78680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(3);
78780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                assertEquals(3, pl.getChanged()); // fails
78880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
78980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
79080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
79180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
79280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
79380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
79480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
79580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        // test remove event with two listeners
79680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
79780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl = new MockPreferenceChangeListener();
79880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
79980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.addPreferenceChangeListener(pl);
80080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.putByteArray("byte_array_key", new byte [] {1 ,2 , 3});
80180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
80280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pref.clear();
80380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                pl.waitForEvent(4);
80480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                assertEquals(4, pl.getChanged());
80580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            } catch(BackingStoreException bse) {
80680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                fail("BackingStoreException is thrown");
80780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
80880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pl.reset();
80980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        } finally {
81080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
81180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(pl);
81280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
81380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
81480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
81580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
81680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemoveNodeChangeListener() {
81780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
81880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
81980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(null);
82080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
821a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
82280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
82380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener l1 = new MockNodeChangeListener();
82480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockNodeChangeListener l2 = new MockNodeChangeListener();
82580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addNodeChangeListener(l1);
82680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addNodeChangeListener(l1);
82780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
82880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNodeChangeListener(l1);
82980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removeNodeChangeListener(l1);
83080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
83180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(l1);
83280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
833a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
83480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
83580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
83680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removeNodeChangeListener(l2);
83780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
838a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
83980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
84080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
84180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
84280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    public void testRemovePreferenceChangeListener() {
84380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        Preferences pref = Preferences.userNodeForPackage(Preferences.class);
84480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
84580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(null);
84680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
847a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
84880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
84980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener l1 = new MockPreferenceChangeListener();
85080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        MockPreferenceChangeListener l2 = new MockPreferenceChangeListener();
85180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addPreferenceChangeListener(l1);
85280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.addPreferenceChangeListener(l1);
85380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
85480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(l2);
85580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
856a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
85780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
85880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removePreferenceChangeListener(l1);
85980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        pref.removePreferenceChangeListener(l1);
86080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        try {
86180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            pref.removePreferenceChangeListener(l1);
86280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            fail();
863a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        } catch (IllegalArgumentException expected) {
86480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
86580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
86680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
86780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
86880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    static class MockNodeChangeListener implements NodeChangeListener {
86980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int added = 0;
87080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int removed = 0;
87180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
87280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized void waitForEvent() {
87380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            try {
87480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                wait(500);
875a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson            } catch (InterruptedException ignored) {
87680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
87780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
87880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
87980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized void childAdded(NodeChangeEvent e) {
88080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            ++added;
88180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            notifyAll();
88280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
88380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
88480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized void childRemoved(NodeChangeEvent e) {
88580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            removed++;
88680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            notifyAll();
88780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
88880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
88980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized  int getAdded() {
89080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return added;
89180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
89280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
89380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized int getRemoved() {
89480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return removed;
89580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
89680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
89780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void reset() {
89880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            added = 0;
89980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            removed = 0;
90080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
90180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    }
90280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
90380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson    private static class MockPreferenceChangeListener implements PreferenceChangeListener {
90480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private int changed = 0;
90580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private boolean addDispatched = false;
90680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        private boolean result = false;
90780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
90880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void waitForEvent(int count) {
90980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            for (int i = 0; i < count; i++) {
91080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                try {
91180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                    synchronized (this) {
912a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                        wait(500);
91380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                    }
914a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                } catch (InterruptedException ignored) {
91580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson                }
91680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
91780c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
91880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
91980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public synchronized void preferenceChange(PreferenceChangeEvent pce) {
92080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            changed++;
92180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            addDispatched = true;
92280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            notifyAll();
92380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
92480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
925a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        public boolean getResult() throws InterruptedException {
92680c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            if (!addDispatched) {
927a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                // TODO: don't know why must add limitation
928a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                wait(100);
92980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
93080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            addDispatched = false;
93180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return result;
93280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
93380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
934a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson        public synchronized int getChanged() throws InterruptedException {
93580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            if (!addDispatched) {
936a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                // TODO: don't know why must add limitation
937a744a0370d151794f5a20a23fa549cc2f34df7d6Jesse Wilson                wait(1000);
93880c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            }
93980c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            addDispatched = false;
94080c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            return changed;
94180c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        }
94280c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson
94380c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson        public void reset() {
94480c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            changed = 0;
94580c9f71990a6655b7b2b43dc1946487e917f0f9dJesse Wilson            result = false;
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