// Copyright (C) 2011-2012 CRS4.
//
// This file is part of Seal.
//
// Seal is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 3 of the License, or (at your option)
// any later version.
//
// Seal is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with Seal. If not, see <http://www.gnu.org/licenses/>.
package tests.it.crs4.seal.common;
import it.crs4.seal.common.ConfigFileParser;
import it.crs4.seal.common.FormatException;
import org.junit.*;
import static org.junit.Assert.*;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;
public class TestConfigFileParser {
ConfigFileParser emptyParser;
ConfigFileParser parser;
static final String CfgDefaultNoTitle =
"key1:value1\n" +
"key2:value2\n";
static final String CfgDefaultWithTitle =
"[DEFAULT]\n" +
"key1:value1\n" +
"key2:value2\n";
static final String CfgSection1 =
"[DEFAULT]\n" +
"key1:value1\n" +
"key2:value2\n" +
"[ Section1 ]\n" +
"keyS1: valueS1\n";
static final String CfgSection2 =
"[DEFAULT]\n" +
"key1:value1\n" +
"key2:value2\n" +
"[ Section1 ]\n" +
"keyS1: valueS1\n" +
"[ Section2 ]\n" +
"keyS2: valueS2\n";
static final String CfgSectionOverride =
"[DEFAULT]\n" +
"key1:value1\n" +
"[ Section1 ]\n" +
"key1: override\n";
@Before
public void setup()
{
emptyParser = new ConfigFileParser();
parser = new ConfigFileParser();
}
@Test
public void testEmpty()
{
assertFalse( emptyParser.hasSection("bla") );
assertTrue( emptyParser.hasSection("DEFAULT") );
assertTrue( emptyParser.getSectionNames().isEmpty() );
Iterator<ConfigFileParser.KvPair > it = emptyParser.getSectionIterator("non existent");
assertFalse( it.hasNext() );
}
@Test
public void testDefault() throws IOException, FormatException
{
parser.load( new StringReader(CfgDefaultWithTitle) );
assertTrue( parser.hasSection("DEFAULT") );
assertTrue( parser.hasSection("default") );
assertTrue( parser.hasSection("deFAult") );
Map<String, String> map = toMap(parser.getSectionIterator("anything"));
assertEquals(2, map.size());
assertEquals("value1", map.get("key1"));
assertEquals("value2", map.get("key2"));
}
@Test
public void testEquals() throws IOException, FormatException
{
parser.load( new StringReader("key1=value1\n") );
assertEquals("value1", parser.getValue("default", "key1"));
}
@Test
public void testColon() throws IOException, FormatException
{
parser.load( new StringReader("key1:value1\n") );
assertEquals("value1", parser.getValue("default", "key1"));
}
@Test
public void testTrimKey() throws IOException, FormatException
{
parser.load( new StringReader(" key1 :value1\n") );
assertEquals("value1", parser.getValue("default", "key1"));
}
@Test
public void testTrimValue() throws IOException, FormatException
{
parser.load( new StringReader("key1: value1 \n") );
assertEquals("value1", parser.getValue("default", "key1"));
}
@Test
public void testSection1() throws IOException, FormatException
{
parser.load( new StringReader(CfgSection1) );
assertEquals("value1", parser.getValue("Section1", "key1"));
assertEquals("valueS1", parser.getValue("Section1", "keyS1"));
Map<String, String> map = toMap(parser.getSectionIterator("Section1"));
// make sure the iterator goes through all k-v pairs, even the ones inherited from DEFAULT
assertEquals(3, map.size());
assertEquals("value1", map.get("key1"));
assertEquals("value2", map.get("key2"));
assertEquals("valueS1", map.get("keyS1"));
}
@Test
public void testSection2() throws IOException, FormatException
{
parser.load( new StringReader(CfgSection2) );
assertEquals("value1", parser.getValue("Section1", "key1"));
assertEquals("valueS1", parser.getValue("Section1", "keyS1"));
assertNull( parser.getValue("Section2", "keyS1"));
assertEquals("valueS2", parser.getValue("Section2", "keyS2"));
}
@Test(expected=it.crs4.seal.common.FormatException.class)
public void testSpaceInSectionName() throws IOException, FormatException
{
parser.load( new StringReader("[ Section 1 ]") );
}
@Test
public void testHashComment() throws IOException, FormatException
{
parser.load( new StringReader(" #key1=value1\nkey2=value2;\n") );
assertNull( parser.getValue("default", "key1"));
assertEquals("value2;", parser.getValue("default", "key2"));
}
@Test
public void testSemiColonComment() throws IOException, FormatException
{
parser.load( new StringReader(" ;key1=value1\nkey2=value2;\n") );
assertNull( parser.getValue("default", "key1"));
assertEquals("value2;", parser.getValue("default", "key2"));
}
@Test
public void testOverride() throws IOException, FormatException
{
parser.load( new StringReader(CfgSectionOverride) );
assertEquals("override", parser.getValue("Section1", "key1"));
assertEquals("value1", parser.getValue("Section2", "key1"));
}
private Map<String, String> toMap(Iterator<ConfigFileParser.KvPair> it)
{
Map<String, String> map = new HashMap<String, String>();
while (it.hasNext())
{
ConfigFileParser.KvPair pair = it.next();
map.put(pair.getKey(), pair.getValue());
}
return map;
}
public static void main(String args[]) {
org.junit.runner.JUnitCore.main(TestConfigFileParser.class.getName());
}
}