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.Ini;
22  import org.ini4j.Ini4jCase;
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 IniFormatterTest 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          Ini ini = Helper.newDwarfsIni();
47          IniHandler handler = EasyMock.createMock(IniHandler.class);
48          Dwarf dwarf;
49  
50          handler.startIni();
51          handler.handleComment(Helper.HEADER_COMMENT);
52          handler.handleComment(" " + Dwarfs.PROP_BASHFUL);
53          dwarf = DwarfsData.bashful;
54          handler.startSection(Dwarfs.PROP_BASHFUL);
55          handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
56          handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
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.endSection();
61          handler.handleComment(" " + Dwarfs.PROP_DOC);
62          dwarf = DwarfsData.doc;
63          handler.startSection(Dwarfs.PROP_DOC);
64          handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
65          handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
66          handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
67          handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
68          handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
69          handler.endSection();
70          handler.handleComment(" " + Dwarfs.PROP_DOPEY);
71          dwarf = DwarfsData.dopey;
72          handler.startSection(Dwarfs.PROP_DOPEY);
73          handler.handleOption(Dwarf.PROP_WEIGHT, DwarfsData.INI_DOPEY_WEIGHT);
74          handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.INI_DOPEY_HEIGHT);
75          handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
76          handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
77          handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
78          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[0]));
79          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[1]));
80          handler.handleOption(Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(dwarf.getFortuneNumber()[2]));
81          handler.endSection();
82          handler.handleComment(" " + Dwarfs.PROP_GRUMPY);
83          dwarf = DwarfsData.grumpy;
84          handler.startSection(Dwarfs.PROP_GRUMPY);
85          handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
86          handler.handleOption(Dwarf.PROP_HEIGHT, DwarfsData.INI_GRUMPY_HEIGHT);
87          handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
88          handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
89          handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
90          handler.endSection();
91          handler.handleComment(" " + Dwarfs.PROP_HAPPY);
92          dwarf = DwarfsData.happy;
93          handler.startSection(Dwarfs.PROP_HAPPY);
94          handler.handleOption(Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight()));
95          handler.handleOption(Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight()));
96          handler.handleOption(Dwarf.PROP_AGE, String.valueOf(dwarf.getAge()));
97          handler.handleOption(Dwarf.PROP_HOME_PAGE, String.valueOf(dwarf.getHomePage()));
98          handler.handleOption(Dwarf.PROP_HOME_DIR, String.valueOf(dwarf.getHomeDir()));
99          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 }