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