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;
017
018import org.junit.Assert;
019import org.junit.Test;
020
021import java.nio.charset.Charset;
022
023public class ConfigTest extends Ini4jCase
024{
025    @Test public void testDefaults()
026    {
027        Config def = newDefaultConfig();
028
029        assertEquals(def, new Config());
030        assertEquals(def, Config.getGlobal());
031        assertEquals(def, Config.getGlobal().clone());
032    }
033
034    @Test public void testSystemProperties()
035    {
036        Config exp = newInverseConfig();
037
038        setBoolean(Config.PROP_EMPTY_OPTION, exp.isEmptyOption());
039        setBoolean(Config.PROP_EMPTY_SECTION, exp.isEmptySection());
040        setBoolean(Config.PROP_GLOBAL_SECTION, exp.isGlobalSection());
041        setString(Config.PROP_GLOBAL_SECTION_NAME, exp.getGlobalSectionName());
042        setBoolean(Config.PROP_INCLUDE, exp.isInclude());
043        setBoolean(Config.PROP_LOWER_CASE_OPTION, exp.isLowerCaseOption());
044        setBoolean(Config.PROP_LOWER_CASE_SECTION, exp.isLowerCaseSection());
045        setBoolean(Config.PROP_MULTI_OPTION, exp.isMultiOption());
046        setBoolean(Config.PROP_MULTI_SECTION, exp.isMultiSection());
047        setBoolean(Config.PROP_STRICT_OPERATOR, exp.isStrictOperator());
048        setBoolean(Config.PROP_UNNAMED_SECTION, exp.isUnnamedSection());
049        setBoolean(Config.PROP_ESCAPE, exp.isEscape());
050        setChar(Config.PROP_PATH_SEPARATOR, exp.getPathSeparator());
051        setBoolean(Config.PROP_TREE, exp.isTree());
052        setBoolean(Config.PROP_PROPERTY_FIRST_UPPER, exp.isPropertyFirstUpper());
053        setString(Config.PROP_LINE_SEPARATOR, exp.getLineSeparator());
054        setCharset(Config.PROP_FILE_ENCODING, exp.getFileEncoding());
055        setBoolean(Config.PROP_COMMENT, exp.isComment());
056        setBoolean(Config.PROP_HEADER_COMMENT, exp.isHeaderComment());
057        Config cfg = new Config();
058
059        assertEquals(exp, cfg);
060    }
061
062    private void setBoolean(String prop, boolean value)
063    {
064        System.setProperty(Config.KEY_PREFIX + prop, String.valueOf(value));
065    }
066
067    private void setChar(String prop, char value)
068    {
069        System.setProperty(Config.KEY_PREFIX + prop, String.valueOf(value));
070    }
071
072    private void setCharset(String prop, Charset value)
073    {
074        System.setProperty(Config.KEY_PREFIX + prop, String.valueOf(value));
075    }
076
077    private void setString(String prop, String value)
078    {
079        System.setProperty(Config.KEY_PREFIX + prop, value);
080    }
081
082    private void assertEquals(Config exp, Config act)
083    {
084        Assert.assertEquals(exp.isEmptyOption(), act.isEmptyOption());
085        Assert.assertEquals(exp.isEmptySection(), act.isEmptySection());
086        Assert.assertEquals(exp.isEscape(), act.isEscape());
087        Assert.assertEquals(exp.isGlobalSection(), act.isGlobalSection());
088        Assert.assertEquals(exp.isInclude(), act.isInclude());
089        Assert.assertEquals(exp.isLowerCaseOption(), act.isLowerCaseOption());
090        Assert.assertEquals(exp.isLowerCaseSection(), act.isLowerCaseSection());
091        Assert.assertEquals(exp.isMultiOption(), act.isMultiOption());
092        Assert.assertEquals(exp.isMultiSection(), act.isMultiSection());
093        Assert.assertEquals(exp.isStrictOperator(), act.isStrictOperator());
094        Assert.assertEquals(exp.isUnnamedSection(), act.isUnnamedSection());
095        Assert.assertEquals(exp.getGlobalSectionName(), act.getGlobalSectionName());
096        Assert.assertEquals(exp.getPathSeparator(), act.getPathSeparator());
097        Assert.assertEquals(exp.isTree(), act.isTree());
098        Assert.assertEquals(exp.isPropertyFirstUpper(), act.isPropertyFirstUpper());
099        Assert.assertEquals(exp.getLineSeparator(), act.getLineSeparator());
100        Assert.assertEquals(exp.getFileEncoding(), act.getFileEncoding());
101        Assert.assertEquals(exp.isComment(), act.isComment());
102        Assert.assertEquals(exp.isHeaderComment(), act.isHeaderComment());
103    }
104
105    private Config newDefaultConfig()
106    {
107        Config cfg = new Config();
108
109        cfg.setEmptyOption(false);
110        cfg.setEmptySection(false);
111        cfg.setEscape(true);
112        cfg.setGlobalSection(false);
113        cfg.setGlobalSectionName("?");
114        cfg.setInclude(false);
115        cfg.setLowerCaseOption(false);
116        cfg.setLowerCaseSection(false);
117        cfg.setMultiSection(false);
118        cfg.setMultiOption(true);
119        cfg.setStrictOperator(false);
120        cfg.setUnnamedSection(false);
121        cfg.setPathSeparator('/');
122        cfg.setTree(true);
123        cfg.setPropertyFirstUpper(false);
124        cfg.setLineSeparator(System.getProperty("line.separator"));
125        cfg.setFileEncoding(Charset.forName("UTF-8"));
126        cfg.setComment(true);
127        cfg.setHeaderComment(true);
128
129        return cfg;
130    }
131
132    private Config newInverseConfig()
133    {
134        Config cfg = newDefaultConfig();
135
136        cfg.setEmptyOption(!cfg.isEmptyOption());
137        cfg.setEmptySection(!cfg.isEmptySection());
138        cfg.setEscape(!cfg.isEscape());
139        cfg.setGlobalSection(!cfg.isGlobalSection());
140        cfg.setGlobalSectionName("+");
141        cfg.setInclude(!cfg.isInclude());
142        cfg.setLowerCaseOption(!cfg.isLowerCaseOption());
143        cfg.setLowerCaseSection(!cfg.isLowerCaseSection());
144        cfg.setMultiSection(!cfg.isMultiSection());
145        cfg.setMultiOption(!cfg.isMultiOption());
146        cfg.setStrictOperator(!cfg.isStrictOperator());
147        cfg.setUnnamedSection(!cfg.isUnnamedSection());
148        cfg.setPathSeparator('?');
149        cfg.setTree(!cfg.isTree());
150        cfg.setPropertyFirstUpper(!cfg.isPropertyFirstUpper());
151        cfg.setComment(!cfg.isComment());
152        cfg.setHeaderComment(!cfg.isHeaderComment());
153
154        //cfg.setLineSeparator("\t");
155        //cfg.setFileEncoding(Charset.forName("ASCII"));
156        return cfg;
157    }
158}