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.Dwarfs;
019
020 import org.ini4j.test.DwarfsData;
021 import org.ini4j.test.Helper;
022
023 import static org.junit.Assert.assertEquals;
024
025 import org.junit.Test;
026
027 import java.io.ByteArrayInputStream;
028 import java.io.ByteArrayOutputStream;
029 import java.io.File;
030 import java.io.FileNotFoundException;
031 import java.io.InputStreamReader;
032 import java.io.OutputStreamWriter;
033 import java.io.StringReader;
034 import java.io.StringWriter;
035
036 public class IniTest extends Ini4jCase
037 {
038 private static final String COMMENT_ONLY = "# first line\n# second line\n";
039 private static final String COMMENT_ONLY_VALUE = " first line\n second line";
040 private static final String INI_ONE_HEADER = COMMENT_ONLY + "\n\n[section]\nkey=value\n";
041 private static final String COMMENTED_OPTION = COMMENT_ONLY + "\n\n[section]\n;comment\nkey=value\n";
042 private static final String MULTI = "[section]\noption=value\noption=value2\n[section]\noption=value3\noption=value4\noption=value5\n";
043
044 @Test public void testCommentedOption() throws Exception
045 {
046 Ini ini = new Ini(new StringReader(COMMENTED_OPTION));
047
048 assertEquals("comment", ini.get("section").getComment("key"));
049 }
050
051 @Test public void testCommentOnly() throws Exception
052 {
053 Ini ini = new Ini(new StringReader(COMMENT_ONLY));
054
055 assertEquals(COMMENT_ONLY_VALUE, ini.getComment());
056 }
057
058 @Test public void testLoad() throws Exception
059 {
060 Ini ini;
061
062 ini = new Ini(Helper.getResourceURL(Helper.DWARFS_INI));
063 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
064 ini = new Ini(Helper.getResourceStream(Helper.DWARFS_INI));
065 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
066 ini = new Ini(Helper.getResourceReader(Helper.DWARFS_INI));
067 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
068 ini = new Ini(Helper.getSourceFile(Helper.DWARFS_INI));
069 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
070 ini = new Ini();
071 ini.setFile(Helper.getSourceFile(Helper.DWARFS_INI));
072 ini.load();
073 Helper.assertEquals(DwarfsData.dwarfs, ini.as(Dwarfs.class));
074 }
075
076 @Test public void testLoadException() throws Exception
077 {
078 Ini ini = new Ini();
079
080 try
081 {
082 ini.load();
083 missing(FileNotFoundException.class);
084 }
085 catch (FileNotFoundException x)
086 {
087 //
088 }
089 }
090
091 @Test public void testMulti() throws Exception
092 {
093 Ini ini = new Ini(new StringReader(MULTI));
094 Ini.Section sec;
095
096 assertEquals(1, ini.length("section"));
097 assertEquals(5, ini.get("section", 0).length("option"));
098 ini.clear();
099 Config cfg = new Config();
100
101 cfg.setMultiSection(true);
102 ini.setConfig(cfg);
103 ini.load(new StringReader(MULTI));
104 assertEquals(2, ini.get("section", 0).length("option"));
105 assertEquals(3, ini.get("section", 1).length("option"));
106
107 //
108 StringWriter writer = new StringWriter();
109
110 cfg.setMultiOption(false);
111 ini.store(writer);
112 ini.clear();
113 cfg.setMultiOption(true);
114 ini.load(new StringReader(writer.toString()));
115 assertEquals(1, ini.get("section", 0).length("option"));
116 assertEquals(1, ini.get("section", 1).length("option"));
117 assertEquals("value2", ini.get("section", 0).get("option"));
118 assertEquals("value5", ini.get("section", 1).get("option"));
119
120 //
121 ini.clear();
122 cfg.setMultiOption(false);
123 ini.load(new StringReader(MULTI));
124 assertEquals(1, ini.get("section", 0).length("option"));
125 assertEquals(1, ini.get("section", 1).length("option"));
126 }
127
128 @Test public void testOneHeaderOnly() throws Exception
129 {
130 Ini ini = new Ini(new StringReader(INI_ONE_HEADER));
131
132 assertEquals(COMMENT_ONLY_VALUE, ini.getComment());
133 }
134
135 @Test public void testStore() throws Exception
136 {
137 Ini ini = Helper.newDwarfsIni();
138 ByteArrayOutputStream buffer = new ByteArrayOutputStream();
139
140 ini.store(buffer);
141 Ini dup = new Ini();
142
143 dup.load(new ByteArrayInputStream(buffer.toByteArray()));
144 Helper.assertEquals(DwarfsData.dwarfs, dup.as(Dwarfs.class));
145 buffer = new ByteArrayOutputStream();
146 ini.store(new OutputStreamWriter(buffer));
147 dup = new Ini();
148 dup.load(new InputStreamReader(new ByteArrayInputStream(buffer.toByteArray())));
149 Helper.assertEquals(DwarfsData.dwarfs, dup.as(Dwarfs.class));
150
151 //
152 File file = File.createTempFile("test", ".ini");
153
154 file.deleteOnExit();
155 ini.setFile(file);
156 assertEquals(file, ini.getFile());
157 ini.store();
158 dup = new Ini();
159 dup.setFile(file);
160 dup.load();
161 Helper.assertEquals(DwarfsData.dwarfs, dup.as(Dwarfs.class));
162 file.delete();
163 }
164
165 @Test public void testStoreException() throws Exception
166 {
167 Ini ini = new Ini();
168
169 try
170 {
171 ini.store();
172 missing(FileNotFoundException.class);
173 }
174 catch (FileNotFoundException x)
175 {
176 //
177 }
178 }
179
180 @Test public void testWithComment() throws Exception
181 {
182 Ini ini = new Ini();
183
184 ini.load(Helper.getResourceStream(Helper.DWARFS_INI));
185 assertNotNull(ini.getComment());
186 for (Ini.Section sec : ini.values())
187 {
188 assertNotNull(ini.getComment(sec.getName()));
189 }
190 }
191
192 @Test public void testWithoutComment() throws Exception
193 {
194 Ini ini = new Ini();
195 Config cfg = new Config();
196
197 cfg.setComment(false);
198 ini.setConfig(cfg);
199 ini.load(Helper.getResourceStream(Helper.DWARFS_INI));
200 assertNull(ini.getComment());
201 for (Ini.Section sec : ini.values())
202 {
203 assertNull(ini.getComment(sec.getName()));
204 }
205
206 ini = new Ini();
207 ini.setConfig(cfg);
208 ini.setComment("comment");
209 Ini.Section sec = ini.add("section");
210
211 sec.add("option", "value");
212 ini.putComment("section", "section-comment");
213 StringWriter writer = new StringWriter();
214
215 ini.store(writer);
216 assertEquals("[section]\noption = value\n\n", writer.toString());
217 }
218
219 @Test public void testWithoutHeaderComment() throws Exception
220 {
221 Ini ini = new Ini();
222 Config cfg = new Config();
223
224 cfg.setHeaderComment(false);
225 cfg.setComment(true);
226 ini.setConfig(cfg);
227 ini.load(Helper.getResourceStream(Helper.DWARFS_INI));
228 assertNull(ini.getComment());
229 for (Ini.Section sec : ini.values())
230 {
231 assertNotNull(ini.getComment(sec.getName()));
232 }
233
234 ini = new Ini();
235 ini.setConfig(cfg);
236 ini.setComment("comment");
237 Ini.Section sec = ini.add("section");
238
239 sec.add("option", "value");
240 ini.putComment("section", "section-comment");
241 StringWriter writer = new StringWriter();
242
243 ini.store(writer);
244 assertEquals("#section-comment\n[section]\noption = value\n\n", writer.toString());
245 }
246 }