You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2009/08/08 20:50:07 UTC
svn commit: r802435 - in
/commons/proper/configuration/branches/configuration2_experimental/src:
main/java/org/apache/commons/configuration2/base/
test/java/org/apache/commons/configuration2/base/
Author: oheger
Date: Sat Aug 8 18:50:06 2009
New Revision: 802435
URL: http://svn.apache.org/viewvc?rev=802435&view=rev
Log:
Rewrite of InMemoryConfigurationSource. Set focus on the methods required by HierarchicalConfigurationSource.
Modified:
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/InMemoryConfigurationSource.java
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/base/TestInMemoryConfigurationSource.java
Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/InMemoryConfigurationSource.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/InMemoryConfigurationSource.java?rev=802435&r1=802434&r2=802435&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/InMemoryConfigurationSource.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/base/InMemoryConfigurationSource.java Sat Aug 8 18:50:06 2009
@@ -17,6 +17,7 @@
package org.apache.commons.configuration2.base;
import org.apache.commons.configuration2.expr.ConfigurationNodeHandler;
+import org.apache.commons.configuration2.expr.NodeHandler;
import org.apache.commons.configuration2.tree.ConfigurationNode;
import org.apache.commons.configuration2.tree.DefaultConfigurationNode;
@@ -35,9 +36,16 @@
* @author Commons Configuration team
* @version $Id$
*/
-public class InMemoryConfigurationSource extends
- AbstractHierarchicalConfigurationSource<ConfigurationNode>
+public class InMemoryConfigurationSource implements
+ HierarchicalConfigurationSource<ConfigurationNode>
{
+ /**
+ * The node handler used by this configuration source class. Because {@code
+ * ConfigurationNodeHandler} is stateless an instance can be shared between
+ * all {@code InMemoryConfigurationSource} instances.
+ */
+ private static final NodeHandler<ConfigurationNode> NODE_HANDLER = new ConfigurationNodeHandler();
+
/** Stores the root configuration node. */
private volatile ConfigurationNode rootNode;
@@ -46,7 +54,6 @@
*/
public InMemoryConfigurationSource()
{
- super(new ConfigurationNodeHandler());
rootNode = new DefaultConfigurationNode();
}
@@ -68,7 +75,6 @@
* @param root the new root node (must not be <b>null</b>)
* @throws IllegalArgumentException if the root node is <b>null</b>
*/
- @Override
public void setRootNode(ConfigurationNode root)
{
if (root == null)
@@ -78,4 +84,36 @@
rootNode = root;
}
+
+ public void addConfigurationSourceListener(ConfigurationSourceListener l)
+ {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ /**
+ * Removes all data from this configuration source. This implementation
+ * simply creates a new, empty root node.
+ */
+ public void clear()
+ {
+ rootNode = new DefaultConfigurationNode();
+ }
+
+ /**
+ * Returns the {@code NodeHandler} used by this configuration source.
+ *
+ * @return the {@code NodeHandler}
+ */
+ public NodeHandler<ConfigurationNode> getNodeHandler()
+ {
+ return NODE_HANDLER;
+ }
+
+ public boolean removeConfigurationSourceListener(
+ ConfigurationSourceListener l)
+ {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
}
Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/base/TestInMemoryConfigurationSource.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/base/TestInMemoryConfigurationSource.java?rev=802435&r1=802434&r2=802435&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/base/TestInMemoryConfigurationSource.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/base/TestInMemoryConfigurationSource.java Sat Aug 8 18:50:06 2009
@@ -16,50 +16,20 @@
*/
package org.apache.commons.configuration2.base;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
import junit.framework.TestCase;
-import org.apache.commons.configuration2.expr.NodeHandler;
-import org.apache.commons.configuration2.expr.NodeList;
-import org.apache.commons.configuration2.expr.NodeVisitorAdapter;
+import org.apache.commons.configuration2.expr.ConfigurationNodeHandler;
import org.apache.commons.configuration2.tree.ConfigurationNode;
import org.apache.commons.configuration2.tree.DefaultConfigurationNode;
/**
- * Test class for {@link InMemoryConfigurationSource}. This class also tests
- * functionality provided by the base class.
+ * Test class for {@link InMemoryConfigurationSource}.
*
* @author Commons Configuration team
* @version $Id$
*/
public class TestInMemoryConfigurationSource extends TestCase
{
- /** An array with the names of the test TABLES. */
- private static final String[] TABLES = {
- "users", "documents"
- };
-
- /** An array with the names of the table FIELDS. */
- private static final String[][] FIELDS = {
- {
- "uid", "uname", "firstName", "lastName", "email"
- }, {
- "docid", "name", "creationDate", "authorID", "version"
- }
- };
-
- /** An array with flags whether the test TABLES are system TABLES. */
- private static final Boolean[] SYS_TABLES = {
- Boolean.TRUE, Boolean.FALSE
- };
-
/** The source to be tested. */
private InMemoryConfigurationSource source;
@@ -71,95 +41,28 @@
protected void setUp() throws Exception
{
super.setUp();
-
- ConfigurationNode nodeTables = createNode("tables", null);
- for (int i = 0; i < TABLES.length; i++)
- {
- ConfigurationNode nodeTable = createNode("table", null);
- nodeTables.addChild(nodeTable);
- ConfigurationNode nodeName = createNode("name", TABLES[i]);
- nodeTable.addChild(nodeName);
- ConfigurationNode attrType = createNode("sysTab", SYS_TABLES[i]);
- nodeTable.addAttribute(attrType);
- ConfigurationNode nodeFields = createNode("fields", null);
- nodeTable.addChild(nodeFields);
-
- for (int j = 0; j < FIELDS[i].length; j++)
- {
- nodeFields.addChild(createFieldNode(FIELDS[i][j]));
- }
- }
-
source = new InMemoryConfigurationSource();
- source.getRootNode().addChild(nodeTables);
}
/**
- * Helper method for creating a field node with its children.
- *
- * @param name the name of the field
- * @return the field node
+ * Helper method for checking an empty root node.
*/
- private static ConfigurationNode createFieldNode(String name)
+ private void checkEmptyRoot()
{
- ConfigurationNode fld = createNode("field", null);
- fld.addChild(createNode("name", name));
- return fld;
+ ConfigurationNode root = source.getRootNode();
+ assertNull("Root node has a name", root.getName());
+ assertNull("Root node has a value", root.getValue());
+ assertNull("Root node has a reference", root.getReference());
+ assertEquals("Root node has attributes", 0, root.getAttributeCount());
+ assertEquals("Root node has children", 0, root.getChildrenCount());
}
/**
- * Helper method for creating a configuration node.
- *
- * @param name the node's name
- * @param value the node's value
- * @return the new node
+ * Tests a newly created instance.
*/
- private static ConfigurationNode createNode(String name, Object value)
+ public void testInit()
{
- ConfigurationNode node = new DefaultConfigurationNode(name);
- node.setValue(value);
- return node;
- }
-
- /**
- * Returns the number of nodes that are stored in the test source.
- * Optionally only the nodes with a value are counted.
- *
- * @param withValue if true, only the nodes with a value are taken into
- * account
- * @return the number of nodes
- */
- private static int nodeCount(boolean withValue)
- {
- int tabNodes = 2; // each table has a name and system flag
- if (!withValue)
- {
- tabNodes += 2; // also table and fields node
- }
- int count = TABLES.length * tabNodes;
-
- int fieldNodes = 1; // the name of each field
- if (!withValue)
- {
- fieldNodes += 1; // also the field node itself
- }
- for (int i = 0; i < FIELDS.length; i++)
- {
- count += FIELDS[i].length * fieldNodes; // the number of fields
- }
- return count;
- }
-
- /**
- * Helper method for determining the number of values of a given property.
- * This method expects that the property value is a collection.
- *
- * @param key the property key
- * @return the number of values stored for this property
- */
- private int valueCount(String key)
- {
- return ((Collection<?>) source.getProperty(key)).size();
+ checkEmptyRoot();
}
/**
@@ -189,604 +92,25 @@
}
/**
- * Tests visiting the root node.
- */
- public void testVisitRoot()
- {
- CountVisitor visitor = new CountVisitor();
- source.visit(null, visitor);
- visitor.check(nodeCount(false));
- }
-
- /**
- * Tests visiting only a part of the node structure.
- */
- public void testVisitPartly()
- {
- NodeList<ConfigurationNode> list = source
- .find("tables.table(0).fields.field(1)");
- assertEquals("Wrong size", 1, list.size());
- CountVisitor visitor = new CountVisitor();
- source.visit(list.getNode(0), visitor);
- visitor.check(2);
- }
-
- /**
- * Tests the isEmpty() method when the source contains data.
- */
- public void testIsEmptyDataAvailable()
- {
- assertFalse("Source is empty", source.isEmpty());
- }
-
- /**
- * Tests isEmpty() when the source does not contain data.
- */
- public void testIsEmptyNoData()
- {
- source.setRootNode(new DefaultConfigurationNode());
- assertTrue("Source not empty", source.isEmpty());
- }
-
- /**
- * Tests the size of the source.
- */
- public void testSize()
- {
- assertEquals("Wrong size", nodeCount(true), source.size());
- }
-
- /**
- * Tests the size of the source when there is only an empty root node.
- */
- public void testSizeEmpty()
- {
- source.setRootNode(new DefaultConfigurationNode());
- assertEquals("Wrong size", 0, source.size());
- }
-
- /**
- * Tests accessing properties.
- */
- public void testGetProperty()
- {
- Object prop = source.getProperty("tables.table(0).fields.field.name");
- assertNotNull("No field names found for tab 0", prop);
- assertTrue("No multiple field names for tab 0",
- prop instanceof Collection);
- assertEquals("Wrong number of field names for tab 0", 5,
- ((Collection<?>) prop).size());
-
- prop = source.getProperty("tables.table.fields.field.name");
- assertNotNull("No field names found", prop);
- assertTrue("No multiple field names", prop instanceof Collection);
- assertEquals("Wrong number of field names", 10, ((Collection<?>) prop)
- .size());
-
- prop = source.getProperty("tables.table.fields.field(3).name");
- assertNotNull("No names for field 3 found", prop);
- assertTrue("No multiple field 3 names", prop instanceof Collection);
- assertEquals("Wrong number of field 3 names", 2, ((Collection<?>) prop)
- .size());
-
- prop = source.getProperty("tables.table(1).fields.field(2).name");
- assertEquals("Wrong field name", "creationDate", prop.toString());
- }
-
- /**
- * Tests getProperty() for an unknown property.
- */
- public void testGetPropertyUnknown()
- {
- assertNull("Got value for unknown property", source
- .getProperty("TABLES.table.resultset"));
- }
-
- /**
- * Tests getProperty() for a property that is stored, but has no value.
- */
- public void testGetPropertyUndefined()
- {
- assertNull("Got value for undefined property", source
- .getProperty("tables.table.fields.field"));
- }
-
- /**
- * Tests setting property values.
- */
- public void testSetProperty()
- {
- source.setProperty("tables.table(0).name", "resources");
- assertEquals("Name not changed", "resources", source
- .getProperty("tables.table(0).name"));
- source.setProperty("tables.table.name", Arrays.asList(new String[] {
- "tab1", "tab2"
- }));
- assertEquals("Tab 1 name not changed", "tab1", source
- .getProperty("tables.table(0).name"));
- assertEquals("Tab 2 name not changed", "tab2", source
- .getProperty("tables.table(1).name"));
-
- final Integer[] testValues = new Integer[] {
- 2, 4, 8, 16
- };
- source.setProperty("test.items.item", Arrays.asList(testValues));
- List<?> values = (List<?>) source.getProperty("test.items.item");
- assertEquals("Wrong number of test items", testValues.length, values
- .size());
- assertEquals("Wrong test item", testValues[2], source
- .getProperty("test.items.item(2)"));
- final Integer newValue = 6;
- source.setProperty("test.items.item(2)", newValue);
- assertEquals("Item not changed", newValue, source
- .getProperty("test.items.item(2)"));
- final Integer[] moreValues = new Integer[] {
- 7, 9, 11
- };
- source.setProperty("test.items.item(2)", Arrays.asList(moreValues));
- values = (List<?>) source.getProperty("test.items.item");
- assertEquals("Wrong number of added items", 6, values.size());
-
- source.setProperty("test", Boolean.TRUE);
- source.setProperty("test.items", "01/01/05");
- values = (List<?>) source.getProperty("test.items.item");
- assertEquals("Items were changed", 6, values.size());
- assertEquals("Wrong boolean", Boolean.TRUE, source.getProperty("test"));
- assertEquals("Wrong string", "01/01/05", source
- .getProperty("test.items"));
-
- final Integer replaceValue = 42;
- source.setProperty("test.items.item", replaceValue);
- assertEquals("Items not replaced", replaceValue, source
- .getProperty("test.items.item"));
- }
-
- /**
- * Tests removing properties.
- */
- public void testClearProperty()
- {
- source.clearProperty("tables.table(0).fields.field(0).name");
- assertEquals("Field name not removed", "uname", source
- .getProperty("tables.table(0).fields.field(0).name"));
- source.clearProperty("tables.table(0).name");
- assertFalse("Table name still present", source
- .containsKey("tables.table(0).name"));
- assertEquals("Wrong field name", "firstName", source
- .getProperty("tables.table(0).fields.field(1).name"));
- assertEquals("Wrong table name", "documents", source
- .getProperty("tables.table.name"));
- source.clearProperty("tables.table");
- assertEquals("Table name affected", "documents", source
- .getProperty("tables.table.name"));
-
- source.addProperty("test", "first");
- source.addProperty("test.level", "second");
- source.clearProperty("test");
- assertEquals("Sub property was changed", "second", source
- .getProperty("test.level"));
- assertFalse("Property not removed", source.containsKey("test"));
- }
-
- /**
- * Tests clearing whole property trees.
- */
- public void testClearTree()
- {
- Object prop = source.getProperty("tables.table(0).fields.field.name");
- assertNotNull("Property not found", prop);
- source.clearTree("tables.table(0).fields.field(3)");
- prop = source.getProperty("tables.table(0).fields.field.name");
- assertNotNull("Property not found (2)", prop);
- assertTrue("Not multiple values (1)", prop instanceof Collection);
- assertEquals("Element not removed", 4, ((Collection<?>) prop).size());
-
- source.clearTree("tables.table(0).fields");
- assertNull("Sub property still found", source
- .getProperty("tables.table(0).fields.field.name"));
- prop = source.getProperty("tables.table.fields.field.name");
- assertNotNull("Property not found (3)", prop);
- assertTrue("Not multiple values (2)", prop instanceof Collection);
- assertEquals("Wrong number of elements", 5, ((Collection<?>) prop)
- .size());
-
- source.clearTree("tables.table(1)");
- assertNull("Still found table names", source
- .getProperty("tables.table.fields.field.name"));
- }
-
- /**
- * Tests removing more complex node structures.
- */
- public void testClearTreeComplex()
- {
- final int count = 5;
- // create the structure
- for (int idx = 0; idx < count; idx++)
- {
- source.addProperty("indexList.index(-1)[@default]", Boolean.FALSE);
- source.addProperty("indexList.index[@name]", "test" + idx);
- source.addProperty("indexList.index.dir", "testDir" + idx);
- }
- assertEquals("Wrong number of nodes", count,
- valueCount("indexList.index[@name]"));
-
- // Remove a sub tree
- boolean found = false;
- for (int idx = 0; true; idx++)
- {
- String name = (String) source.getProperty("indexList.index(" + idx
- + ")[@name]");
- if (name == null)
- {
- break;
- }
- if ("test3".equals(name))
- {
- assertEquals("Wrong dir", "testDir3", source
- .getProperty("indexList.index(" + idx + ").dir"));
- source.clearTree("indexList.index(" + idx + ")");
- found = true;
- }
- }
- assertTrue("Key to remove not found", found);
- assertEquals("Wrong number of nodes after remove", count - 1,
- valueCount("indexList.index[@name]"));
- assertEquals("Wrong number of dir nodes after remove", count - 1,
- valueCount("indexList.index.dir"));
-
- // Verify
- for (int idx = 0; true; idx++)
- {
- String name = (String) source.getProperty("indexList.index(" + idx
- + ")[@name]");
- if (name == null)
- {
- break;
- }
- if ("test3".equals(name))
- {
- fail("Key was not removed!");
- }
- }
- }
-
- /**
- * Tests the clearTree() method on a hierarchical structure of nodes.
- */
- public void testClearTreeHierarchy()
- {
- source.addProperty("a.b.c", "c");
- source.addProperty("a.b.c.d", "d");
- source.addProperty("a.b.c.d.e", "e");
- source.clearTree("a.b.c");
- assertFalse("Property not removed", source.containsKey("a.b.c"));
- assertFalse("Sub property not removed", source.containsKey("a.b.c.d"));
- }
-
- /**
- * Tests for the containsKey() method.
- */
- public void testContainsKey()
- {
- assertTrue("No table name 1", source
- .containsKey("tables.table(0).name"));
- assertTrue("No table name 2", source
- .containsKey("tables.table(1).name"));
- assertFalse("Got name 3", source.containsKey("tables.table(2).name"));
-
- assertTrue("No field name", source
- .containsKey("tables.table(0).fields.field.name"));
- assertFalse("Got a field", source
- .containsKey("tables.table(0).fields.field"));
- source.clearTree("tables.table(0).fields");
- assertFalse("Got fields after remove", source
- .containsKey("tables.table(0).fields.field.name"));
-
- assertTrue("No more names", source
- .containsKey("tables.table.fields.field.name"));
- }
-
- /**
- * Tests the keys returned by the configuration source.
- */
- public void testGetKeys()
- {
- List<String> keys = new ArrayList<String>();
- for (Iterator<String> it = source.getKeys(); it.hasNext();)
- {
- keys.add(it.next());
- }
-
- assertEquals("Wrong number of keys", 3, keys.size());
- assertTrue("No table names", keys.contains("tables.table.name"));
- assertTrue("No field names", keys
- .contains("tables.table.fields.field.name"));
- assertTrue("No sys tab", keys.contains("tables.table[@sysTab]"));
- }
-
- /**
- * Tests whether keys are returned in the order they are added.
- */
- public void testGetKeysOrdered()
- {
- source.addProperty("order.key1", "value1");
- source.addProperty("order.key2", "value2");
- source.addProperty("order.key3", "value3");
-
- Iterator<String> it = source.getKeys("order");
- assertEquals("1st key", "order.key1", it.next());
- assertEquals("2nd key", "order.key2", it.next());
- assertEquals("3rd key", "order.key3", it.next());
- }
-
- /**
- * Tests the getKeys() method with a string prefix.
- */
- public void testGetKeysString()
- {
- // add some more properties to make it more interesting
- source.addProperty("tables.table(0).fields.field(1).type", "VARCHAR");
- source.addProperty("tables.table(0)[@type]", "system");
- source.addProperty("tables.table(0).size", "42");
- source.addProperty("tables.table(0).fields.field(0).size", "128");
- source.addProperty("connections.connection.param.url", "url1");
- source.addProperty("connections.connection.param.user", "me");
- source.addProperty("connections.connection.param.pwd", "secret");
- source.addProperty("connections.connection(-1).param.url", "url2");
- source.addProperty("connections.connection(1).param.user", "guest");
-
- checkKeys("tables.table(1)", new String[] {
- "name", "fields.field.name", "tables.table(1)[@sysTab]"
- });
- checkKeys("tables.table(0)", new String[] {
- "name", "fields.field.name", "tables.table(0)[@type]",
- "tables.table(0)[@sysTab]", "size", "fields.field.type",
- "fields.field.size"
- });
- checkKeys("connections.connection(0).param", new String[] {
- "url", "user", "pwd"
- });
- checkKeys("connections.connection(1).param", new String[] {
- "url", "user"
- });
- }
-
- /**
- * Tests getKeys() with a prefix when the prefix matches exactly a key.
- */
- public void testGetKeysWithKeyAsPrefix()
- {
- source.addProperty("order.key1", "value1");
- source.addProperty("order.key2", "value2");
- Iterator<String> it = source.getKeys("order.key1");
- assertTrue("no key found", it.hasNext());
- assertEquals("1st key", "order.key1", it.next());
- assertFalse("more keys than expected", it.hasNext());
- }
-
- /**
- * Tests getKeys() with a prefix when the prefix matches exactly a key, and
- * there are multiple keys starting with this prefix.
- */
- public void testGetKeysWithKeyAsPrefixMultiple()
- {
- source.addProperty("order.key1", "value1");
- source.addProperty("order.key1.test", "value2");
- source.addProperty("order.key1.test.complex", "value2");
- Iterator<String> it = source.getKeys("order.key1");
- assertEquals("Wrong key 1", "order.key1", it.next());
- assertEquals("Wrong key 2", "order.key1.test", it.next());
- assertEquals("Wrong key 3", "order.key1.test.complex", it.next());
- assertFalse("More keys than expected", it.hasNext());
- }
-
- /**
- * Helper method for testing the getKeys(String) method.
- *
- * @param prefix the key to pass into getKeys()
- * @param expected the expected result
- */
- private void checkKeys(String prefix, String[] expected)
- {
- Set<String> values = new HashSet<String>();
- for (String exp : expected)
- {
- values.add((exp.startsWith(prefix)) ? exp : prefix + "." + exp);
- }
-
- Iterator<String> itKeys = source.getKeys(prefix);
- while (itKeys.hasNext())
- {
- String key = itKeys.next();
- if (!values.contains(key))
- {
- fail("Found unexpected key: " + key);
- }
- else
- {
- values.remove(key);
- }
- }
-
- assertTrue("Remaining keys " + values, values.isEmpty());
- }
-
- /**
- * Tests adding different new properties.
- */
- public void testAddProperty()
- {
- source.addProperty("tables.table(0).fields.field(-1).name", "phone");
- assertEquals("Field phone not added", 6,
- valueCount("tables.table(0).fields.field.name"));
-
- source.addProperty("tables.table(0).fields.field.name", "fax");
- Object prop = source.getProperty("tables.table.fields.field(5).name");
- assertTrue("Not multiple values", prop instanceof List);
- List<?> list = (List<?>) prop;
- assertEquals("Wrong element 0", "phone", list.get(0));
- assertEquals("Wrong element 1", "fax", list.get(1));
-
- source.addProperty("tables.table(-1).name", "config");
- prop = source.getProperty("tables.table.name");
- assertTrue("Not multiple table names", prop instanceof Collection);
- assertEquals("Wrong number of tables", 3, ((Collection<?>) prop).size());
- source.addProperty("tables.table(2).fields.field(0).name", "cid");
- source.addProperty("tables.table(2).fields.field(-1).name", "confName");
- assertEquals("Wrong number of fields in new table", 2,
- valueCount("tables.table(2).fields.field.name"));
- assertEquals("Wrong name of new field", "confName", source
- .getProperty("tables.table(2).fields.field(1).name"));
-
- source.addProperty("connection.user", "scott");
- source.addProperty("connection.passwd", "tiger");
- assertEquals("Wrong password", "tiger", source
- .getProperty("connection.passwd"));
- }
-
- /**
- * Tests addProperty() when an invalid key is passed in. This should cause
- * an exception.
- */
- public void testAddPropertyInvalidKey()
- {
- try
- {
- source.addProperty(".", "InvalidKey");
- fail("Could add invalid key!");
- }
- catch (IllegalArgumentException iex)
- {
- // ok
- }
- }
-
- /**
- * Tests counting the values stored for a property key.
- */
- public void testValueCount()
- {
- assertEquals("Wrong fields in tab 0", 5, source
- .valueCount("tables.table(0).fields.field.name"));
- assertEquals("Wrong fields in tab 1", 5, source
- .valueCount("tables.table(1).fields.field.name"));
- assertEquals("Wrong table names", 2, source
- .valueCount("tables.table.name"));
- assertEquals("Wrong name count for tab ", 1, source
- .valueCount("tables.table(0).name"));
- }
-
- /**
- * Tests the valueCount() method when the passed in key does not exist.
- */
- public void testValueCountNonExisting()
- {
- assertEquals("Wrong value for non existing key", 0, source
- .valueCount("non.existing.key"));
- }
-
- /**
- * Tests the valueCount() method when the passed in key references a node
- * that does not have a value.
- */
- public void testValueCountUndefined()
- {
- assertEquals("Wrong result for key without a value", 0, source
- .valueCount("tables.table(1).fields.field(1)"));
- }
-
- /**
- * Tests querying the number of values for attributes with multiple values.
- */
- public void testValueCountAttributesMultipleValues()
- {
- source.addProperty("tables.table(0)[@mode]", "test");
- source.addProperty("tables.table(0)[@mode]", "production");
- source.addProperty("tables.table(1)[@mode]", "staging");
- assertEquals("Wrong value count", 3, source
- .valueCount("tables.table[@mode]"));
- }
-
- /**
- * Tests adding multiple values to an attribute.
- */
- public void testAddMultipleAttributeValues()
- {
- final String attrKey = "tables.table(0)[@mode]";
- source.addProperty(attrKey, "system");
- source.addProperty(attrKey, "security");
- List<?> values = (List<?>) source.getProperty(attrKey);
- assertEquals("Wrong number of values", 2, values.size());
- assertEquals("Wrong value 1", "system", values.get(0));
- assertEquals("Wrong value 2", "security", values.get(1));
- }
-
- /**
- * Tests overriding an attribute with multiple values.
- */
- public void testOverrideMultipleAttributeValues()
- {
- final String attrKey = "tables.table(0)[@mode]";
- testAddMultipleAttributeValues(); // set attribute values
- source.setProperty(attrKey, "NewValue");
- assertEquals("Wrong changed value", "NewValue", source
- .getProperty(attrKey));
- }
-
- /**
- * Tests find() for a null key. This should return the root node.
- */
- public void testFindNull()
- {
- NodeList<ConfigurationNode> list = source.find(null);
- assertEquals("Wrong number of elements", 1, list.size());
- assertEquals("Wrong result for null key", source.getRootNode(), list
- .getNode(0));
- }
-
- /**
- * Tests clearing the whole source.
+ * Tests the clear() implementation.
*/
public void testClear()
{
+ source.getRootNode().setValue("Test");
+ source.getRootNode().addChild(
+ new DefaultConfigurationNode("test", "value"));
+ source.getRootNode().addAttribute(
+ new DefaultConfigurationNode("attr", "attrValue"));
source.clear();
- assertTrue("Source not empty", source.isEmpty());
+ checkEmptyRoot();
}
/**
- * A specialized visitor that only counts the visited nodes.
+ * Tests the node handler used by the model.
*/
- private static class CountVisitor extends
- NodeVisitorAdapter<ConfigurationNode>
+ public void testGetNodeHandler()
{
- int countBefore;
-
- int countAfter;
-
- @Override
- public void visitBeforeChildren(ConfigurationNode node,
- NodeHandler<ConfigurationNode> handler)
- {
- countBefore++;
- }
-
- @Override
- public void visitAfterChildren(ConfigurationNode node,
- NodeHandler<ConfigurationNode> handler)
- {
- countAfter++;
- }
-
- /**
- * Tests whether the expected number of nodes was found.
- *
- * @param expectedCount the expected number
- */
- public void check(int expectedCount)
- {
- assertEquals("Wrong before count", expectedCount, countBefore);
- assertEquals("Wrong after count", expectedCount, countAfter);
- }
+ assertTrue("Wrong node handler",
+ source.getNodeHandler() instanceof ConfigurationNodeHandler);
}
}