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    }