1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
7fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.prefs.tests.java.util.prefs;
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FilePermission;
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.prefs.BackingStoreException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.prefs.Preferences;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class FilePreferencesImplTest extends TestCase {
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private String prevFactory;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private Preferences uroot;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private Preferences sroot;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public FilePreferencesImplTest() {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super();
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        prevFactory = System.getProperty("java.util.prefs.PreferencesFactory");
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty("java.util.prefs.PreferencesFactory", "java.util.prefs.FilePreferencesFactoryImpl");
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot = Preferences.userRoot().node("harmony_test");
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot = Preferences.systemRoot().node("harmony_test");
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() throws Exception {
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (prevFactory != null)
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setProperty("java.util.prefs.PreferencesFactory", prevFactory);
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.removeNode();
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot.removeNode();
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot = null;
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot = null;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testPutGet() throws IOException, BackingStoreException {
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.put("ukey1", "value1");
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("value1", uroot.get("ukey1", null));
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] names = uroot.keys();
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, names.length);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.put("ukey2", "value3");
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("value3", uroot.get("ukey2", null));
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.put("\u4e2d key1", "\u4e2d value1");
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u4e2d value1", uroot.get("\u4e2d key1", null));
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        names = uroot.keys();
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, names.length);
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.flush();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uroot.clear();
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        names = uroot.keys();
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, names.length);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot.put("skey1", "value1");
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("value1", sroot.get("skey1", null));
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot.put("\u4e2d key1", "\u4e2d value1");
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("\u4e2d value1", sroot.get("\u4e2d key1", null));
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testChildNodes() throws Exception {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Preferences child1 = uroot.node("child1");
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Preferences child2 = uroot.node("\u4e2d child2");
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Preferences grandchild = child1.node("grand");
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(grandchild);
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] childNames = uroot.childrenNames();
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, childNames.length);
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = child1.childrenNames();
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, childNames.length);
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = child2.childrenNames();
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, childNames.length);
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child1.removeNode();
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = uroot.childrenNames();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, childNames.length);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child2.removeNode();
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = uroot.childrenNames();
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, childNames.length);
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child1 = sroot.node("child1");
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child2 = sroot.node("child2");
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        grandchild = child1.node("grand");
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = sroot.childrenNames();
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, childNames.length);
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = child1.childrenNames();
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, childNames.length);
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = child2.childrenNames();
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, childNames.length);
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child1.removeNode();
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(child1, sroot.node("child1"));
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(sroot.node("child1"), sroot.node("child1"));
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sroot.node("child1").removeNode();
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = sroot.childrenNames();
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, childNames.length);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        child2.removeNode();
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        childNames = sroot.childrenNames();
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, childNames.length);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
129