You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/02/16 13:13:10 UTC
svn commit: r1071219 - in
/commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules:
CallParamTestObject.java DigesterRulesSourceTestImpl.java
FromXmlRuleSetTest.java ThrowExceptionCreationFactory.java
Author: simonetripodi
Date: Wed Feb 16 12:13:09 2011
New Revision: 1071219
URL: http://svn.apache.org/viewvc?rev=1071219&view=rev
Log:
first checkin of adapted version of 'xmlrules' TestCases package from /trunk
old tests continue working!
Added:
commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java (with props)
commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java (with props)
commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java (with props)
Modified:
commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/FromXmlRuleSetTest.java
Added: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java?rev=1071219&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java (added)
+++ commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java Wed Feb 16 12:13:09 2011
@@ -0,0 +1,73 @@
+/* $Id$
+ *
+ * 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.digester3.xmlrules;
+
+/**
+ * Object for use with testing call param rules.
+ *
+ * @author Robert Burrell Donkin
+ */
+public class CallParamTestObject {
+
+ private String left = "UNSET";
+
+ private String right = "UNSET";
+
+ private String middle = "UNSET";
+
+ public void triple(String left, String middle, String right) {
+ this.left = left;
+ this.right = right;
+ this.middle = middle;
+ }
+
+ public void duo(String left, String right) {
+ this.left = left;
+ this.right = right;
+ }
+
+ public String getLeft() {
+ return left;
+ }
+
+ public String getRight() {
+ return right;
+ }
+
+ public String getMiddle() {
+ return middle;
+ }
+
+ public void setLeft(String left) {
+ this.left=left;
+ }
+
+ public void setRight(String right) {
+ this.right = right;
+ }
+
+ public void setMiddle(String middle) {
+ this.middle = middle;
+ }
+
+ @Override
+ public String toString() {
+ return "LEFT: " + left + " MIDDLE:" + middle + " RIGHT:" + right;
+ }
+
+}
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/CallParamTestObject.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java?rev=1071219&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java (added)
+++ commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java Wed Feb 16 12:13:09 2011
@@ -0,0 +1,40 @@
+/* $Id$
+ *
+ * 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.digester3.xmlrules;
+
+import org.apache.commons.digester3.AbstractRulesModule;
+
+/**
+ *
+ */
+public final class DigesterRulesSourceTestImpl extends AbstractRulesModule {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void configure() {
+ forPattern("baz")
+ .createObject().ofType(ObjectTestImpl.class)
+ .then()
+ .setProperties()
+ .then()
+ .setNext("add").withParameterType("java.lang.Object");
+ }
+
+}
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/DigesterRulesSourceTestImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/FromXmlRuleSetTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/FromXmlRuleSetTest.java?rev=1071219&r1=1071218&r2=1071219&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/FromXmlRuleSetTest.java (original)
+++ commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/FromXmlRuleSetTest.java Wed Feb 16 12:13:09 2011
@@ -17,12 +17,20 @@
*/
package org.apache.commons.digester3.xmlrules;
+import static org.apache.commons.digester3.DigesterLoader.newLoader;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import java.io.InputStream;
import java.io.StringReader;
+import java.net.URL;
+import java.util.ArrayList;
import org.apache.commons.digester3.AbstractTestCase;
+import org.apache.commons.digester3.Address;
import org.apache.commons.digester3.Digester;
+import org.apache.commons.digester3.ObjectCreationFactoryTestImpl;
import org.junit.Test;
import org.xml.sax.InputSource;
@@ -31,6 +39,251 @@ import org.xml.sax.InputSource;
*/
public class FromXmlRuleSetTest extends AbstractTestCase {
+ /**
+ * Tests the DigesterLoader.createDigester(), with multiple
+ * included rule sources: testrules.xml includes another rules xml
+ * file, and also includes programmatically created rules.
+ */
+ @Test
+ public void testCreateDigester() throws Exception {
+ URL rules = getClass().getResource("testrules.xml");
+ URL input = getClass().getResource("test.xml");
+
+ Digester digester = newBasicDigester(new FromXmlRulesModule(rules));
+ digester.push(new ArrayList<Object>());
+ Object root = digester.parse(input.openStream());
+ assertEquals("[foo1 baz1 foo2, foo3 foo4]", root.toString());
+ }
+
+ /**
+ * Tests the DigesterLoader.load(), with multiple included rule
+ * sources: testrules.xml includes another rules xml file, and
+ * also includes programmatically created rules.
+ */
+ @Test
+ public void testLoad1() throws Exception {
+ ClassLoader classLoader = getClass().getClassLoader();
+ URL rules = getClass().getResource("testrules.xml");
+ URL input = getClass().getResource("test.xml");
+
+ Digester digester = newLoader(new FromXmlRulesModule(rules))
+ .setClassLoader(classLoader)
+ .newDigester();
+ digester.push(new ArrayList<Object>());
+
+ Object root = digester.parse(input);
+ if (!(root instanceof ArrayList<?>)) {
+ fail("Unexpected object returned from DigesterLoader. Expected ArrayList; got " + root.getClass().getName());
+ }
+ assertEquals("[foo1 baz1 foo2, foo3 foo4]", root.toString());
+
+ @SuppressWarnings("unchecked") // root is an ArrayList
+ ArrayList<Object> al = (ArrayList<Object>) root;
+ Object obj = al.get(0);
+ if (!(obj instanceof ObjectTestImpl)) {
+ fail("Unexpected object returned from DigesterLoader. Expected TestObject; got " + obj.getClass().getName());
+ }
+ ObjectTestImpl to = (ObjectTestImpl) obj;
+ assertEquals(new Long(555),to.getLongValue());
+ assertEquals("foo", to.getMapValue("test1"));
+ assertEquals("bar", to.getMapValue("test2"));
+ }
+
+ /**
+ * The same as testLoad1, exception the input file is passed to
+ * DigesterLoader as an InputStream instead of a URL.
+ */
+ @Test
+ public void testLoad2() throws Exception {
+ URL rules = getClass().getResource("testrules.xml");
+ InputStream input = getInputStream("test.xml");
+ Digester digester = newLoader(new FromXmlRulesModule(rules))
+ .setClassLoader(this.getClass().getClassLoader())
+ .newDigester();
+ digester.push(new ArrayList<Object>());
+
+ Object root = digester.parse(input);
+ if (!(root instanceof ArrayList<?>)) {
+ fail("Unexpected object returned from DigesterLoader. Expected ArrayList; got " + root.getClass().getName());
+ }
+ @SuppressWarnings("unchecked") // root is an ArrayList
+ ArrayList<Object> list = (ArrayList<Object>) root;
+ assertEquals(root.toString(), "[foo1 baz1 foo2, foo3 foo4]");
+ assertEquals("Wrong number of classes created", 2 , list.size());
+ assertEquals("Pushed first", true , ((ObjectTestImpl)list.get(0)).isPushed());
+ assertEquals("Didn't push second", false , ((ObjectTestImpl)list.get(1)).isPushed());
+ assertTrue("Property was set properly", ((ObjectTestImpl)list.get(0)).getProperty().equals("I am a property!"));
+ }
+
+ /**
+ */
+ @Test
+ public void testSetCustomProperties() throws Exception {
+ URL rules = this.getClass().getResource("testPropertyAliasRules.xml");
+ InputStream input =
+ getClass().getClassLoader().getResource("org/apache/commons/digester3/Test7.xml").openStream();
+
+ Digester digester = newLoader(new FromXmlRulesModule(rules))
+ .setClassLoader(this.getClass().getClassLoader())
+ .newDigester();
+ digester.push(new ArrayList<Object>());
+
+ Object obj = digester.parse(input);
+
+ if (!(obj instanceof ArrayList<?>)) {
+ fail(
+ "Unexpected object returned from DigesterLoader. Expected ArrayList; got "
+ + obj.getClass().getName());
+ }
+
+ @SuppressWarnings("unchecked") // root is an ArrayList of Address
+ ArrayList<Address> root = (ArrayList<Address>) obj;
+
+ assertEquals("Wrong array size", 4, root.size());
+
+ // note that the array is in popped order (rather than pushed)
+
+ Address add = root.get(0);
+ Address addressOne = add;
+ assertEquals("(1) Street attribute", "New Street", addressOne.getStreet());
+ assertEquals("(1) City attribute", "Las Vegas", addressOne.getCity());
+ assertEquals("(1) State attribute", "Nevada", addressOne.getState());
+
+ add = root.get(1);
+ Address addressTwo = add;
+ assertEquals("(2) Street attribute", "Old Street", addressTwo.getStreet());
+ assertEquals("(2) City attribute", "Portland", addressTwo.getCity());
+ assertEquals("(2) State attribute", "Oregon", addressTwo.getState());
+
+ add = root.get(2);
+ Address addressThree = add;
+ assertEquals("(3) Street attribute", "4th Street", addressThree.getStreet());
+ assertEquals("(3) City attribute", "Dayton", addressThree.getCity());
+ assertEquals("(3) State attribute", "US" , addressThree.getState());
+
+ add = root.get(3);
+ Address addressFour = add;
+ assertEquals("(4) Street attribute", "6th Street", addressFour.getStreet());
+ assertEquals("(4) City attribute", "Cleveland", addressFour.getCity());
+ assertEquals("(4) State attribute", "Ohio", addressFour.getState());
+ }
+
+ @Test
+ public void testFactoryCreateRule() throws Exception {
+ URL rules = getClass().getResource("testfactory.xml");
+ String xml = "<?xml version='1.0' ?><root one='good' two='bad' three='ugly'><foo/></root>";
+
+ Digester digester = newLoader(new FromXmlRulesModule(rules))
+ .setClassLoader(this.getClass().getClassLoader())
+ .newDigester();
+ digester.push(new ArrayList<ObjectCreationFactoryTestImpl>());
+
+ Object obj = digester.parse(new StringReader(xml));
+ if (!(obj instanceof ArrayList<?>)) {
+ fail(
+ "Unexpected object returned from DigesterLoader. Expected ArrayList; got "
+ + obj.getClass().getName());
+ }
+
+ @SuppressWarnings("unchecked") // root is an ArrayList of TestObjectCreationFactory
+ ArrayList<ObjectCreationFactoryTestImpl> list = (ArrayList<ObjectCreationFactoryTestImpl>) obj;
+
+ assertEquals("List should contain only the factory object", list.size() , 1);
+ ObjectCreationFactoryTestImpl factory = list.get(0);
+ assertEquals("Object create not called(1)", factory.called , true);
+ assertEquals("Attribute not passed (1)",
+ factory.attributes.getValue("one"),
+ "good");
+ assertEquals("Attribute not passed (2)",
+ factory.attributes.getValue("two"),
+ "bad");
+ assertEquals("Attribute not passed (3)",
+ factory.attributes.getValue("three"),
+ "ugly");
+ }
+
+ @Test
+ public void testFactoryIgnoreCreateRule() throws Exception {
+ URL rules = getClass().getResource("testfactoryignore.xml");
+
+ String xml = "<?xml version='1.0' ?><root one='good' two='bad' three='ugly'><foo/></root>";
+ try {
+ newBasicDigester(new FromXmlRulesModule(rules)).parse(new StringReader(xml));
+ } catch (Exception e) {
+ fail("This exception should have been ignored: " + e.getClass().getName());
+ }
+ }
+
+ @Test
+ public void testFactoryNotIgnoreCreateRule() throws Exception {
+ URL rules = getClass().getResource("testfactorynoignore.xml");
+
+ String xml = "<?xml version='1.0' ?><root one='good' two='bad' three='ugly'><foo/></root>";
+ try {
+ newBasicDigester(new FromXmlRulesModule(rules)).parse(new StringReader(xml));
+ fail("Exception should have been propagated from create method.");
+ } catch (Exception e) {
+ /* What we expected */
+ assertEquals(org.xml.sax.SAXParseException.class, e.getClass());
+ }
+ }
+
+ @Test
+ public void testCallParamRule() throws Exception {
+ URL rules = getClass().getResource("test-call-param-rules.xml");
+
+ String xml = "<?xml version='1.0' ?>"
+ + "<root><foo attr='long'><bar>short</bar><foobar><ping>tosh</ping></foobar></foo></root>";
+
+ CallParamTestObject testObject = new CallParamTestObject();
+
+ Digester digester = newLoader(new FromXmlRulesModule(rules))
+ .setClassLoader(this.getClass().getClassLoader())
+ .newDigester();
+ digester.push(testObject);
+ digester.parse(new StringReader(xml));
+
+ assertEquals("Incorrect left value", "long", testObject.getLeft());
+ assertEquals("Incorrect middle value", "short", testObject.getMiddle());
+ assertEquals("Incorrect right value", "", testObject.getRight());
+ }
+
+ @Test
+ public void testInputSourceLoader() throws Exception {
+ String rulesXml = "<?xml version='1.0'?>"
+ + "<digester-rules>"
+ + " <pattern value='root'>"
+ + " <pattern value='foo'>"
+ + " <call-method-rule methodname='triple' paramcount='3'"
+ + " paramtypes='java.lang.String,java.lang.String,java.lang.String'/>"
+ + " <call-param-rule paramnumber='0' attrname='attr'/>"
+ + " <pattern value='bar'>"
+ + " <call-param-rule paramnumber='1' from-stack='false'/>"
+ + " </pattern>"
+ + " <pattern value='foobar'>"
+ + " <object-create-rule classname='java.lang.String'/>"
+ + " <pattern value='ping'>"
+ + " <call-param-rule paramnumber='2' from-stack='true'/>"
+ + " </pattern>"
+ + " </pattern>"
+ + " </pattern>"
+ + " </pattern>"
+ + "</digester-rules>";
+
+ String xml = "<?xml version='1.0' ?>"
+ + "<root><foo attr='long'><bar>short</bar><foobar><ping>tosh</ping></foobar></foo></root>";
+
+ CallParamTestObject testObject = new CallParamTestObject();
+
+ Digester digester = newLoader(new FromXmlRulesModule(new StringReader(rulesXml))).newDigester();
+ digester.push(testObject);
+ digester.parse(new StringReader(xml));
+
+ assertEquals("Incorrect left value", "long", testObject.getLeft());
+ assertEquals("Incorrect middle value", "short", testObject.getMiddle());
+ assertEquals("Incorrect right value", "", testObject.getRight());
+ }
+
/**
* Test the FromXmlRules.addRuleInstances(digester, path) method, ie
* test loading rules at a base position other than the root.
Added: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java?rev=1071219&view=auto
==============================================================================
--- commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java (added)
+++ commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java Wed Feb 16 12:13:09 2011
@@ -0,0 +1,38 @@
+/* $Id$
+ *
+ * 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.digester3.xmlrules;
+
+import org.apache.commons.digester3.rule.AbstractObjectCreationFactory;
+import org.xml.sax.Attributes;
+
+/**
+ * Object creation factory used for testing exception propagation.
+ *
+ * @author Robert Burrell Donkin
+ */
+public class ThrowExceptionCreationFactory extends AbstractObjectCreationFactory<Object> {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object createObject(Attributes attributes) throws Exception {
+ throw new RuntimeException();
+ }
+
+}
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: commons/sandbox/digester3/trunk/src/test/java/org/apache/commons/digester3/xmlrules/ThrowExceptionCreationFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain