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.spi;
017
018 import org.easymock.EasyMock;
019
020 import org.ini4j.Config;
021 import org.ini4j.Ini;
022 import org.ini4j.Ini4jCase;
023
024 import org.ini4j.sample.Dwarf;
025 import org.ini4j.sample.Dwarfs;
026
027 import org.ini4j.test.DwarfsData;
028 import org.ini4j.test.Helper;
029
030 import static org.junit.Assert.assertEquals;
031 import static org.junit.Assert.assertSame;
032
033 import org.junit.Test;
034
035 import java.io.PrintWriter;
036 import java.io.StringReader;
037 import java.io.StringWriter;
038
039 public class IniFormatterTest extends Ini4jCase
040 {
041 private static final String NL = System.getProperty("line.separator");
042 private static final String DUMMY = "dummy";
043
044 @Test public void testFormat() throws Exception
045 {
046 Ini ini = Helper.newDwarfsIni();
047 IniHandler handler = EasyMock.createMock(IniHandler.class);
048 Dwarf dwarf;
049
050 handler.startIni();
051 handler.handleComment(Helper.HEADER_COMMENT);
052 handler.handleComment(" " + Dwarfs.PROP_BASHFUL);
053 dwarf = DwarfsData.bashful;
054 handler.startSection(Dwarfs.PROP_BASHFUL);
055 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
056 handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
057 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
058 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
059 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
060 handler.endSection();
061 handler.handleComment(" " + Dwarfs.PROP_DOC);
062 dwarf = DwarfsData.doc;
063 handler.startSection(Dwarfs.PROP_DOC);
064 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
065 handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
066 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
067 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
068 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
069 handler.endSection();
070 handler.handleComment(" " + Dwarfs.PROP_DOPEY);
071 dwarf = DwarfsData.dopey;
072 handler.startSection(Dwarfs.PROP_DOPEY);
073 handler.handleOption(Dwarf.PROP_WEIGHT, DwarfsData.INI_DOPEY_WEIGHT);
074 handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.INI_DOPEY_HEIGHT);
075 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
076 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
077 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
078 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
079 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
080 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
081 handler.endSection();
082 handler.handleComment(" " + Dwarfs.PROP_GRUMPY);
083 dwarf = DwarfsData.grumpy;
084 handler.startSection(Dwarfs.PROP_GRUMPY);
085 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
086 handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.INI_GRUMPY_HEIGHT);
087 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
088 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
089 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
090 handler.endSection();
091 handler.handleComment(" " + Dwarfs.PROP_HAPPY);
092 dwarf = DwarfsData.happy;
093 handler.startSection(Dwarfs.PROP_HAPPY);
094 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
095 handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
096 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
097 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
098 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
099 handler.endSection();
100 handler.handleComment(" " + Dwarfs.PROP_SLEEPY);
101 dwarf = DwarfsData.sleepy;
102 handler.startSection(Dwarfs.PROP_SLEEPY);
103 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
104 handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.INI_SLEEPY_HEIGHT);
105 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
106 handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
107 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
108 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
109 handler.endSection();
110 handler.handleComment(" " + Dwarfs.PROP_SNEEZY);
111 dwarf = DwarfsData.sneezy;
112 handler.startSection(Dwarfs.PROP_SNEEZY);
113 handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
114 handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
115 handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
116 handler.handleOption(Dwarf.PROP_HOME_PAGE, DwarfsData.INI_SNEEZY_HOME_PAGE);
117 handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
118 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
119 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
120 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
121 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[3]));
122 handler.endSection();
123 handler.endIni();
124 EasyMock.replay(handler);
125 verify(ini, handler);
126 }
127
128 @Test public void testNewInstance() throws Exception
129 {
130 StringWriter stringWriter;
131 PrintWriter printWriter;
132 Config cfg = new Config();
133 IniFormatter instance;
134
135 stringWriter = new StringWriter();
136 instance = IniFormatter.newInstance(stringWriter, cfg);
137
138 instance.getOutput().print(DUMMY);
139 instance.getOutput().flush();
140 assertEquals(DUMMY, stringWriter.toString());
141 assertSame(cfg, instance.getConfig());
142
143 //
144 stringWriter = new StringWriter();
145 instance = IniFormatter.newInstance(stringWriter, cfg);
146
147 instance.getOutput().print(DUMMY);
148 instance.getOutput().flush();
149 assertEquals(DUMMY, stringWriter.toString());
150
151 //
152 printWriter = new PrintWriter(stringWriter);
153 instance = IniFormatter.newInstance(printWriter, cfg);
154
155 assertSame(printWriter, instance.getOutput());
156 }
157
158 @Test public void testWithEmptyOption() throws Exception
159 {
160 Config cfg = new Config();
161
162 cfg.setEmptyOption(true);
163 Ini ini = new Ini();
164 Ini.Section sec = ini.add(Dwarfs.PROP_BASHFUL);
165
166 sec.put(Dwarf.PROP_FORTUNE_NUMBER, null);
167 ini.setConfig(cfg);
168 IniHandler handler = EasyMock.createMock(IniHandler.class);
169
170 handler.startIni();
171 handler.startSection(Dwarfs.PROP_BASHFUL);
172 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "");
173 handler.endSection();
174 handler.endIni();
175 EasyMock.replay(handler);
176 verify(ini, handler);
177 }
178
179 @Test public void testWithoutConfig() throws Exception
180 {
181 Ini ini = new Ini();
182 Ini.Section sec = ini.add(Dwarfs.PROP_BASHFUL);
183
184 sec.put(Dwarf.PROP_FORTUNE_NUMBER, null);
185 IniHandler handler = EasyMock.createMock(IniHandler.class);
186
187 handler.startIni();
188 handler.startSection(Dwarfs.PROP_BASHFUL);
189 handler.endSection();
190 handler.endIni();
191 EasyMock.replay(handler);
192 verify(ini, handler);
193 }
194
195 @Test public void testWithStrictOperator() throws Exception
196 {
197 Config cfg = new Config();
198
199 cfg.setStrictOperator(true);
200 Ini ini = new Ini();
201 Ini.Section sec = ini.add(Dwarfs.PROP_BASHFUL);
202
203 sec.put(Dwarf.PROP_AGE, DwarfsData.bashful.age);
204 ini.setConfig(cfg);
205 StringWriter writer = new StringWriter();
206
207 ini.store(writer);
208 StringBuilder exp = new StringBuilder();
209
210 exp.append(IniParser.SECTION_BEGIN);
211 exp.append(Dwarfs.PROP_BASHFUL);
212 exp.append(IniParser.SECTION_END);
213 exp.append(NL);
214 exp.append(Dwarf.PROP_AGE);
215 exp.append('=');
216 exp.append(DwarfsData.bashful.age);
217 exp.append(NL);
218 exp.append(NL);
219 assertEquals(exp.toString(), writer.toString());
220 }
221
222 private void verify(Ini ini, IniHandler mock) throws Exception
223 {
224 StringWriter writer = new StringWriter();
225
226 ini.store(writer);
227 IniParser parser = new IniParser();
228
229 parser.parse(new StringReader(writer.toString()), mock);
230 EasyMock.verify(mock);
231 }
232 }