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.Ini4jCase;
022 import org.ini4j.Options;
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 OptionsFormatterTest 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 Options opts = Helper.newDwarfsOpt();
047 OptionsHandler handler = EasyMock.createMock(OptionsHandler.class);
048 Dwarf dwarf;
049 String prefix;
050
051 handler.startOptions();
052 handler.handleComment(Helper.HEADER_COMMENT);
053 handler.handleComment((String) EasyMock.anyObject());
054 dwarf = DwarfsData.dopey;
055 handler.handleOption(Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
056 handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
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.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "11");
061 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "33");
062 handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "55");
063 //
064
065 //
066 handler.handleComment(" " + Dwarfs.PROP_BASHFUL);
067 dwarf = DwarfsData.bashful;
068 prefix = Dwarfs.PROP_BASHFUL + ".";
069
070 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
071 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
072 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
073 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
074 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
075 handler.handleComment(" " + Dwarfs.PROP_DOC);
076 dwarf = DwarfsData.doc;
077 prefix = Dwarfs.PROP_DOC + ".";
078
079 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
080 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
081 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
082 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
083 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
084 handler.handleComment(" " + Dwarfs.PROP_DOPEY);
085 dwarf = DwarfsData.dopey;
086 prefix = Dwarfs.PROP_DOPEY + ".";
087
088 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
089 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
090 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
091 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
092 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
093 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
094 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
095 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
096 handler.handleComment(" " + Dwarfs.PROP_GRUMPY);
097 dwarf = DwarfsData.grumpy;
098 prefix = Dwarfs.PROP_GRUMPY + ".";
099
100 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
101 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_GRUMPY_HEIGHT);
102 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
103 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
104 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
105 handler.handleComment(" " + Dwarfs.PROP_HAPPY);
106 dwarf = DwarfsData.happy;
107 prefix = Dwarfs.PROP_HAPPY + ".";
108
109 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
110 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
111 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
112 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
113 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
114 handler.handleComment(" " + Dwarfs.PROP_SLEEPY);
115 dwarf = DwarfsData.sleepy;
116 prefix = Dwarfs.PROP_SLEEPY + ".";
117
118 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
119 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_SLEEPY_HEIGHT);
120 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
121 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
122 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
123 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
124 handler.handleComment(" " + Dwarfs.PROP_SNEEZY);
125 dwarf = DwarfsData.sneezy;
126 prefix = Dwarfs.PROP_SNEEZY + ".";
127
128 handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
129 handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
130 handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
131 handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, DwarfsData.OPT_SNEEZY_HOME_PAGE);
132 handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
133 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
134 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
135 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
136 handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[3]));
137 handler.endOptions();
138
139 //
140 EasyMock.replay(handler);
141 verify(opts, handler);
142 }
143
144 @Test public void testNewInstance() throws Exception
145 {
146 StringWriter stringWriter;
147 PrintWriter printWriter;
148
149 ;
150 Config cfg = new Config();
151 OptionsFormatter instance;
152
153 stringWriter = new StringWriter();
154 instance = OptionsFormatter.newInstance(stringWriter, cfg);
155
156 instance.getOutput().print(DUMMY);
157 instance.getOutput().flush();
158 assertEquals(DUMMY, stringWriter.toString());
159 assertSame(cfg, instance.getConfig());
160
161 //
162 stringWriter = new StringWriter();
163 instance = OptionsFormatter.newInstance(stringWriter, cfg);
164
165 instance.getOutput().print(DUMMY);
166 instance.getOutput().flush();
167 assertEquals(DUMMY, stringWriter.toString());
168
169 //
170 printWriter = new PrintWriter(stringWriter);
171 instance = OptionsFormatter.newInstance(printWriter, cfg);
172
173 assertSame(printWriter, instance.getOutput());
174 }
175
176 @Test public void testWithStrictOperatorEmptyOptions() throws Exception
177 {
178 Config cfg = new Config();
179
180 cfg.setStrictOperator(true);
181 cfg.setEmptyOption(true);
182 Options opts = new Options();
183
184 opts.setConfig(cfg);
185 opts.put(Dwarf.PROP_AGE, DwarfsData.bashful.age);
186 opts.put(Dwarf.PROP_WEIGHT, null);
187 StringWriter writer = new StringWriter();
188
189 opts.store(writer);
190 StringBuilder exp = new StringBuilder();
191
192 exp.append(Dwarf.PROP_AGE);
193 exp.append('=');
194 exp.append(DwarfsData.bashful.age);
195 exp.append(NL);
196 exp.append(Dwarf.PROP_WEIGHT);
197 exp.append('=');
198 exp.append(NL);
199 assertEquals(exp.toString(), writer.toString());
200 }
201
202 @Test public void testWithStrictOperatorNoEmptyOptions() throws Exception
203 {
204 Config cfg = new Config();
205
206 cfg.setStrictOperator(true);
207 cfg.setEmptyOption(false);
208 Options opts = new Options();
209
210 opts.setConfig(cfg);
211 opts.put(Dwarf.PROP_AGE, DwarfsData.bashful.age);
212 opts.put(Dwarf.PROP_WEIGHT, null);
213 StringWriter writer = new StringWriter();
214
215 opts.store(writer);
216 StringBuilder exp = new StringBuilder();
217
218 exp.append(Dwarf.PROP_AGE);
219 exp.append('=');
220 exp.append(DwarfsData.bashful.age);
221 exp.append(NL);
222 assertEquals(exp.toString(), writer.toString());
223 }
224
225 private void verify(Options opts, OptionsHandler mock) throws Exception
226 {
227 StringWriter writer = new StringWriter();
228
229 opts.store(writer);
230 OptionsParser parser = new OptionsParser();
231
232 parser.parse(new StringReader(writer.toString()), mock);
233 EasyMock.verify(mock);
234 }
235 }