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 */ 016package org.ini4j.spi; 017 018import org.easymock.EasyMock; 019 020import org.ini4j.Config; 021import org.ini4j.Ini; 022import org.ini4j.Ini4jCase; 023 024import org.ini4j.sample.Dwarf; 025import org.ini4j.sample.Dwarfs; 026 027import org.ini4j.test.DwarfsData; 028import org.ini4j.test.Helper; 029 030import static org.junit.Assert.assertEquals; 031import static org.junit.Assert.assertSame; 032 033import org.junit.Test; 034 035import java.io.PrintWriter; 036import java.io.StringReader; 037import java.io.StringWriter; 038 039public 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}