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;
2444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniakimport java.io.FileOutputStream;
25b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.net.MalformedURLException;
26b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.nio.charset.StandardCharsets;
27b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.AbstractPreferences;
28b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.BackingStoreException;
29b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.InvalidPreferencesFormatException;
30b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.NodeChangeListener;
31b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferenceChangeListener;
32b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.Preferences;
33b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport java.util.prefs.PreferencesFactory;
34b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport junit.framework.TestCase;
35b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathimport libcore.io.IoUtils;
36b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
37b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath/**
38b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath *
39b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath */
40b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamathpublic class PreferencesTest extends TestCase {
41b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
42b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private static final String PREFS =
43b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            "<!DOCTYPE preferences SYSTEM \"http://java.sun.com/dtd/preferences.dtd\">" +
44b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "<preferences>" +
45b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                      "<root type=\"user\">" +
46b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                        "<map></map>" +
47b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                      "</root>" +
48b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "</preferences>";
49b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
50b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
51b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private MockInputStream stream ;
52b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private InputStream in;
53b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    private PreferencesFactory defaultFactory;
5444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak    private File backendDir;
55b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
56b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
57b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void setUp() throws Exception {
5844d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        backendDir = IoUtils.createTemporaryDirectory("OldAbstractPreferencesTest");
59b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        defaultFactory = Preferences.setPreferencesFactory(
6044d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak                new AbstractPreferencesTest.TestPreferencesFactory(backendDir.getAbsolutePath()));
61b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
62b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        in = new ByteArrayInputStream(PREFS.getBytes(StandardCharsets.US_ASCII));
63b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream = new MockInputStream(in);
64b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
65b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
66b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    @Override
67b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    protected void tearDown() throws Exception {
68b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences.setPreferencesFactory(defaultFactory);
69b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.close();
70b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
71b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
72b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSystemNodeForPackage() throws Exception {
73b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.systemNodeForPackage(Object.class);
74b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
75b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/lang", p.absolutePath());
76b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
77b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences root = Preferences.systemRoot();
78b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences parent = root.node("java");
79b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(parent, p.parent());
80b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.isUserNode());
81b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("lang", p.name());
82b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("System Preference Node: " + p.absolutePath(), p
83b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
84b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
85b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.childrenNames().length);
86b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.keys().length);
87b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        parent.removeNode();
88b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
89b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.userNodeForPackage(null);
90b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
91b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException e) {
92b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            // Expected
93b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
94b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
95b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
96b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testSystemRoot() throws BackingStoreException {
97b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.systemRoot();
98b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
99b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/", p.absolutePath());
100b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(null, p.parent());
101b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertFalse(p.isUserNode());
102b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("", p.name());
103b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("System Preference Node: " + p.absolutePath(), p
104b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                .toString());
105b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
106b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
107b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testConsts() {
108b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(80, Preferences.MAX_KEY_LENGTH);
109b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(80, Preferences.MAX_NAME_LENGTH);
110b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(8192, Preferences.MAX_VALUE_LENGTH);
111b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
112b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
113b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testUserNodeForPackage() throws BackingStoreException {
114b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.userNodeForPackage(Object.class);
115b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/java/lang", p.absolutePath());
116b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
117b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences root = Preferences.userRoot();
118b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences parent = root.node("java");
119b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(parent, p.parent());
120b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.isUserNode());
121b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("lang", p.name());
122b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("User Preference Node: " + p.absolutePath(), p.toString());
123b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.childrenNames().length);
124b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals(0, p.keys().length);
125b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
126b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
127b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.userNodeForPackage(null);
128b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw NullPointerException");
129b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (NullPointerException e) {
130b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            // Expected
131b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
132b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
133b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
134b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testUserRoot() throws BackingStoreException {
135b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences p = Preferences.userRoot();
136b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p instanceof AbstractPreferences);
137b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("/", p.absolutePath());
138b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertSame(null, p.parent());
139b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertTrue(p.isUserNode());
140b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("", p.name());
141b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        assertEquals("User Preference Node: " + p.absolutePath(), p.toString());
142b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
143b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
144b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testImportPreferences() throws Exception {
145b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        Preferences prefs = null;
146b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
147b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs = Preferences.userNodeForPackage(PreferencesTest.class);
148b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
149b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs.put("prefskey", "oldvalue");
150b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs.put("prefskey2", "oldvalue2");
151b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            in = PreferencesTest.class
152b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    .getResourceAsStream("/resources/prefs/java/util/prefs/userprefs.xml");
153b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(in);
154b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
155b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            prefs = Preferences.userNodeForPackage(PreferencesTest.class);
156b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals(1, prefs.childrenNames().length);
157b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertTrue(prefs.nodeExists("mock/child/grandson"));
158b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("newvalue", prefs.get("prefskey", null));
159b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("oldvalue2", prefs.get("prefskey2", null));
160b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            assertEquals("newvalue3", prefs.get("prefskey3", null));
161b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
162b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            in = PreferencesTest.class.getResourceAsStream(
163b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    "/prefs/java/util/prefs/userprefs-badform.xml");
164b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            try {
165b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                Preferences.importPreferences(in);
166b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                fail("should throw InvalidPreferencesFormatException");
167b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            } catch (InvalidPreferencesFormatException expected) {
168b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
169b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } finally {
170b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            try {
171b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                prefs = Preferences.userNodeForPackage(PreferencesTest.class);
172b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                prefs.removeNode();
173b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            } catch (Exception e) {
174b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
175b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
176b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
177b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
178b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    public void testImportPreferencesException() throws Exception {
179b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
180b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(null);
18196b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath            fail("should throw InvalidPreferencesFormatException");
18296b40e87c32023084d7153360b1fa0c44c598095Narayan Kamath        } catch (InvalidPreferencesFormatException expected) {
183b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
184b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
185b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        byte[] source = new byte[0];
186b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        InputStream in = new ByteArrayInputStream(source);
187b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
188b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(in);
189b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw InvalidPreferencesFormatException");
190b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (InvalidPreferencesFormatException expected) {
191b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
192b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
193b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.setResult(MockInputStream.exception);
194b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
195b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(stream);
196b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw IOException");
197b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (IOException expected) {
198b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
199b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
200b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        stream.setResult(MockInputStream.runtimeException);
201b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        try {
202b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            Preferences.importPreferences(stream);
203b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            fail("should throw RuntimeException");
204b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        } catch (RuntimeException expected) {
205b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
206b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
207b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
208b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    static class MockInputStream extends InputStream {
209b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
210b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int normal = 0;
211b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
212b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int exception = 1;
213b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
214b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        static final int runtimeException = 2;
215b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
216b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        int result = normal;
217b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
218b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        InputStream wrapper;
219b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
220b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void setResult(int i) {
221b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            result = i;
222b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
223b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
224b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        private void checkException() throws IOException {
225b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            switch (result) {
226b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case normal:
227b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    return;
228b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case exception:
229b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    throw new IOException("test");
230b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                case runtimeException:
231b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                    throw new RuntimeException("test");
232b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            }
233b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
234b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
235b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public MockInputStream(InputStream in) {
236b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            wrapper = in;
237b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
238b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
239b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
240b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int read() throws IOException {
241b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            checkException();
242b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return wrapper.read();
243b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
244b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
245b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
246b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    static class MockPreferences extends Preferences {
247b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
248b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public MockPreferences() {
249b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            super();
250b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
251b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
252b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
253b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String absolutePath() {
254b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
255b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
256b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
257b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
258b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String[] childrenNames() throws BackingStoreException {
259b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
260b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
261b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
262b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
263b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void clear() throws BackingStoreException {
264b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
265b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
266b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
267b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void exportNode(OutputStream ostream) throws IOException,
268b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                BackingStoreException {
269b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
270b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
271b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
272b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void exportSubtree(OutputStream ostream) throws IOException,
273b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath                BackingStoreException {
274b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
275b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
276b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
277b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void flush() throws BackingStoreException {
278b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
279b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
280b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
281b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String get(String key, String deflt) {
282b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
283b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
284b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
285b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
286b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean getBoolean(String key, boolean deflt) {
287b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
288b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
289b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
290b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
291b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public byte[] getByteArray(String key, byte[] deflt) {
292b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
293b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
294b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
295b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
296b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public double getDouble(String key, double deflt) {
297b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
298b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
299b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
300b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
301b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public float getFloat(String key, float deflt) {
302b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
303b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
304b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
305b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
306b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public int getInt(String key, int deflt) {
307b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
308b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
309b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
310b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
311b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public long getLong(String key, long deflt) {
312b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return 0;
313b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
314b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
315b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
316b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean isUserNode() {
317b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
318b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
319b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
320b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
321b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String[] keys() throws BackingStoreException {
322b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
323b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
324b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
325b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
326b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String name() {
327b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
328b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
329b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
330b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
331b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences node(String name) {
332b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
333b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
334b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
335b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
336b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public boolean nodeExists(String name) throws BackingStoreException {
337b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return false;
338b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
339b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
340b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
341b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public Preferences parent() {
342b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
343b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
344b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
345b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
346b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void put(String key, String value) {
347b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
348b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
349b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
350b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
351b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putBoolean(String key, boolean value) {
352b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
353b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
354b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
355b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
356b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putByteArray(String key, byte[] value) {
357b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
358b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
359b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
360b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
361b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putDouble(String key, double value) {
362b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
363b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
364b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
365b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
366b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putFloat(String key, float value) {
367b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
368b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
369b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
370b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
371b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putInt(String key, int value) {
372b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
373b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
374b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
375b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
376b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void putLong(String key, long value) {
377b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
378b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
379b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
380b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
381b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void remove(String key) {
382b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
383b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
384b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
385b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
386b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removeNode() throws BackingStoreException {
387b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
388b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
389b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
390b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
391b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void addNodeChangeListener(NodeChangeListener ncl) {
392b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
393b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
394b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
395b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
396b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void addPreferenceChangeListener(PreferenceChangeListener pcl) {
397b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
398b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
399b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
400b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
401b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removeNodeChangeListener(NodeChangeListener ncl) {
402b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
403b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
404b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
405b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
406b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void removePreferenceChangeListener(PreferenceChangeListener pcl) {
407b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
408b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
409b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
410b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
411b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public void sync() throws BackingStoreException {
412b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
413b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
414b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
415b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        @Override
416b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        public String toString() {
417b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath            return null;
418b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath        }
419b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
420b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath    }
421b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath
42244d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak    // b/27645233
42344d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak    public void testReadingFromBackendCache() throws Exception {
42444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // Create a preferences filesystem backend storage file.
42544d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // It emulates a situation where we saved some data in the past,
42644d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // restarted the application and we're trying to read it.
42744d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        //
42844d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // We need a package without the existing backing file (so a package that
42944d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // wasn't used in this test case), java.io is a good candidate.
43044d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        File backendFile = new File(backendDir, "/user/java/io/prefs.xml");
43144d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        InputStream inputData = PreferencesTest.class
43244d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            .getResourceAsStream("/resources/prefs/java/util/prefs/backendread.xml");
43344d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        assertTrue(new File(backendDir, "/user/java/io").mkdirs());
43444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        assertTrue(backendFile.createNewFile());
43544d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak
43644d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // Copy the example content (one test=test1 entry) to a storage file
43744d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        FileOutputStream fos = new FileOutputStream(backendFile);
43844d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        try {
43944d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            byte[] buffer = new byte[1024];
44044d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            int length;
44144d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            while ((length = inputData.read(buffer)) > 0) {
44244d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak                fos.write(buffer, 0, length);
44344d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            }
44444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        } finally {
44544d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            fos.close();
44644d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak            inputData.close();
44744d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        }
44844d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak
44944d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        Preferences prefs = Preferences.userNodeForPackage(OutputStream.class);
45044d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // Any exception from reading the file will be swallowed and ignored,
45144d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        // only result we will see is a lack of requested key-value pair.
45244d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak        assertEquals("test1", prefs.get("test",""));
45344d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak    }
45444d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak
45544d29b0a9012a66f5db5a8130017568a55c11668Przemyslaw Szczepaniak
456b0b81dfb681cf401b3fc108b9abe432ee6736164Narayan Kamath}
457