You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2010/06/08 13:56:31 UTC
svn commit: r952622 [3/3] - in /commons/proper/configuration/trunk: conf/
src/java/org/apache/commons/configuration/
src/java/org/apache/commons/configuration/interpol/
src/java/org/apache/commons/configuration/reloading/
src/java/org/apache/commons/co...
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListConfiguration.java?rev=952622&r1=952621&r2=952622&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListConfiguration.java Tue Jun 8 11:56:30 2010
@@ -1,413 +1,413 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.configuration.plist;
-
-import java.io.File;
-import java.io.StringReader;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Date;
-import java.util.TimeZone;
-
-import junit.framework.TestCase;
-import junitx.framework.ArrayAssert;
-import junitx.framework.ListAssert;
-import junitx.framework.ObjectAssert;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationComparator;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.StrictConfigurationComparator;
-
-/**
- * @author Emmanuel Bourg
- * @version $Revision$, $Date$
- */
-public class TestPropertyListConfiguration extends TestCase
-{
- private PropertyListConfiguration config;
-
- private String testProperties = new File("conf/test.plist").getAbsolutePath();
-
- protected void setUp() throws Exception
- {
- config = new PropertyListConfiguration();
- config.setFileName(testProperties);
- config.load();
- }
-
- public void testLoad()
- {
- assertFalse("the configuration is empty", config.isEmpty());
- }
-
- public void testLoadWithError()
- {
- config = new PropertyListConfiguration();
- try {
- config.load(new StringReader(""));
- fail("No exception thrown on loading an empty file");
- } catch (ConfigurationException e) {
- // expected
- assertNotNull(e.getMessage());
- }
- }
-
- public void testString()
- {
- assertEquals("simple-string", "string1", config.getProperty("simple-string"));
- }
-
- public void testQuotedString()
- {
- assertEquals("quoted-string", "string2", config.getProperty("quoted-string"));
- assertEquals("quoted-string2", "this is a string", config.getProperty("quoted-string2"));
- assertEquals("complex-string", "this is a \"complex\" string {(=,;)}", config.getProperty("complex-string"));
- }
-
- public void testEmptyArray()
- {
- String key = "empty-array";
- assertNotNull("array null", config.getProperty(key));
-
- List list = (List) config.getProperty(key);
- assertTrue("array is not empty", list.isEmpty());
- }
-
- public void testArray()
- {
- String key = "array";
- assertNotNull("array null", config.getProperty(key));
-
- List list = (List) config.getProperty(key);
- assertFalse("array is empty", list.isEmpty());
-
- assertEquals("1st value", "value1", list.get(0));
- assertEquals("2nd value", "value2", list.get(1));
- assertEquals("3rd value", "value3", list.get(2));
- }
-
- public void testNestedArrays()
- {
- String key = "nested-arrays";
-
- Object array = config.getProperty(key);
-
- // root array
- assertNotNull("array not found", array);
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
- List list = config.getList(key);
-
- assertFalse("empty array", list.isEmpty());
- assertEquals("size", 2, list.size());
-
- // 1st array
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(0));
- List list1 = (List) list.get(0);
- assertFalse("nested array 1 is empty", list1.isEmpty());
- assertEquals("size", 2, list1.size());
- assertEquals("1st element", "a", list1.get(0));
- assertEquals("2nd element", "b", list1.get(1));
-
- // 2nd array
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(1));
- List list2 = (List) list.get(1);
- assertFalse("nested array 2 is empty", list2.isEmpty());
- assertEquals("size", 2, list2.size());
- assertEquals("1st element", "c", list2.get(0));
- assertEquals("2nd element", "d", list2.get(1));
- }
-
- public void testDictionary()
- {
- assertEquals("1st element in dictionary", "bar1", config.getProperty("dictionary.foo1"));
- assertEquals("2nd element in dictionary", "bar2", config.getProperty("dictionary.foo2"));
- }
-
- public void testDictionaryArray()
- {
- String key = "dictionary-array";
-
- Object array = config.getProperty(key);
-
- // root array
- assertNotNull("array not found", array);
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
- List list = config.getList(key);
-
- assertFalse("empty array", list.isEmpty());
- assertEquals("size", 2, list.size());
-
- // 1st dictionary
- ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(0));
- Configuration conf1 = (Configuration) list.get(0);
- assertFalse("configuration 1 is empty", conf1.isEmpty());
- assertEquals("configuration element", "bar", conf1.getProperty("foo"));
-
- // 2nd dictionary
- ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(1));
- Configuration conf2 = (Configuration) list.get(1);
- assertFalse("configuration 2 is empty", conf2.isEmpty());
- assertEquals("configuration element", "value", conf2.getProperty("key"));
- }
-
- public void testNestedDictionaries()
- {
- assertEquals("nested property", "value", config.getString("nested-dictionaries.foo.bar.key"));
- }
-
- public void testData()
- {
- ObjectAssert.assertInstanceOf("data", (new byte[0]).getClass(), config.getProperty("data"));
- ArrayAssert.assertEquals("data", "foo bar".getBytes(), (byte[]) config.getProperty("data"));
- }
-
- public void testDate() throws Exception
- {
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.set(2002, 2, 22, 11, 30, 0);
- cal.setTimeZone(TimeZone.getTimeZone("GMT+0100"));
- Date date = cal.getTime();
-
- assertEquals("date", date, config.getProperty("date"));
- }
-
- public void testSave() throws Exception
- {
- File savedFile = new File("target/testsave.plist");
-
- // remove the file previously saved if necessary
- if (savedFile.exists())
- {
- assertTrue(savedFile.delete());
- }
-
- // save the configuration
- String filename = savedFile.getAbsolutePath();
- config.save(filename);
-
- assertTrue("The saved file doesn't exist", savedFile.exists());
-
- // read the configuration and compare the properties
- Configuration checkConfig = new PropertyListConfiguration(new File(filename));
-
- Iterator it = config.getKeys();
- while (it.hasNext())
- {
- String key = (String) it.next();
- assertTrue("The saved configuration doesn't contain the key '" + key + "'", checkConfig.containsKey(key));
-
- Object value = checkConfig.getProperty(key);
- if (value instanceof byte[])
- {
- byte[] array = (byte[]) value;
- ArrayAssert.assertEquals("Value of the '" + key + "' property", (byte[]) config.getProperty(key), array);
- }
- else if (value instanceof List)
- {
- List list1 = (List) config.getProperty(key);
- List list2 = (List) value;
-
- assertEquals("The size of the list for the key '" + key + "' doesn't match", list1.size(), list2.size());
-
- for (int i = 0; i < list2.size(); i++)
- {
- Object value1 = list1.get(i);
- Object value2 = list2.get(i);
-
- if (value1 instanceof Configuration)
- {
- ConfigurationComparator comparator = new StrictConfigurationComparator();
- assertTrue("The dictionnary at index " + i + " for the key '" + key + "' doesn't match", comparator.compare((Configuration) value1, (Configuration) value2));
- }
- else
- {
- assertEquals("Element at index " + i + " for the key '" + key + "'", value1, value2);
- }
- }
-
- ListAssert.assertEquals("Value of the '" + key + "' property", (List) config.getProperty(key), list1);
- }
- else
- {
- assertEquals("Value of the '" + key + "' property", config.getProperty(key), checkConfig.getProperty(key));
- }
-
- }
- }
-
- public void testSaveEmptyDictionary() throws Exception
- {
- File savedFile = new File("target/testsave.plist");
-
- // remove the file previously saved if necessary
- if (savedFile.exists())
- {
- assertTrue(savedFile.delete());
- }
-
- // save the configuration
- String filename = savedFile.getAbsolutePath();
- config.save(filename);
-
- assertTrue("The saved file doesn't exist", savedFile.exists());
-
- // read the configuration and compare the properties
- PropertyListConfiguration checkConfig = new PropertyListConfiguration(new File(filename));
-
- assertFalse(config.getRootNode().getChildren("empty-dictionary").isEmpty());
- assertFalse(checkConfig.getRootNode().getChildren("empty-dictionary").isEmpty());
- }
-
- public void testQuoteString()
- {
- assertEquals("null string", null, config.quoteString(null));
- assertEquals("simple string", "abcd", config.quoteString("abcd"));
- assertEquals("string with a space", "\"ab cd\"", config.quoteString("ab cd"));
- assertEquals("string with a quote", "\"foo\\\"bar\"", config.quoteString("foo\"bar"));
- assertEquals("string with a special char", "\"foo;bar\"", config.quoteString("foo;bar"));
- }
-
- /**
- * Ensure that setProperty doesn't alter an array of byte
- * since it's a first class type in plist file
- */
- public void testSetDataProperty() throws Exception
- {
- byte[] expected = new byte[]{1, 2, 3, 4};
- PropertyListConfiguration config = new PropertyListConfiguration();
- config.setProperty("foo", expected);
- config.save("target/testdata.plist");
-
- PropertyListConfiguration config2 = new PropertyListConfiguration("target/testdata.plist");
- Object array = config2.getProperty("foo");
-
- assertNotNull("data not found", array);
- assertEquals("property type", byte[].class, array.getClass());
- ArrayAssert.assertEquals(expected, (byte[]) array);
- }
-
- /**
- * Ensure that addProperty doesn't alter an array of byte
- */
- public void testAddDataProperty() throws Exception
- {
- byte[] expected = new byte[]{1, 2, 3, 4};
- PropertyListConfiguration config = new PropertyListConfiguration();
- config.addProperty("foo", expected);
- config.save("target/testdata.plist");
-
- PropertyListConfiguration config2 = new PropertyListConfiguration("target/testdata.plist");
- Object array = config2.getProperty("foo");
-
- assertNotNull("data not found", array);
- assertEquals("property type", byte[].class, array.getClass());
- ArrayAssert.assertEquals(expected, (byte[]) array);
- }
-
- public void testInitCopy()
- {
- PropertyListConfiguration copy = new PropertyListConfiguration(config);
- assertFalse("Nothing was copied", copy.isEmpty());
- }
-
- /**
- * Tests parsing a date with an invalid numeric value.
- */
- public void testParseDateNoNumber()
- {
- try
- {
- PropertyListConfiguration
- .parseDate("<*D2002-03-22 1c:30:00 +0100>");
- fail("Could parse date with an invalid number!");
- }
- catch (ParseException pex)
- {
- // ok
- }
- }
-
- /**
- * Tests parsing a date that is not long enough.
- */
- public void testParseDateTooShort()
- {
- try
- {
- PropertyListConfiguration.parseDate("<*D2002-03-22 11:3>");
- fail("Could parse too short date!");
- }
- catch (ParseException pex)
- {
- // ok
- }
- }
-
- /**
- * Tests parsing a date that contains an invalid separator character.
- */
- public void testParseDateInvalidChar()
- {
- try
- {
- PropertyListConfiguration
- .parseDate("<*D2002+03-22 11:30:00 +0100>");
- fail("Could parse date with an invalid separator!");
- }
- catch (ParseException pex)
- {
- // ok
- }
- }
-
- /**
- * Tries parsing a null date. This should cause an exception.n
- */
- public void testParseDateNull()
- {
- try
- {
- PropertyListConfiguration.parseDate(null);
- fail("Could parse null date!");
- }
- catch (ParseException pex)
- {
- // ok
- }
- }
-
- /**
- * Tests formatting a date.
- */
- public void testFormatDate()
- {
- Calendar cal = Calendar.getInstance();
- cal.clear();
- cal.set(2007, 9, 29, 23, 4, 30);
- cal.setTimeZone(TimeZone.getTimeZone("GMT-0230"));
- assertEquals("Wrong date literal (1)", "<*D2007-10-29 23:04:30 -0230>",
- PropertyListConfiguration.formatDate(cal));
- cal.clear();
- cal.set(2007, 9, 30, 22, 2, 15);
- cal.setTimeZone(TimeZone.getTimeZone("GMT+1111"));
- assertEquals("Wrong date literal (2)", "<*D2007-10-30 22:02:15 +1111>",
- PropertyListConfiguration.formatDate(cal));
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.configuration.plist;
+
+import java.io.File;
+import java.io.StringReader;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Date;
+import java.util.TimeZone;
+
+import junit.framework.TestCase;
+import junitx.framework.ArrayAssert;
+import junitx.framework.ListAssert;
+import junitx.framework.ObjectAssert;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationComparator;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.StrictConfigurationComparator;
+
+/**
+ * @author Emmanuel Bourg
+ * @version $Revision$, $Date$
+ */
+public class TestPropertyListConfiguration extends TestCase
+{
+ private PropertyListConfiguration config;
+
+ private String testProperties = new File("conf/test.plist").getAbsolutePath();
+
+ protected void setUp() throws Exception
+ {
+ config = new PropertyListConfiguration();
+ config.setFileName(testProperties);
+ config.load();
+ }
+
+ public void testLoad()
+ {
+ assertFalse("the configuration is empty", config.isEmpty());
+ }
+
+ public void testLoadWithError()
+ {
+ config = new PropertyListConfiguration();
+ try {
+ config.load(new StringReader(""));
+ fail("No exception thrown on loading an empty file");
+ } catch (ConfigurationException e) {
+ // expected
+ assertNotNull(e.getMessage());
+ }
+ }
+
+ public void testString()
+ {
+ assertEquals("simple-string", "string1", config.getProperty("simple-string"));
+ }
+
+ public void testQuotedString()
+ {
+ assertEquals("quoted-string", "string2", config.getProperty("quoted-string"));
+ assertEquals("quoted-string2", "this is a string", config.getProperty("quoted-string2"));
+ assertEquals("complex-string", "this is a \"complex\" string {(=,;)}", config.getProperty("complex-string"));
+ }
+
+ public void testEmptyArray()
+ {
+ String key = "empty-array";
+ assertNotNull("array null", config.getProperty(key));
+
+ List list = (List) config.getProperty(key);
+ assertTrue("array is not empty", list.isEmpty());
+ }
+
+ public void testArray()
+ {
+ String key = "array";
+ assertNotNull("array null", config.getProperty(key));
+
+ List list = (List) config.getProperty(key);
+ assertFalse("array is empty", list.isEmpty());
+
+ assertEquals("1st value", "value1", list.get(0));
+ assertEquals("2nd value", "value2", list.get(1));
+ assertEquals("3rd value", "value3", list.get(2));
+ }
+
+ public void testNestedArrays()
+ {
+ String key = "nested-arrays";
+
+ Object array = config.getProperty(key);
+
+ // root array
+ assertNotNull("array not found", array);
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
+ List list = config.getList(key);
+
+ assertFalse("empty array", list.isEmpty());
+ assertEquals("size", 2, list.size());
+
+ // 1st array
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(0));
+ List list1 = (List) list.get(0);
+ assertFalse("nested array 1 is empty", list1.isEmpty());
+ assertEquals("size", 2, list1.size());
+ assertEquals("1st element", "a", list1.get(0));
+ assertEquals("2nd element", "b", list1.get(1));
+
+ // 2nd array
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(1));
+ List list2 = (List) list.get(1);
+ assertFalse("nested array 2 is empty", list2.isEmpty());
+ assertEquals("size", 2, list2.size());
+ assertEquals("1st element", "c", list2.get(0));
+ assertEquals("2nd element", "d", list2.get(1));
+ }
+
+ public void testDictionary()
+ {
+ assertEquals("1st element in dictionary", "bar1", config.getProperty("dictionary.foo1"));
+ assertEquals("2nd element in dictionary", "bar2", config.getProperty("dictionary.foo2"));
+ }
+
+ public void testDictionaryArray()
+ {
+ String key = "dictionary-array";
+
+ Object array = config.getProperty(key);
+
+ // root array
+ assertNotNull("array not found", array);
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
+ List list = config.getList(key);
+
+ assertFalse("empty array", list.isEmpty());
+ assertEquals("size", 2, list.size());
+
+ // 1st dictionary
+ ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(0));
+ Configuration conf1 = (Configuration) list.get(0);
+ assertFalse("configuration 1 is empty", conf1.isEmpty());
+ assertEquals("configuration element", "bar", conf1.getProperty("foo"));
+
+ // 2nd dictionary
+ ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(1));
+ Configuration conf2 = (Configuration) list.get(1);
+ assertFalse("configuration 2 is empty", conf2.isEmpty());
+ assertEquals("configuration element", "value", conf2.getProperty("key"));
+ }
+
+ public void testNestedDictionaries()
+ {
+ assertEquals("nested property", "value", config.getString("nested-dictionaries.foo.bar.key"));
+ }
+
+ public void testData()
+ {
+ ObjectAssert.assertInstanceOf("data", (new byte[0]).getClass(), config.getProperty("data"));
+ ArrayAssert.assertEquals("data", "foo bar".getBytes(), (byte[]) config.getProperty("data"));
+ }
+
+ public void testDate() throws Exception
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.set(2002, 2, 22, 11, 30, 0);
+ cal.setTimeZone(TimeZone.getTimeZone("GMT+0100"));
+ Date date = cal.getTime();
+
+ assertEquals("date", date, config.getProperty("date"));
+ }
+
+ public void testSave() throws Exception
+ {
+ File savedFile = new File("target/testsave.plist");
+
+ // remove the file previously saved if necessary
+ if (savedFile.exists())
+ {
+ assertTrue(savedFile.delete());
+ }
+
+ // save the configuration
+ String filename = savedFile.getAbsolutePath();
+ config.save(filename);
+
+ assertTrue("The saved file doesn't exist", savedFile.exists());
+
+ // read the configuration and compare the properties
+ Configuration checkConfig = new PropertyListConfiguration(new File(filename));
+
+ Iterator it = config.getKeys();
+ while (it.hasNext())
+ {
+ String key = (String) it.next();
+ assertTrue("The saved configuration doesn't contain the key '" + key + "'", checkConfig.containsKey(key));
+
+ Object value = checkConfig.getProperty(key);
+ if (value instanceof byte[])
+ {
+ byte[] array = (byte[]) value;
+ ArrayAssert.assertEquals("Value of the '" + key + "' property", (byte[]) config.getProperty(key), array);
+ }
+ else if (value instanceof List)
+ {
+ List list1 = (List) config.getProperty(key);
+ List list2 = (List) value;
+
+ assertEquals("The size of the list for the key '" + key + "' doesn't match", list1.size(), list2.size());
+
+ for (int i = 0; i < list2.size(); i++)
+ {
+ Object value1 = list1.get(i);
+ Object value2 = list2.get(i);
+
+ if (value1 instanceof Configuration)
+ {
+ ConfigurationComparator comparator = new StrictConfigurationComparator();
+ assertTrue("The dictionnary at index " + i + " for the key '" + key + "' doesn't match", comparator.compare((Configuration) value1, (Configuration) value2));
+ }
+ else
+ {
+ assertEquals("Element at index " + i + " for the key '" + key + "'", value1, value2);
+ }
+ }
+
+ ListAssert.assertEquals("Value of the '" + key + "' property", (List) config.getProperty(key), list1);
+ }
+ else
+ {
+ assertEquals("Value of the '" + key + "' property", config.getProperty(key), checkConfig.getProperty(key));
+ }
+
+ }
+ }
+
+ public void testSaveEmptyDictionary() throws Exception
+ {
+ File savedFile = new File("target/testsave.plist");
+
+ // remove the file previously saved if necessary
+ if (savedFile.exists())
+ {
+ assertTrue(savedFile.delete());
+ }
+
+ // save the configuration
+ String filename = savedFile.getAbsolutePath();
+ config.save(filename);
+
+ assertTrue("The saved file doesn't exist", savedFile.exists());
+
+ // read the configuration and compare the properties
+ PropertyListConfiguration checkConfig = new PropertyListConfiguration(new File(filename));
+
+ assertFalse(config.getRootNode().getChildren("empty-dictionary").isEmpty());
+ assertFalse(checkConfig.getRootNode().getChildren("empty-dictionary").isEmpty());
+ }
+
+ public void testQuoteString()
+ {
+ assertEquals("null string", null, config.quoteString(null));
+ assertEquals("simple string", "abcd", config.quoteString("abcd"));
+ assertEquals("string with a space", "\"ab cd\"", config.quoteString("ab cd"));
+ assertEquals("string with a quote", "\"foo\\\"bar\"", config.quoteString("foo\"bar"));
+ assertEquals("string with a special char", "\"foo;bar\"", config.quoteString("foo;bar"));
+ }
+
+ /**
+ * Ensure that setProperty doesn't alter an array of byte
+ * since it's a first class type in plist file
+ */
+ public void testSetDataProperty() throws Exception
+ {
+ byte[] expected = new byte[]{1, 2, 3, 4};
+ PropertyListConfiguration config = new PropertyListConfiguration();
+ config.setProperty("foo", expected);
+ config.save("target/testdata.plist");
+
+ PropertyListConfiguration config2 = new PropertyListConfiguration("target/testdata.plist");
+ Object array = config2.getProperty("foo");
+
+ assertNotNull("data not found", array);
+ assertEquals("property type", byte[].class, array.getClass());
+ ArrayAssert.assertEquals(expected, (byte[]) array);
+ }
+
+ /**
+ * Ensure that addProperty doesn't alter an array of byte
+ */
+ public void testAddDataProperty() throws Exception
+ {
+ byte[] expected = new byte[]{1, 2, 3, 4};
+ PropertyListConfiguration config = new PropertyListConfiguration();
+ config.addProperty("foo", expected);
+ config.save("target/testdata.plist");
+
+ PropertyListConfiguration config2 = new PropertyListConfiguration("target/testdata.plist");
+ Object array = config2.getProperty("foo");
+
+ assertNotNull("data not found", array);
+ assertEquals("property type", byte[].class, array.getClass());
+ ArrayAssert.assertEquals(expected, (byte[]) array);
+ }
+
+ public void testInitCopy()
+ {
+ PropertyListConfiguration copy = new PropertyListConfiguration(config);
+ assertFalse("Nothing was copied", copy.isEmpty());
+ }
+
+ /**
+ * Tests parsing a date with an invalid numeric value.
+ */
+ public void testParseDateNoNumber()
+ {
+ try
+ {
+ PropertyListConfiguration
+ .parseDate("<*D2002-03-22 1c:30:00 +0100>");
+ fail("Could parse date with an invalid number!");
+ }
+ catch (ParseException pex)
+ {
+ // ok
+ }
+ }
+
+ /**
+ * Tests parsing a date that is not long enough.
+ */
+ public void testParseDateTooShort()
+ {
+ try
+ {
+ PropertyListConfiguration.parseDate("<*D2002-03-22 11:3>");
+ fail("Could parse too short date!");
+ }
+ catch (ParseException pex)
+ {
+ // ok
+ }
+ }
+
+ /**
+ * Tests parsing a date that contains an invalid separator character.
+ */
+ public void testParseDateInvalidChar()
+ {
+ try
+ {
+ PropertyListConfiguration
+ .parseDate("<*D2002+03-22 11:30:00 +0100>");
+ fail("Could parse date with an invalid separator!");
+ }
+ catch (ParseException pex)
+ {
+ // ok
+ }
+ }
+
+ /**
+ * Tries parsing a null date. This should cause an exception.n
+ */
+ public void testParseDateNull()
+ {
+ try
+ {
+ PropertyListConfiguration.parseDate(null);
+ fail("Could parse null date!");
+ }
+ catch (ParseException pex)
+ {
+ // ok
+ }
+ }
+
+ /**
+ * Tests formatting a date.
+ */
+ public void testFormatDate()
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.set(2007, 9, 29, 23, 4, 30);
+ cal.setTimeZone(TimeZone.getTimeZone("GMT-0230"));
+ assertEquals("Wrong date literal (1)", "<*D2007-10-29 23:04:30 -0230>",
+ PropertyListConfiguration.formatDate(cal));
+ cal.clear();
+ cal.set(2007, 9, 30, 22, 2, 15);
+ cal.setTimeZone(TimeZone.getTimeZone("GMT+1111"));
+ assertEquals("Wrong date literal (2)", "<*D2007-10-30 22:02:15 +1111>",
+ PropertyListConfiguration.formatDate(cal));
+ }
+}
Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListParser.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListParser.java?rev=952622&r1=952621&r2=952622&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListParser.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListParser.java Tue Jun 8 11:56:30 2010
@@ -1,74 +1,74 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.configuration.plist;
-
-import java.io.Reader;
-import java.util.Calendar;
-import java.util.SimpleTimeZone;
-
-import junit.framework.TestCase;
-import junitx.framework.ArrayAssert;
-
-/**
- * @author Emmanuel Bourg
- * @version $Revision$, $Date$
- */
-public class TestPropertyListParser extends TestCase
-{
- private PropertyListParser parser = new PropertyListParser((Reader) null);
-
- public void testRemoveQuotes()
- {
- assertEquals("unquoted string", "abc", parser.removeQuotes("abc"));
- assertEquals("quoted string", "abc", parser.removeQuotes("\"abc\""));
- assertEquals("empty quotes", "", parser.removeQuotes("\"\""));
- assertEquals("empty string", "", parser.removeQuotes(""));
- assertEquals("null string", null, parser.removeQuotes(null));
- }
-
- public void testUnescapeQuotes()
- {
- assertEquals("non escaped quotes", "aaa\"bbb\"ccc", parser.unescapeQuotes("aaa\"bbb\"ccc"));
- assertEquals("escaped quotes", "aaa\"bbb\"ccc", parser.unescapeQuotes("aaa\\\"bbb\\\"ccc"));
- }
-
- public void testParseDate() throws Exception
- {
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.YEAR, 2002);
- calendar.set(Calendar.MONTH, Calendar.MARCH);
- calendar.set(Calendar.DAY_OF_MONTH, 22);
- calendar.set(Calendar.HOUR_OF_DAY, 11);
- calendar.set(Calendar.MINUTE, 30);
- calendar.set(Calendar.SECOND, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- calendar.setTimeZone(new SimpleTimeZone(60 * 60 * 1000, "Apache/Jakarta"));
-
- assertEquals("parsed date", calendar.getTime(), parser.parseDate("<*D2002-03-22 11:30:00 +0100>"));
- }
-
- public void testFilterData() throws Exception
- {
- byte[] expected = new byte[] {0x20, 0x20};
- ArrayAssert.assertEquals("null string", null, parser.filterData(null));
- ArrayAssert.assertEquals("data with < >", expected, parser.filterData("<2020>"));
- ArrayAssert.assertEquals("data without < >", expected, parser.filterData("2020"));
- ArrayAssert.assertEquals("data with space", expected, parser.filterData("20 20"));
- ArrayAssert.assertEquals("odd length", new byte[]{9, 0x20}, parser.filterData("920"));
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.configuration.plist;
+
+import java.io.Reader;
+import java.util.Calendar;
+import java.util.SimpleTimeZone;
+
+import junit.framework.TestCase;
+import junitx.framework.ArrayAssert;
+
+/**
+ * @author Emmanuel Bourg
+ * @version $Revision$, $Date$
+ */
+public class TestPropertyListParser extends TestCase
+{
+ private PropertyListParser parser = new PropertyListParser((Reader) null);
+
+ public void testRemoveQuotes()
+ {
+ assertEquals("unquoted string", "abc", parser.removeQuotes("abc"));
+ assertEquals("quoted string", "abc", parser.removeQuotes("\"abc\""));
+ assertEquals("empty quotes", "", parser.removeQuotes("\"\""));
+ assertEquals("empty string", "", parser.removeQuotes(""));
+ assertEquals("null string", null, parser.removeQuotes(null));
+ }
+
+ public void testUnescapeQuotes()
+ {
+ assertEquals("non escaped quotes", "aaa\"bbb\"ccc", parser.unescapeQuotes("aaa\"bbb\"ccc"));
+ assertEquals("escaped quotes", "aaa\"bbb\"ccc", parser.unescapeQuotes("aaa\\\"bbb\\\"ccc"));
+ }
+
+ public void testParseDate() throws Exception
+ {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.YEAR, 2002);
+ calendar.set(Calendar.MONTH, Calendar.MARCH);
+ calendar.set(Calendar.DAY_OF_MONTH, 22);
+ calendar.set(Calendar.HOUR_OF_DAY, 11);
+ calendar.set(Calendar.MINUTE, 30);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ calendar.setTimeZone(new SimpleTimeZone(60 * 60 * 1000, "Apache/Jakarta"));
+
+ assertEquals("parsed date", calendar.getTime(), parser.parseDate("<*D2002-03-22 11:30:00 +0100>"));
+ }
+
+ public void testFilterData() throws Exception
+ {
+ byte[] expected = new byte[] {0x20, 0x20};
+ ArrayAssert.assertEquals("null string", null, parser.filterData(null));
+ ArrayAssert.assertEquals("data with < >", expected, parser.filterData("<2020>"));
+ ArrayAssert.assertEquals("data without < >", expected, parser.filterData("2020"));
+ ArrayAssert.assertEquals("data with space", expected, parser.filterData("20 20"));
+ ArrayAssert.assertEquals("odd length", new byte[]{9, 0x20}, parser.filterData("920"));
+ }
+}
Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestPropertyListParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestXMLPropertyListConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestXMLPropertyListConfiguration.java?rev=952622&r1=952621&r2=952622&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestXMLPropertyListConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestXMLPropertyListConfiguration.java Tue Jun 8 11:56:30 2010
@@ -1,369 +1,369 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.configuration.plist;
-
-import java.io.File;
-import java.util.Calendar;
-import java.util.Iterator;
-import java.util.List;
-import java.util.TimeZone;
-
-import junit.framework.TestCase;
-import junitx.framework.ArrayAssert;
-import junitx.framework.ListAssert;
-import junitx.framework.ObjectAssert;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationComparator;
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.FileConfiguration;
-import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.configuration.StrictConfigurationComparator;
-
-/**
- * @author Emmanuel Bourg
- * @version $Revision$, $Date$
- */
-public class TestXMLPropertyListConfiguration extends TestCase
-{
- private FileConfiguration config;
-
- protected void setUp() throws Exception
- {
- config = new XMLPropertyListConfiguration();
- config.setFileName("conf/test.plist.xml");
- config.load();
- }
-
- public void testString() throws Exception
- {
- assertEquals("'string' property", "value1", config.getString("string"));
- }
-
- public void testInteger() throws Exception
- {
- assertEquals("'integer' property", 12345678900L, config.getLong("integer"));
- }
-
- public void testReal() throws Exception
- {
- assertEquals("'real' property", -12.345, config.getDouble("real"), 0);
- }
-
- public void testBoolean() throws Exception
- {
- assertEquals("'boolean1' property", true, config.getBoolean("boolean1"));
- assertEquals("'boolean2' property", false, config.getBoolean("boolean2"));
- }
-
- public void testDictionary()
- {
- assertEquals("1st element", "value1", config.getProperty("dictionary.key1"));
- assertEquals("2nd element", "value2", config.getProperty("dictionary.key2"));
- assertEquals("3rd element", "value3", config.getProperty("dictionary.key3"));
- }
-
- public void testDate() throws Exception
- {
- Calendar calendar = Calendar.getInstance();
- calendar.clear();
- calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
- calendar.set(2005, Calendar.JANUARY, 1, 12, 0, 0);
-
- assertEquals("'date' property", calendar.getTime(), config.getProperty("date"));
-
- calendar.setTimeZone(TimeZone.getTimeZone("CET"));
- calendar.set(2002, Calendar.MARCH, 22, 11, 30, 0);
-
- assertEquals("'date-gnustep' property", calendar.getTime(), config.getProperty("date-gnustep"));
- }
-
- public void testSubset()
- {
- Configuration subset = config.subset("dictionary");
- Iterator keys = subset.getKeys();
-
- String key = (String) keys.next();
- assertEquals("1st key", "key1", key);
- assertEquals("1st value", "value1", subset.getString(key));
-
- key = (String) keys.next();
- assertEquals("2nd key", "key2", key);
- assertEquals("2nd value", "value2", subset.getString(key));
-
- key = (String) keys.next();
- assertEquals("3rd key", "key3", key);
- assertEquals("3rd value", "value3", subset.getString(key));
-
- assertFalse("more than 3 properties founds", keys.hasNext());
- }
-
- public void testArray()
- {
- Object array = config.getProperty("array");
-
- assertNotNull("array not found", array);
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
- List list = config.getList("array");
-
- assertFalse("empty array", list.isEmpty());
- assertEquals("size", 3, list.size());
- assertEquals("1st element", "value1", list.get(0));
- assertEquals("2nd element", "value2", list.get(1));
- assertEquals("3rd element", "value3", list.get(2));
- }
-
- public void testNestedArray()
- {
- String key = "nested-array";
-
- Object array = config.getProperty(key);
-
- // root array
- assertNotNull("array not found", array);
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
- List list = config.getList(key);
-
- assertFalse("empty array", list.isEmpty());
- assertEquals("size", 2, list.size());
-
- // 1st array
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(0));
- List list1 = (List) list.get(0);
- assertFalse("nested array 1 is empty", list1.isEmpty());
- assertEquals("size", 2, list1.size());
- assertEquals("1st element", "a", list1.get(0));
- assertEquals("2nd element", "b", list1.get(1));
-
- // 2nd array
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(1));
- List list2 = (List) list.get(1);
- assertFalse("nested array 2 is empty", list2.isEmpty());
- assertEquals("size", 2, list2.size());
- assertEquals("1st element", "c", list2.get(0));
- assertEquals("2nd element", "d", list2.get(1));
- }
-
- public void testDictionaryArray()
- {
- String key = "dictionary-array";
-
- Object array = config.getProperty(key);
-
- // root array
- assertNotNull("array not found", array);
- ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
- List list = config.getList(key);
-
- assertFalse("empty array", list.isEmpty());
- assertEquals("size", 2, list.size());
-
- // 1st dictionary
- ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(0));
- Configuration conf1 = (Configuration) list.get(0);
- assertFalse("configuration 1 is empty", conf1.isEmpty());
- assertEquals("configuration element", "bar", conf1.getProperty("foo"));
-
- // 2nd dictionary
- ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(1));
- Configuration conf2 = (Configuration) list.get(1);
- assertFalse("configuration 2 is empty", conf2.isEmpty());
- assertEquals("configuration element", "value", conf2.getProperty("key"));
- }
-
- public void testNested()
- {
- assertEquals("nested property", "value", config.getString("nested.node1.node2.node3"));
- }
-
- public void testSave() throws Exception
- {
- File savedFile = new File("target/testsave.plist.xml");
-
- // remove the file previously saved if necessary
- if (savedFile.exists())
- {
- assertTrue(savedFile.delete());
- }
-
- // add an array of strings to the configuration
- /*
- config.addProperty("string", "value1");
- List list = new ArrayList();
- for (int i = 1; i < 5; i++)
- {
- list.add("value" + i);
- }
- config.addProperty("newarray", list);*/
- // todo : investigate why the array structure of 'newarray' is lost in the saved file
-
- // add a map of strings
- /*
- Map map = new HashMap();
- map.put("foo", "bar");
- map.put("int", new Integer(123));
- config.addProperty("newmap", map);
- */
- // todo : a Map added to a HierarchicalConfiguration should be decomposed as list of nodes
-
- // save the configuration
- String filename = savedFile.getAbsolutePath();
- config.save(filename);
-
- assertTrue("The saved file doesn't exist", savedFile.exists());
-
- // read the configuration and compare the properties
- Configuration checkConfig = new XMLPropertyListConfiguration(new File(filename));
-
- Iterator it = config.getKeys();
- while (it.hasNext())
- {
- String key = (String) it.next();
- assertTrue("The saved configuration doesn't contain the key '" + key + "'", checkConfig.containsKey(key));
-
- Object value = checkConfig.getProperty(key);
- if (value instanceof byte[])
- {
- byte[] array = (byte[]) value;
- ArrayAssert.assertEquals("Value of the '" + key + "' property", (byte[]) config.getProperty(key), array);
- }
- else if (value instanceof List)
- {
- List list1 = (List) config.getProperty(key);
- List list2 = (List) value;
-
- assertEquals("The size of the list for the key '" + key + "' doesn't match", list1.size(), list2.size());
-
- for (int i = 0; i < list2.size(); i++)
- {
- Object value1 = list1.get(i);
- Object value2 = list2.get(i);
-
- if (value1 instanceof Configuration)
- {
- ConfigurationComparator comparator = new StrictConfigurationComparator();
- assertTrue("The dictionnary at index " + i + " for the key '" + key + "' doesn't match", comparator.compare((Configuration) value1, (Configuration) value2));
- }
- else
- {
- assertEquals("Element at index " + i + " for the key '" + key + "'", value1, value2);
- }
- }
-
- ListAssert.assertEquals("Value of the '" + key + "' property", (List) config.getProperty(key), list1);
- }
- else
- {
- assertEquals("Value of the '" + key + "' property", config.getProperty(key), checkConfig.getProperty(key));
- }
-
- }
- }
-
- public void testSaveEmptyDictionary() throws Exception
- {
- File savedFile = new File("target/testsave.plist.xml");
-
- // remove the file previously saved if necessary
- if (savedFile.exists())
- {
- assertTrue(savedFile.delete());
- }
-
- // save the configuration
- String filename = savedFile.getAbsolutePath();
- config.save(filename);
-
- assertTrue("The saved file doesn't exist", savedFile.exists());
-
- // read the configuration and compare the properties
- Configuration checkConfig = new XMLPropertyListConfiguration(new File(filename));
-
- assertEquals(null, config.getProperty("empty-dictionary"));
- assertEquals(null, checkConfig.getProperty("empty-dictionary"));
- }
-
- /**
- * Ensure that setProperty doesn't alter an array of byte
- * since it's a first class type in plist file
- */
- public void testSetDataProperty() throws Exception
- {
- byte[] expected = new byte[]{1, 2, 3, 4};
- XMLPropertyListConfiguration config = new XMLPropertyListConfiguration();
- config.setProperty("foo", expected);
- config.save("target/testdata.plist.xml");
-
- XMLPropertyListConfiguration config2 = new XMLPropertyListConfiguration("target/testdata.plist.xml");
- Object array = config2.getProperty("foo");
-
- assertNotNull("data not found", array);
- assertEquals("property type", byte[].class, array.getClass());
- ArrayAssert.assertEquals(expected, (byte[]) array);
- }
-
- /**
- * Ensure that addProperty doesn't alter an array of byte
- */
- public void testAddDataProperty() throws Exception
- {
- byte[] expected = new byte[]{1, 2, 3, 4};
- XMLPropertyListConfiguration config = new XMLPropertyListConfiguration();
- config.addProperty("foo", expected);
- config.save("target/testdata.plist.xml");
-
- XMLPropertyListConfiguration config2 = new XMLPropertyListConfiguration("target/testdata.plist.xml");
- Object array = config2.getProperty("foo");
-
- assertNotNull("data not found", array);
- assertEquals("property type", byte[].class, array.getClass());
- ArrayAssert.assertEquals(expected, (byte[]) array);
- }
-
- public void testInitCopy()
- {
- XMLPropertyListConfiguration copy = new XMLPropertyListConfiguration((HierarchicalConfiguration) config);
- StrictConfigurationComparator comp = new StrictConfigurationComparator();
- assertTrue("Configurations are not equal", comp.compare(config, copy));
- }
-
- /**
- * Tests whether a configuration can be loaded that does not start with a
- * <code>dict</code> element. This test case is related to
- * CONFIGURATION-405.
- */
- public void testLoadNoDict() throws ConfigurationException
- {
- XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration();
- plist.setFileName("conf/test2.plist.xml");
- plist.load();
- assertFalse("Configuration is empty", plist.isEmpty());
- }
-
- /**
- * Tests whether a configuration that does not start with a
- * <code>dict</code> element can be loaded from a constructor. This test
- * case is related to CONFIGURATION-405.
- */
- public void testLoadNoDictConstr() throws ConfigurationException
- {
- XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration(
- "conf/test2.plist.xml");
- assertFalse("Configuration is empty", plist.isEmpty());
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.configuration.plist;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TimeZone;
+
+import junit.framework.TestCase;
+import junitx.framework.ArrayAssert;
+import junitx.framework.ListAssert;
+import junitx.framework.ObjectAssert;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationComparator;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.FileConfiguration;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.configuration.StrictConfigurationComparator;
+
+/**
+ * @author Emmanuel Bourg
+ * @version $Revision$, $Date$
+ */
+public class TestXMLPropertyListConfiguration extends TestCase
+{
+ private FileConfiguration config;
+
+ protected void setUp() throws Exception
+ {
+ config = new XMLPropertyListConfiguration();
+ config.setFileName("conf/test.plist.xml");
+ config.load();
+ }
+
+ public void testString() throws Exception
+ {
+ assertEquals("'string' property", "value1", config.getString("string"));
+ }
+
+ public void testInteger() throws Exception
+ {
+ assertEquals("'integer' property", 12345678900L, config.getLong("integer"));
+ }
+
+ public void testReal() throws Exception
+ {
+ assertEquals("'real' property", -12.345, config.getDouble("real"), 0);
+ }
+
+ public void testBoolean() throws Exception
+ {
+ assertEquals("'boolean1' property", true, config.getBoolean("boolean1"));
+ assertEquals("'boolean2' property", false, config.getBoolean("boolean2"));
+ }
+
+ public void testDictionary()
+ {
+ assertEquals("1st element", "value1", config.getProperty("dictionary.key1"));
+ assertEquals("2nd element", "value2", config.getProperty("dictionary.key2"));
+ assertEquals("3rd element", "value3", config.getProperty("dictionary.key3"));
+ }
+
+ public void testDate() throws Exception
+ {
+ Calendar calendar = Calendar.getInstance();
+ calendar.clear();
+ calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
+ calendar.set(2005, Calendar.JANUARY, 1, 12, 0, 0);
+
+ assertEquals("'date' property", calendar.getTime(), config.getProperty("date"));
+
+ calendar.setTimeZone(TimeZone.getTimeZone("CET"));
+ calendar.set(2002, Calendar.MARCH, 22, 11, 30, 0);
+
+ assertEquals("'date-gnustep' property", calendar.getTime(), config.getProperty("date-gnustep"));
+ }
+
+ public void testSubset()
+ {
+ Configuration subset = config.subset("dictionary");
+ Iterator keys = subset.getKeys();
+
+ String key = (String) keys.next();
+ assertEquals("1st key", "key1", key);
+ assertEquals("1st value", "value1", subset.getString(key));
+
+ key = (String) keys.next();
+ assertEquals("2nd key", "key2", key);
+ assertEquals("2nd value", "value2", subset.getString(key));
+
+ key = (String) keys.next();
+ assertEquals("3rd key", "key3", key);
+ assertEquals("3rd value", "value3", subset.getString(key));
+
+ assertFalse("more than 3 properties founds", keys.hasNext());
+ }
+
+ public void testArray()
+ {
+ Object array = config.getProperty("array");
+
+ assertNotNull("array not found", array);
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
+ List list = config.getList("array");
+
+ assertFalse("empty array", list.isEmpty());
+ assertEquals("size", 3, list.size());
+ assertEquals("1st element", "value1", list.get(0));
+ assertEquals("2nd element", "value2", list.get(1));
+ assertEquals("3rd element", "value3", list.get(2));
+ }
+
+ public void testNestedArray()
+ {
+ String key = "nested-array";
+
+ Object array = config.getProperty(key);
+
+ // root array
+ assertNotNull("array not found", array);
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
+ List list = config.getList(key);
+
+ assertFalse("empty array", list.isEmpty());
+ assertEquals("size", 2, list.size());
+
+ // 1st array
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(0));
+ List list1 = (List) list.get(0);
+ assertFalse("nested array 1 is empty", list1.isEmpty());
+ assertEquals("size", 2, list1.size());
+ assertEquals("1st element", "a", list1.get(0));
+ assertEquals("2nd element", "b", list1.get(1));
+
+ // 2nd array
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, list.get(1));
+ List list2 = (List) list.get(1);
+ assertFalse("nested array 2 is empty", list2.isEmpty());
+ assertEquals("size", 2, list2.size());
+ assertEquals("1st element", "c", list2.get(0));
+ assertEquals("2nd element", "d", list2.get(1));
+ }
+
+ public void testDictionaryArray()
+ {
+ String key = "dictionary-array";
+
+ Object array = config.getProperty(key);
+
+ // root array
+ assertNotNull("array not found", array);
+ ObjectAssert.assertInstanceOf("the array element is not parsed as a List", List.class, array);
+ List list = config.getList(key);
+
+ assertFalse("empty array", list.isEmpty());
+ assertEquals("size", 2, list.size());
+
+ // 1st dictionary
+ ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(0));
+ Configuration conf1 = (Configuration) list.get(0);
+ assertFalse("configuration 1 is empty", conf1.isEmpty());
+ assertEquals("configuration element", "bar", conf1.getProperty("foo"));
+
+ // 2nd dictionary
+ ObjectAssert.assertInstanceOf("the dict element is not parsed as a Configuration", Configuration.class, list.get(1));
+ Configuration conf2 = (Configuration) list.get(1);
+ assertFalse("configuration 2 is empty", conf2.isEmpty());
+ assertEquals("configuration element", "value", conf2.getProperty("key"));
+ }
+
+ public void testNested()
+ {
+ assertEquals("nested property", "value", config.getString("nested.node1.node2.node3"));
+ }
+
+ public void testSave() throws Exception
+ {
+ File savedFile = new File("target/testsave.plist.xml");
+
+ // remove the file previously saved if necessary
+ if (savedFile.exists())
+ {
+ assertTrue(savedFile.delete());
+ }
+
+ // add an array of strings to the configuration
+ /*
+ config.addProperty("string", "value1");
+ List list = new ArrayList();
+ for (int i = 1; i < 5; i++)
+ {
+ list.add("value" + i);
+ }
+ config.addProperty("newarray", list);*/
+ // todo : investigate why the array structure of 'newarray' is lost in the saved file
+
+ // add a map of strings
+ /*
+ Map map = new HashMap();
+ map.put("foo", "bar");
+ map.put("int", new Integer(123));
+ config.addProperty("newmap", map);
+ */
+ // todo : a Map added to a HierarchicalConfiguration should be decomposed as list of nodes
+
+ // save the configuration
+ String filename = savedFile.getAbsolutePath();
+ config.save(filename);
+
+ assertTrue("The saved file doesn't exist", savedFile.exists());
+
+ // read the configuration and compare the properties
+ Configuration checkConfig = new XMLPropertyListConfiguration(new File(filename));
+
+ Iterator it = config.getKeys();
+ while (it.hasNext())
+ {
+ String key = (String) it.next();
+ assertTrue("The saved configuration doesn't contain the key '" + key + "'", checkConfig.containsKey(key));
+
+ Object value = checkConfig.getProperty(key);
+ if (value instanceof byte[])
+ {
+ byte[] array = (byte[]) value;
+ ArrayAssert.assertEquals("Value of the '" + key + "' property", (byte[]) config.getProperty(key), array);
+ }
+ else if (value instanceof List)
+ {
+ List list1 = (List) config.getProperty(key);
+ List list2 = (List) value;
+
+ assertEquals("The size of the list for the key '" + key + "' doesn't match", list1.size(), list2.size());
+
+ for (int i = 0; i < list2.size(); i++)
+ {
+ Object value1 = list1.get(i);
+ Object value2 = list2.get(i);
+
+ if (value1 instanceof Configuration)
+ {
+ ConfigurationComparator comparator = new StrictConfigurationComparator();
+ assertTrue("The dictionnary at index " + i + " for the key '" + key + "' doesn't match", comparator.compare((Configuration) value1, (Configuration) value2));
+ }
+ else
+ {
+ assertEquals("Element at index " + i + " for the key '" + key + "'", value1, value2);
+ }
+ }
+
+ ListAssert.assertEquals("Value of the '" + key + "' property", (List) config.getProperty(key), list1);
+ }
+ else
+ {
+ assertEquals("Value of the '" + key + "' property", config.getProperty(key), checkConfig.getProperty(key));
+ }
+
+ }
+ }
+
+ public void testSaveEmptyDictionary() throws Exception
+ {
+ File savedFile = new File("target/testsave.plist.xml");
+
+ // remove the file previously saved if necessary
+ if (savedFile.exists())
+ {
+ assertTrue(savedFile.delete());
+ }
+
+ // save the configuration
+ String filename = savedFile.getAbsolutePath();
+ config.save(filename);
+
+ assertTrue("The saved file doesn't exist", savedFile.exists());
+
+ // read the configuration and compare the properties
+ Configuration checkConfig = new XMLPropertyListConfiguration(new File(filename));
+
+ assertEquals(null, config.getProperty("empty-dictionary"));
+ assertEquals(null, checkConfig.getProperty("empty-dictionary"));
+ }
+
+ /**
+ * Ensure that setProperty doesn't alter an array of byte
+ * since it's a first class type in plist file
+ */
+ public void testSetDataProperty() throws Exception
+ {
+ byte[] expected = new byte[]{1, 2, 3, 4};
+ XMLPropertyListConfiguration config = new XMLPropertyListConfiguration();
+ config.setProperty("foo", expected);
+ config.save("target/testdata.plist.xml");
+
+ XMLPropertyListConfiguration config2 = new XMLPropertyListConfiguration("target/testdata.plist.xml");
+ Object array = config2.getProperty("foo");
+
+ assertNotNull("data not found", array);
+ assertEquals("property type", byte[].class, array.getClass());
+ ArrayAssert.assertEquals(expected, (byte[]) array);
+ }
+
+ /**
+ * Ensure that addProperty doesn't alter an array of byte
+ */
+ public void testAddDataProperty() throws Exception
+ {
+ byte[] expected = new byte[]{1, 2, 3, 4};
+ XMLPropertyListConfiguration config = new XMLPropertyListConfiguration();
+ config.addProperty("foo", expected);
+ config.save("target/testdata.plist.xml");
+
+ XMLPropertyListConfiguration config2 = new XMLPropertyListConfiguration("target/testdata.plist.xml");
+ Object array = config2.getProperty("foo");
+
+ assertNotNull("data not found", array);
+ assertEquals("property type", byte[].class, array.getClass());
+ ArrayAssert.assertEquals(expected, (byte[]) array);
+ }
+
+ public void testInitCopy()
+ {
+ XMLPropertyListConfiguration copy = new XMLPropertyListConfiguration((HierarchicalConfiguration) config);
+ StrictConfigurationComparator comp = new StrictConfigurationComparator();
+ assertTrue("Configurations are not equal", comp.compare(config, copy));
+ }
+
+ /**
+ * Tests whether a configuration can be loaded that does not start with a
+ * <code>dict</code> element. This test case is related to
+ * CONFIGURATION-405.
+ */
+ public void testLoadNoDict() throws ConfigurationException
+ {
+ XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration();
+ plist.setFileName("conf/test2.plist.xml");
+ plist.load();
+ assertFalse("Configuration is empty", plist.isEmpty());
+ }
+
+ /**
+ * Tests whether a configuration that does not start with a
+ * <code>dict</code> element can be loaded from a constructor. This test
+ * case is related to CONFIGURATION-405.
+ */
+ public void testLoadNoDictConstr() throws ConfigurationException
+ {
+ XMLPropertyListConfiguration plist = new XMLPropertyListConfiguration(
+ "conf/test2.plist.xml");
+ assertFalse("Configuration is empty", plist.isEmpty());
+ }
+}
Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/plist/TestXMLPropertyListConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/reloading/FileRandomReloadingStrategy.java
------------------------------------------------------------------------------
svn:eol-style = native