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.test; 017 018import org.ini4j.Config; 019import org.ini4j.Ini; 020import org.ini4j.OptionMap; 021import org.ini4j.Options; 022import org.ini4j.Profile; 023import org.ini4j.Reg; 024import org.ini4j.Registry; 025 026import org.ini4j.sample.Dwarf; 027import org.ini4j.sample.Dwarfs; 028 029import org.ini4j.spi.IniFormatter; 030import org.ini4j.spi.IniParser; 031 032import org.ini4j.test.DwarfsData.DwarfData; 033 034import org.junit.Assert; 035 036import java.io.File; 037import java.io.InputStream; 038import java.io.InputStreamReader; 039import java.io.Reader; 040 041import java.net.URL; 042 043import java.util.Properties; 044 045public class Helper 046{ 047 private static final String RESOURCE_PREFIX = "org/ini4j/sample/"; 048 private static final File _sourceDir = new File(System.getProperty("basedir") + "/src/test/java/"); 049 private static final File _targetDir = new File(System.getProperty("basedir") + "/target"); 050 public static final String DWARFS_INI = RESOURCE_PREFIX + "dwarfs.ini"; 051 public static final String TALE_INI = RESOURCE_PREFIX + "tale.ini"; 052 public static final String DWARFS_OPT = RESOURCE_PREFIX + "dwarfs.opt"; 053 public static final String DWARFS_REG = RESOURCE_PREFIX + "dwarfs.reg"; 054 public static final String TEST_REG = "org/ini4j/mozilla.reg"; 055 public static final String DWARFS_REG_PATH = Reg.Hive.HKEY_CURRENT_USER + "\\Software\\ini4j-test"; 056 public static final float DELTA = 0.00000001f; 057 private static final String[] CONFIG_PROPERTIES = 058 { 059 Config.PROP_EMPTY_OPTION, Config.PROP_GLOBAL_SECTION, Config.PROP_GLOBAL_SECTION_NAME, Config.PROP_INCLUDE, 060 Config.PROP_LOWER_CASE_OPTION, Config.PROP_LOWER_CASE_SECTION, Config.PROP_MULTI_OPTION, Config.PROP_MULTI_SECTION, 061 Config.PROP_STRICT_OPERATOR, Config.PROP_UNNAMED_SECTION, Config.PROP_ESCAPE 062 }; 063 private static final String[] FACTORY_PROPERTIES = { IniFormatter.class.getName(), IniParser.class.getName() }; 064 public static final String HEADER_COMMENT = " Copyright 2005,2009 Ivan SZKIBA\n" + "\n" 065 + " Licensed under the Apache License, Version 2.0 (the \"License\");\n" 066 + " you may not use this file except in compliance with the License.\n" + " You may obtain a copy of the License at\n" + "\n" 067 + " http://www.apache.org/licenses/LICENSE-2.0\n" + "\n" 068 + " Unless required by applicable law or agreed to in writing, software\n" 069 + " distributed under the License is distributed on an \"AS IS\" BASIS,\n" 070 + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" 071 + " See the License for the specific language governing permissions and\n" + " limitations under the License."; 072 073 private Helper() 074 { 075 } 076 077 public static File getBuildDirectory() 078 { 079 return _targetDir; 080 } 081 082 public static Reader getResourceReader(String path) throws Exception 083 { 084 return new InputStreamReader(getResourceURL(path).openStream()); 085 } 086 087 public static InputStream getResourceStream(String path) throws Exception 088 { 089 return getResourceURL(path).openStream(); 090 } 091 092 public static URL getResourceURL(String path) throws Exception 093 { 094 return Helper.class.getClassLoader().getResource(path); 095 } 096 097 public static File getSourceFile(String path) throws Exception 098 { 099 return new File(_sourceDir, path).getCanonicalFile(); 100 } 101 102 public static void addDwarf(OptionMap opts, DwarfData dwarf) 103 { 104 addDwarf(opts, dwarf, true); 105 } 106 107 public static Profile.Section addDwarf(Profile prof, DwarfData dwarf) 108 { 109 Profile.Section s = prof.add(dwarf.name); 110 111 inject(s, dwarf, ""); 112 if (dwarf.name.equals(Dwarfs.PROP_DOPEY)) 113 { 114 s.put(Dwarf.PROP_WEIGHT, DwarfsData.INI_DOPEY_WEIGHT, 0); 115 s.put(Dwarf.PROP_HEIGHT, DwarfsData.INI_DOPEY_HEIGHT, 0); 116 } 117 else if (dwarf.name.equals(Dwarfs.PROP_GRUMPY)) 118 { 119 s.put(Dwarf.PROP_HEIGHT, DwarfsData.INI_GRUMPY_HEIGHT, 0); 120 } 121 else if (dwarf.name.equals(Dwarfs.PROP_SLEEPY)) 122 { 123 s.put(Dwarf.PROP_HEIGHT, DwarfsData.INI_SLEEPY_HEIGHT, 0); 124 } 125 else if (dwarf.name.equals(Dwarfs.PROP_SNEEZY)) 126 { 127 s.put(Dwarf.PROP_HOME_PAGE, DwarfsData.INI_SNEEZY_HOME_PAGE, 0); 128 } 129 130 return s; 131 } 132 133 public static Ini.Section addDwarf(Ini ini, DwarfData dwarf) 134 { 135 Ini.Section s = addDwarf((Profile) ini, dwarf); 136 137 ini.putComment(dwarf.name, " " + dwarf.name); 138 139 return s; 140 } 141 142 public static void addDwarf(OptionMap opts, DwarfData dwarf, boolean addNamePrefix) 143 { 144 String prefix = addNamePrefix ? (dwarf.name + '.') : ""; 145 146 opts.putComment(prefix + Dwarf.PROP_WEIGHT, " " + dwarf.name); 147 inject(opts, dwarf, prefix); 148 if (dwarf.name.equals(Dwarfs.PROP_DOPEY)) 149 { 150 opts.put(prefix + Dwarf.PROP_WEIGHT, DwarfsData.OPT_DOPEY_WEIGHT, 0); 151 opts.put(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_DOPEY_HEIGHT, 0); 152 } 153 else if (dwarf.name.equals(Dwarfs.PROP_GRUMPY)) 154 { 155 opts.put(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_GRUMPY_HEIGHT, 0); 156 } 157 else if (dwarf.name.equals(Dwarfs.PROP_SLEEPY)) 158 { 159 opts.put(prefix + Dwarf.PROP_HEIGHT, DwarfsData.OPT_SLEEPY_HEIGHT, 0); 160 } 161 else if (dwarf.name.equals(Dwarfs.PROP_SNEEZY)) 162 { 163 opts.put(prefix + Dwarf.PROP_HOME_PAGE, DwarfsData.OPT_SNEEZY_HOME_PAGE, 0); 164 } 165 } 166 167 public static void addDwarfs(Profile prof) 168 { 169 addDwarf(prof, DwarfsData.bashful); 170 addDwarf(prof, DwarfsData.doc); 171 addDwarf(prof, DwarfsData.dopey); 172 addDwarf(prof, DwarfsData.grumpy); 173 addDwarf(prof, DwarfsData.happy); 174 addDwarf(prof, DwarfsData.sleepy); 175 addDwarf(prof, DwarfsData.sneezy); 176 } 177 178 public static void assertEquals(Registry.Key exp, Registry.Key act) 179 { 180 Assert.assertNotNull(exp); 181 Assert.assertEquals(exp.size(), act.size()); 182 for (String child : exp.childrenNames()) 183 { 184 assertEquals(exp.getChild(child), act.getChild(child)); 185 } 186 187 for (String name : exp.keySet()) 188 { 189 Assert.assertEquals(exp.get(name), act.get(name)); 190 } 191 } 192 193 public static void assertEquals(Dwarfs expected, Dwarfs actual) 194 { 195 assertEquals(expected.getBashful(), actual.getBashful()); 196 assertEquals(expected.getDoc(), actual.getDoc()); 197 assertEquals(expected.getDopey(), actual.getDopey()); 198 assertEquals(expected.getGrumpy(), actual.getGrumpy()); 199 assertEquals(expected.getHappy(), actual.getHappy()); 200 assertEquals(expected.getSleepy(), actual.getSleepy()); 201 assertEquals(expected.getSneezy(), actual.getSneezy()); 202 } 203 204 public static void assertEquals(Dwarf expected, Dwarf actual) 205 { 206 Assert.assertEquals(expected.getAge(), actual.getAge()); 207 Assert.assertEquals(expected.getHeight(), actual.getHeight(), DELTA); 208 Assert.assertEquals(expected.getWeight(), actual.getWeight(), DELTA); 209 Assert.assertEquals(expected.getHomePage().toString(), actual.getHomePage().toString()); 210 Assert.assertEquals(expected.getHomeDir().toString(), actual.getHomeDir().toString()); 211 Assert.assertEquals(expected.hasAge(), actual.hasAge()); 212 Assert.assertEquals(expected.hasHeight(), actual.hasHeight()); 213 Assert.assertEquals(expected.hasWeight(), actual.hasWeight()); 214 Assert.assertEquals(expected.hasHomePage(), actual.hasHomePage()); 215 } 216 217 public static Ini loadDwarfsIni() throws Exception 218 { 219 return new Ini(Helper.class.getClassLoader().getResourceAsStream(DWARFS_INI)); 220 } 221 222 public static Ini loadDwarfsIni(Config config) throws Exception 223 { 224 Ini ini = new Ini(); 225 226 ini.setConfig(config); 227 ini.load(Helper.class.getClassLoader().getResourceAsStream(DWARFS_INI)); 228 229 return ini; 230 } 231 232 public static Options loadDwarfsOpt() throws Exception 233 { 234 return new Options(Helper.class.getClassLoader().getResourceAsStream(DWARFS_OPT)); 235 } 236 237 public static Options loadDwarfsOpt(Config config) throws Exception 238 { 239 Options opt = new Options(); 240 241 opt.setConfig(config); 242 opt.load(Helper.class.getClassLoader().getResourceAsStream(DWARFS_OPT)); 243 244 return opt; 245 } 246 247 public static Reg loadDwarfsReg() throws Exception 248 { 249 return new Reg(Helper.class.getClassLoader().getResourceAsStream(DWARFS_REG)); 250 } 251 252 public static Ini loadTaleIni() throws Exception 253 { 254 return new Ini(Helper.class.getClassLoader().getResourceAsStream(TALE_INI)); 255 } 256 257 public static Ini loadTaleIni(Config config) throws Exception 258 { 259 Ini ini = new Ini(); 260 261 ini.setConfig(config); 262 ini.load(Helper.class.getClassLoader().getResourceAsStream(TALE_INI)); 263 264 return ini; 265 } 266 267 public static Ini newDwarfsIni() 268 { 269 Ini ini = new Ini(); 270 271 ini.setComment(HEADER_COMMENT); 272 addDwarf(ini, DwarfsData.bashful); 273 addDwarf(ini, DwarfsData.doc); 274 addDwarf(ini, DwarfsData.dopey); 275 addDwarf(ini, DwarfsData.grumpy); 276 addDwarf(ini, DwarfsData.happy); 277 addDwarf(ini, DwarfsData.sleepy); 278 addDwarf(ini, DwarfsData.sneezy); 279 280 return ini; 281 } 282 283 public static Options newDwarfsOpt() 284 { 285 Options opts = new Options(); 286 287 opts.setComment(HEADER_COMMENT); 288 addDwarf(opts, DwarfsData.dopey, false); 289 addDwarf(opts, DwarfsData.bashful); 290 addDwarf(opts, DwarfsData.doc); 291 addDwarf(opts, DwarfsData.dopey); 292 addDwarf(opts, DwarfsData.grumpy); 293 addDwarf(opts, DwarfsData.happy); 294 addDwarf(opts, DwarfsData.sleepy); 295 addDwarf(opts, DwarfsData.sneezy); 296 297 return opts; 298 } 299 300 public static Ini newTaleIni() 301 { 302 Ini ini = new Ini(); 303 304 ini.setComment(HEADER_COMMENT); 305 ini.add(TaleData.PROP_DWARFS); 306 addDwarf(ini, TaleData.bashful); 307 addDwarf(ini, TaleData.doc); 308 addDwarf(ini, TaleData.dopey); 309 addDwarf(ini, TaleData.grumpy); 310 addDwarf(ini, TaleData.happy); 311 addDwarf(ini, TaleData.sleepy); 312 addDwarf(ini, TaleData.sneezy); 313 314 return ini; 315 } 316 317 public static void resetConfig() throws Exception 318 { 319 Properties props = System.getProperties(); 320 321 for (String name : CONFIG_PROPERTIES) 322 { 323 props.remove(Config.KEY_PREFIX + name); 324 } 325 326 for (String name : FACTORY_PROPERTIES) 327 { 328 props.remove(name); 329 } 330 } 331 332 private static void inject(OptionMap map, Dwarf dwarf, String prefix) 333 { 334 map.put(prefix + Dwarf.PROP_WEIGHT, String.valueOf(dwarf.getWeight())); 335 map.put(prefix + Dwarf.PROP_HEIGHT, String.valueOf(dwarf.getHeight())); 336 map.put(prefix + Dwarf.PROP_AGE, String.valueOf(dwarf.getAge())); 337 map.put(prefix + Dwarf.PROP_HOME_PAGE, dwarf.getHomePage().toString()); 338 map.put(prefix + Dwarf.PROP_HOME_DIR, dwarf.getHomeDir()); 339 int[] numbers = dwarf.getFortuneNumber(); 340 341 if ((numbers != null) && (numbers.length > 0)) 342 { 343 for (int i = 0; i < numbers.length; i++) 344 { 345 map.add(prefix + Dwarf.PROP_FORTUNE_NUMBER, String.valueOf(numbers[i])); 346 } 347 } 348 } 349}