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.Ini4jCase; 022import org.ini4j.Options; 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 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}