001 /*
002 * Copyright 2005,2009 Ivan SZKIBA
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.ini4j;
017
018 import org.ini4j.sample.Dwarf;
019 import org.ini4j.sample.Dwarfs;
020
021 import org.ini4j.spi.BeanAccess;
022 import org.ini4j.spi.BeanTool;
023
024 import org.ini4j.test.DwarfsData;
025 import org.ini4j.test.Helper;
026 import org.ini4j.test.TaleData;
027
028 import static org.junit.Assert.assertArrayEquals;
029 import static org.junit.Assert.assertEquals;
030 import static org.junit.Assert.assertNotNull;
031 import static org.junit.Assert.assertNull;
032 import static org.junit.Assert.assertSame;
033 import static org.junit.Assert.fail;
034
035 import org.junit.Test;
036
037 import java.util.prefs.Preferences;
038
039 public class IniPreferencesTest extends Ini4jCase
040 {
041 private static final String DUMMY = "dummy";
042
043 @Test public void testConstructor() throws Exception
044 {
045 Ini ini = Helper.newDwarfsIni();
046 IniPreferences prefs = new IniPreferences(ini);
047
048 assertSame(ini, prefs.getIni());
049 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
050 prefs = new IniPreferences(Helper.getResourceStream(Helper.DWARFS_INI));
051 Helper.assertEquals(DwarfsData.doc, newDwarf(prefs.node(Dwarfs.PROP_DOC)));
052 prefs = new IniPreferences(Helper.getResourceReader(Helper.DWARFS_INI));
053 Helper.assertEquals(DwarfsData.happy, newDwarf(prefs.node(Dwarfs.PROP_HAPPY)));
054 prefs = new IniPreferences(Helper.getResourceURL(Helper.DWARFS_INI));
055 Helper.assertEquals(DwarfsData.sleepy, newDwarf(prefs.node(Dwarfs.PROP_SLEEPY)));
056 }
057
058 @Test public void testMisc() throws Exception
059 {
060 Ini ini = new Ini();
061 IniPreferences prefs = new IniPreferences(ini);
062
063 // do nothing, but doesn't throw exception
064 prefs.sync();
065 prefs.flush();
066
067 // node & key count
068 assertEquals(0, prefs.keysSpi().length);
069 assertEquals(0, prefs.childrenNamesSpi().length);
070
071 // childNode for new and for existing section
072 assertNotNull(prefs.node(Dwarfs.PROP_DOC));
073 assertEquals(1, prefs.childrenNamesSpi().length);
074 ini.add(Dwarfs.PROP_HAPPY);
075 assertNotNull(prefs.node(Dwarfs.PROP_HAPPY));
076 assertEquals(2, prefs.childrenNamesSpi().length);
077
078 // SectionPreferences
079 IniPreferences.SectionPreferences sec = (IniPreferences.SectionPreferences) prefs.node(Dwarfs.PROP_DOC);
080
081 assertEquals(0, sec.childrenNamesSpi().length);
082
083 // do nothing, but doesn't throw exception
084 sec.sync();
085 sec.syncSpi();
086 sec.flush();
087 sec.flushSpi();
088
089 // empty
090 assertEquals(0, sec.keysSpi().length);
091
092 // add one key
093 sec.put(Dwarf.PROP_AGE, "87");
094 sec.flush();
095 assertEquals("87", sec.getSpi(Dwarf.PROP_AGE));
096
097 // has one key
098 assertEquals(1, sec.keysSpi().length);
099
100 // remove key
101 sec.remove(Dwarf.PROP_AGE);
102 sec.flush();
103
104 // has 0 key
105 assertEquals(0, sec.keysSpi().length);
106 sec.removeNode();
107 prefs.flush();
108 assertNull(ini.get(Dwarfs.PROP_DOC));
109 }
110
111 @Test public void testTaleTree() throws Exception
112 {
113 Ini ini = Helper.newTaleIni();
114 IniPreferences prefs = new IniPreferences(ini);
115 Preferences dwarfs = prefs.node(TaleData.PROP_DWARFS);
116
117 Helper.assertEquals(DwarfsData.doc, newDwarf(dwarfs.node(Dwarfs.PROP_DOC)));
118 assertArrayEquals(DwarfsData.dwarfNames, dwarfs.childrenNames());
119 assertEquals(1, prefs.childrenNames().length);
120 }
121
122 @Test public void testTree() throws Exception
123 {
124 Ini ini = new Ini();
125 IniPreferences prefs = new IniPreferences(ini);
126 IniPreferences.SectionPreferences sec = (IniPreferences.SectionPreferences) prefs.node(Dwarfs.PROP_DOC);
127 Preferences child = sec.node(DUMMY);
128
129 assertNotNull(child);
130 assertNotNull(sec.node(DUMMY));
131 assertNotNull(ini.get(Dwarfs.PROP_DOC).getChild(DUMMY));
132 assertEquals(1, prefs.childrenNames().length);
133 }
134
135 @SuppressWarnings("empty-statement")
136 @Test public void testUnsupported() throws Exception
137 {
138 Ini ini = new Ini();
139 IniPreferences prefs = new IniPreferences(ini);
140
141 try
142 {
143 prefs.getSpi(DUMMY);
144 fail();
145 }
146 catch (UnsupportedOperationException x)
147 {
148 ;
149 }
150
151 try
152 {
153 prefs.putSpi(DUMMY, DUMMY);
154 fail();
155 }
156 catch (UnsupportedOperationException x)
157 {
158 ;
159 }
160
161 try
162 {
163 prefs.removeNodeSpi();
164 fail();
165 }
166 catch (UnsupportedOperationException x)
167 {
168 ;
169 }
170
171 try
172 {
173 prefs.removeSpi(DUMMY);
174 fail();
175 }
176 catch (UnsupportedOperationException x)
177 {
178 ;
179 }
180 }
181
182 private Dwarf newDwarf(Preferences node)
183 {
184 return BeanTool.getInstance().proxy(Dwarf.class, new Access(node));
185 }
186
187 public static class Access implements BeanAccess
188 {
189 private final Preferences _node;
190
191 public Access(Preferences node)
192 {
193 _node = node;
194 }
195
196 public void propAdd(String propertyName, String value)
197 {
198 throw new UnsupportedOperationException("Not supported yet.");
199 }
200
201 public String propDel(String propertyName)
202 {
203 throw new UnsupportedOperationException("Not supported yet.");
204 }
205
206 public String propGet(String propertyName)
207 {
208 return _node.get(propertyName, null);
209 }
210
211 public String propGet(String propertyName, int index)
212 {
213 return (index == 0) ? propGet(propertyName) : null;
214 }
215
216 public int propLength(String propertyName)
217 {
218 return (propGet(propertyName) == null) ? 0 : 1;
219 }
220
221 public String propSet(String propertyName, String value)
222 {
223 throw new UnsupportedOperationException("Not supported yet.");
224 }
225
226 public String propSet(String propertyName, String value, int index)
227 {
228 throw new UnsupportedOperationException("Not supported yet.");
229 }
230 }
231 }