PreferencesTest.java revision b0b81dfb681cf401b3fc108b9abe432ee6736164
1b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath/* Licensed to the Apache Software Foundation (ASF) under one or more
2b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * contributor license agreements.  See the NOTICE file distributed with
3b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * this work for additional information regarding copyright ownership.
4b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * The ASF licenses this file to You under the Apache License, Version 2.0
5b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * (the "License"); you may not use this file except in compliance with
6b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * the License.  You may obtain a copy of the License at
7b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
8b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
9b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
10b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * Unless required by applicable law or agreed to in writing, software
11b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * See the License for the specific language governing permissions and
14b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath * limitations under the License.
15b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath */
16b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
17b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathpackage org.apache.harmony.tests.java.util.prefs;
18b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
19b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.ByteArrayInputStream;
20b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.File;
21b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.IOException;
22b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.InputStream;
23b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.io.OutputStream;
24b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.net.MalformedURLException;
25b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.nio.charset.StandardCharsets;
26b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.AbstractPreferences;
27b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.BackingStoreException;
28b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.InvalidPreferencesFormatException;
29b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.NodeChangeListener;
30b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferenceChangeListener;
31b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.Preferences;
32b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferencesFactory;
33b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport junit.framework.TestCase;
34b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport libcore.io.IoUtils;
35b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
36b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath/**
37b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
38b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath */
39b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathpublic class PreferencesTest extends TestCase {
40b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
41b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private static final String PREFS =
42b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            "<!DOCTYPE preferences SYSTEM \"http://java.sun.com/dtd/preferences.dtd\">" +
43b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "<preferences>" +
44b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                      "<root type=\"user\">" +
45b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                        "<map></map>" +
46b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                      "</root>" +
47b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "</preferences>";
48b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
49b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
50b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private MockInputStream stream ;
51b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private InputStream in;
52b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private PreferencesFactory defaultFactory;
53b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
54b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
55b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void setUp() throws Exception {
56b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        File tmpDir = IoUtils.createTemporaryDirectory("OldAbstractPreferencesTest");
57b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        defaultFactory = Preferences.setPreferencesFactory(
58b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                new AbstractPreferencesTest.TestPreferencesFactory(tmpDir.getAbsolutePath()));
59b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
60b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        in = new ByteArrayInputStream(PREFS.getBytes(StandardCharsets.US_ASCII));
61b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream = new MockInputStream(in);
62b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
63b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
64b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
65b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void tearDown() throws Exception {
66b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences.setPreferencesFactory(defaultFactory);
67b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.close();
68b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
69b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
70b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSystemNodeForPackage() throws Exception {
71b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.systemNodeForPackage(Object.class);
72b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
73b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/lang", p.absolutePath());
74b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
75b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences root = Preferences.systemRoot();
76b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences parent = root.node("java");
77b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(parent, p.parent());
78b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.isUserNode());
79b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("lang", p.name());
80b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("System Preference Node: " + p.absolutePath(), p
81b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
82b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
83b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.childrenNames().length);
84b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.keys().length);
85b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        parent.removeNode();
86b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
87b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.userNodeForPackage(null);
88b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
89b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException e) {
90b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            // Expected
91b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
92b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
93b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
94b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSystemRoot() throws BackingStoreException {
95b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.systemRoot();
96b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
97b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/", p.absolutePath());
98b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(null, p.parent());
99b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.isUserNode());
100b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("", p.name());
101b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("System Preference Node: " + p.absolutePath(), p
102b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
103b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
104b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
105b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testConsts() {
106b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(80, Preferences.MAX_KEY_LENGTH);
107b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(80, Preferences.MAX_NAME_LENGTH);
108b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(8192, Preferences.MAX_VALUE_LENGTH);
109b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
110b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
111b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testUserNodeForPackage() throws BackingStoreException {
112b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.userNodeForPackage(Object.class);
113b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/lang", p.absolutePath());
114b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
115b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences root = Preferences.userRoot();
116b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences parent = root.node("java");
117b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(parent, p.parent());
118b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.isUserNode());
119b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("lang", p.name());
120b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("User Preference Node: " + p.absolutePath(), p.toString());
121b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.childrenNames().length);
122b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.keys().length);
123b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
124b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
125b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.userNodeForPackage(null);
126b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
127b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException e) {
128b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            // Expected
129b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
130b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
131b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
132b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testUserRoot() throws BackingStoreException {
133b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.userRoot();
134b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
135b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/", p.absolutePath());
136b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(null, p.parent());
137b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.isUserNode());
138b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("", p.name());
139b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("User Preference Node: " + p.absolutePath(), p.toString());
140b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
141b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
142b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testImportPreferences() throws Exception {
143b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences prefs = null;
144b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
145b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs = Preferences.userNodeForPackage(PreferencesTest.class);
146b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
147b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs.put("prefskey", "oldvalue");
148b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs.put("prefskey2", "oldvalue2");
149b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            in = PreferencesTest.class
150b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    .getResourceAsStream("/resources/prefs/java/util/prefs/userprefs.xml");
151b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(in);
152b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
153b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs = Preferences.userNodeForPackage(PreferencesTest.class);
154b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals(1, prefs.childrenNames().length);
155b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertTrue(prefs.nodeExists("mock/child/grandson"));
156b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("newvalue", prefs.get("prefskey", null));
157b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("oldvalue2", prefs.get("prefskey2", null));
158b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("newvalue3", prefs.get("prefskey3", null));
159b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
160b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            in = PreferencesTest.class.getResourceAsStream(
161b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "/prefs/java/util/prefs/userprefs-badform.xml");
162b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            try {
163b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                Preferences.importPreferences(in);
164b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                fail("should throw InvalidPreferencesFormatException");
165b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            } catch (InvalidPreferencesFormatException expected) {
166b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
167b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } finally {
168b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            try {
169b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                prefs = Preferences.userNodeForPackage(PreferencesTest.class);
170b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                prefs.removeNode();
171b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            } catch (Exception e) {
172b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
173b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
174b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
175b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
176b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testImportPreferencesException() throws Exception {
177b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
178b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(null);
179b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw MalformedURLException");
180b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (MalformedURLException expected) {
181b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
182b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
183b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] source = new byte[0];
184b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        InputStream in = new ByteArrayInputStream(source);
185b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
186b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(in);
187b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw InvalidPreferencesFormatException");
188b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (InvalidPreferencesFormatException expected) {
189b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
190b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
191b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.setResult(MockInputStream.exception);
192b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
193b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(stream);
194b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IOException");
195b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IOException expected) {
196b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
197b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
198b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.setResult(MockInputStream.runtimeException);
199b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
200b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(stream);
201b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw RuntimeException");
202b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (RuntimeException expected) {
203b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
204b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
205b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
206b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    static class MockInputStream extends InputStream {
207b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
208b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int normal = 0;
209b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
210b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int exception = 1;
211b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
212b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int runtimeException = 2;
213b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
214b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        int result = normal;
215b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
216b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        InputStream wrapper;
217b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
218b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void setResult(int i) {
219b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            result = i;
220b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
221b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
222b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private void checkException() throws IOException {
223b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            switch (result) {
224b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case normal:
225b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    return;
226b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case exception:
227b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    throw new IOException("test");
228b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case runtimeException:
229b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    throw new RuntimeException("test");
230b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
231b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
232b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
233b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public MockInputStream(InputStream in) {
234b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            wrapper = in;
235b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
236b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
237b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
238b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int read() throws IOException {
239b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            checkException();
240b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return wrapper.read();
241b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
242b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
243b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
244b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    static class MockPreferences extends Preferences {
245b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
246b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public MockPreferences() {
247b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            super();
248b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
249b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
250b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
251b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String absolutePath() {
252b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
253b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
254b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
255b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
256b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String[] childrenNames() throws BackingStoreException {
257b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
258b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
259b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
260b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
261b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void clear() throws BackingStoreException {
262b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
263b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
264b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
265b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void exportNode(OutputStream ostream) throws IOException,
266b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                BackingStoreException {
267b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
268b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
269b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
270b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void exportSubtree(OutputStream ostream) throws IOException,
271b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                BackingStoreException {
272b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
273b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
274b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
275b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void flush() throws BackingStoreException {
276b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
277b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
278b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
279b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String get(String key, String deflt) {
280b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
281b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
282b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
283b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
284b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean getBoolean(String key, boolean deflt) {
285b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
286b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
287b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
288b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
289b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public byte[] getByteArray(String key, byte[] deflt) {
290b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
291b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
292b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
293b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
294b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public double getDouble(String key, double deflt) {
295b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
296b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
297b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
298b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
299b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public float getFloat(String key, float deflt) {
300b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
301b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
302b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
303b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
304b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int getInt(String key, int deflt) {
305b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
306b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
307b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
308b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
309b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public long getLong(String key, long deflt) {
310b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
311b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
312b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
313b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
314b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean isUserNode() {
315b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
316b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
317b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
318b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
319b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String[] keys() throws BackingStoreException {
320b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
321b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
322b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
323b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
324b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String name() {
325b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
326b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
327b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
328b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
329b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences node(String name) {
330b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
331b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
332b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
333b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
334b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean nodeExists(String name) throws BackingStoreException {
335b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
336b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
337b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
338b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
339b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences parent() {
340b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
341b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
342b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
343b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
344b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void put(String key, String value) {
345b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
346b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
347b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
348b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
349b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putBoolean(String key, boolean value) {
350b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
351b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
352b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
353b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
354b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putByteArray(String key, byte[] value) {
355b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
356b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
357b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
358b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
359b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putDouble(String key, double value) {
360b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
361b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
362b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
363b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
364b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putFloat(String key, float value) {
365b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
366b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
367b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
368b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
369b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putInt(String key, int value) {
370b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
371b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
372b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
373b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
374b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putLong(String key, long value) {
375b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
376b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
377b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
378b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
379b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void remove(String key) {
380b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
381b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
382b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
383b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
384b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removeNode() throws BackingStoreException {
385b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
386b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
387b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
388b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
389b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void addNodeChangeListener(NodeChangeListener ncl) {
390b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
391b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
392b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
393b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
394b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void addPreferenceChangeListener(PreferenceChangeListener pcl) {
395b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
396b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
397b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
398b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
399b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removeNodeChangeListener(NodeChangeListener ncl) {
400b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
401b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
402b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
403b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
404b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removePreferenceChangeListener(PreferenceChangeListener pcl) {
405b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
406b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
407b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
408b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
409b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void sync() throws BackingStoreException {
410b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
411b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
412b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
413b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
414b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String toString() {
415b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
416b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
417b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
418b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
419b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
420b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath}
421