View Javadoc

1   /*
2    * Copyright 2005,2009 Ivan SZKIBA
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.ini4j.spi;
17  
18  import org.easymock.EasyMock;
19  
20  import org.ini4j.Config;
21  import org.ini4j.Ini4jCase;
22  import org.ini4j.Options;
23  
24  import org.ini4j.sample.Dwarf;
25  import org.ini4j.sample.Dwarfs;
26  
27  import org.ini4j.test.DwarfsData;
28  import org.ini4j.test.Helper;
29  
30  import static org.junit.Assert.assertEquals;
31  import static org.junit.Assert.assertSame;
32  
33  import org.junit.Test;
34  
35  import java.io.PrintWriter;
36  import java.io.StringReader;
37  import java.io.StringWriter;
38  
39  public class OptionsFormatterTest extends Ini4jCase
40  {
41      private static final String NL = System.getProperty("line.separator");
42      private static final String DUMMY = "dummy";
43  
44      @Test public void testFormat() throws Exception
45      {
46          Options opts = Helper.newDwarfsOpt();
47          OptionsHandler handler = EasyMock.createMock(OptionsHandler.class);
48          Dwarf dwarf;
49          String prefix;
50  
51          handler.startOptions();
52          handler.handleComment(Helper.HEADER_COMMENT);
53          handler.handleComment((String) EasyMock.anyObject());
54          dwarf = DwarfsData.dopey;
55          handler.handleOption(Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
56          handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
57          handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
58          handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
59          handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
60          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "11");
61          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "33");
62          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, "55");
63  //
64  
65          //
66          handler.handleComment(" " + Dwarfs.PROP_BASHFUL);
67          dwarf = DwarfsData.bashful;
68          prefix = Dwarfs.PROP_BASHFUL + ".";
69  
70          handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
71          handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
72          handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
73          handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
74          handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
75          handler.handleComment(" " + Dwarfs.PROP_DOC);
76          dwarf = DwarfsData.doc;
77          prefix = Dwarfs.PROP_DOC + ".";
78  
79          handler.handleOption(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
80          handler.handleOption(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
81          handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
82          handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
83          handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
84          handler.handleComment(" " + Dwarfs.PROP_DOPEY);
85          dwarf = DwarfsData.dopey;
86          prefix = Dwarfs.PROP_DOPEY + ".";
87  
88          handler.handleOption(prefix + Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT);
89          handler.handleOption(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT);
90          handler.handleOption(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
91          handler.handleOption(prefix + Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
92          handler.handleOption(prefix + Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
93          handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
94          handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
95          handler.handleOption(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
96          handler.handleComment(" " + Dwarfs.PROP_GRUMPY);
97          dwarf = DwarfsData.grumpy;
98          prefix = Dwarfs.PROP_GRUMPY + ".";
99  
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 }