craigmcc 01/05/21 21:19:12 Modified: digester build.xml Added: digester/src/test/org/apache/commons/digester DigesterTestCase.java Log: Add initial unit tests for Digester. So far, only the fundamental property related methods are being exercised, no actual parsing yet. Revision Changes Path 1.4 +17 -3 jakarta-commons/digester/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-commons/digester/build.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- build.xml 2001/05/22 02:55:02 1.3 +++ build.xml 2001/05/22 04:19:08 1.4 @@ -3,7 +3,7 @@ <!-- "Digester" component of the Jakarta Commons Subproject - $Id: build.xml,v 1.3 2001/05/22 02:55:02 craigmcc Exp $ + $Id: build.xml,v 1.4 2001/05/22 04:19:08 craigmcc Exp $ --> @@ -96,6 +96,10 @@ <pathelement location="${build.home}/classes"/> <pathelement location="${build.home}/tests"/> <pathelement location="${junit.jar}"/> + <pathelement location="${jaxp.jaxp.jar}"/> + <pathelement location="${jaxp.parser.jar}"/> + <pathelement location="${commons-beanutils.jar}"/> + <pathelement location="${commons-collections.jar}"/> </path> <!-- Construct RSSDigester test classpath --> @@ -160,7 +164,6 @@ <target name="compile.tests" depends="compile" description="Compile unit test cases"> -<!-- <javac srcdir="${test.home}" destdir="${build.home}/tests" debug="${compile.debug}" @@ -171,7 +174,6 @@ <copy todir="${build.home}/tests" filtering="on"> <fileset dir="${test.home}" excludes="**/*.java"/> </copy> ---> </target> @@ -218,9 +220,21 @@ <target name="test" depends="compile.tests, + test.digester, test.rss " description="Run all unit test cases"> + </target> + + + <target name="test.digester" depends="compile.tests" + description="Run basic Digester unit tests ..."> + <echo message="Running Digester tests ..."/> + <java classname="${test.runner}" fork="yes" + failonerror="${test.failonerror}"> + <arg value="org.apache.commons.digester.DigesterTestCase"/> + <classpath refid="test.classpath"/> + </java> </target> 1.1 jakarta-commons/digester/src/test/org/apache/commons/digester/DigesterTestCase.java Index: DigesterTestCase.java =================================================================== /* * $Header: /home/cvs/jakarta-commons/digester/src/test/org/apache/commons/digester/DigesterTestCase.java,v 1.1 2001/05/22 04:19:11 craigmcc Exp $ * $Revision: 1.1 $ * $Date: 2001/05/22 04:19:11 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.commons.digester; import java.net.URL; import java.util.Iterator; import java.util.Map; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.xml.sax.ErrorHandler; /** * <p>Test Case for the Digester class. These tests exercise the individual * methods of a Digester, but do not attempt to process complete documents. * </p> * * @author Craig R. McClanahan * @version $Revision: 1.1 $ $Date: 2001/05/22 04:19:11 $ */ public class DigesterTestCase extends TestCase { // ----------------------------------------------------- Instance Variables /** * The digester instance we will be processing. */ protected Digester digester = null; /** * The set of public identifiers, and corresponding resource names, * for the versions of the DTDs that we know about. There * <strong>MUST</strong> be an even number of Strings in this array. */ protected static final String registrations[] = { "-//Netscape Communications//DTD RSS 0.9//EN", "/org/apache/commons/digester/rss/rss-0.9.dtd", "-//Netscape Communications//DTD RSS 0.91//EN", "/org/apache/commons/digester/rss/rss-0.91.dtd", }; // ----------------------------------------------------------- Constructors /** * Construct a new instance of this test case. * * @param name Name of the test case */ public DigesterTestCase(String name) { super(name); } // -------------------------------------------------- Overall Test Methods /** * Set up instance variables required by this test case. */ public void setUp() { digester = new Digester(); } /** * Return the tests included in this test suite. */ public static Test suite() { return (new TestSuite(DigesterTestCase.class)); } /** * Tear down instance variables required by this test case. */ public void tearDown() { digester = null; } // ------------------------------------------------ Individual Test Methods /** * Test the basic property getters and setters. */ public void testProperties() { assertEquals("Initial debug is zero", 0, digester.getDebug()); digester.setDebug(1); assertEquals("Set debug is one", 1, digester.getDebug()); digester.setDebug(0); assertEquals("Reset debug is zero", 0, digester.getDebug()); assertNull("Initial error handler is null", digester.getErrorHandler()); digester.setErrorHandler((ErrorHandler) digester); assert("Set error handler is digester", digester.getErrorHandler() == digester); digester.setErrorHandler(null); assertNull("Reset error handler is null", digester.getErrorHandler()); assert("Initial namespace aware is false", !digester.getNamespaceAware()); digester.setNamespaceAware(true); assert("Set namespace aware is true", digester.getNamespaceAware()); digester.setNamespaceAware(false); assert("Reset namespace aware is false", !digester.getNamespaceAware()); assert("Initial validating is false", !digester.getValidating()); digester.setValidating(true); assert("Set validating is true", digester.getValidating()); digester.setValidating(false); assert("Reset validating is false", !digester.getValidating()); } /** * Test registration of URLs for specified public identifiers. */ public void testRegistrations() { Map map = digester.getRegistrations(); assertEquals("Initially zero registrations", 0, map.size()); int n = 0; for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i + 1]); if (url != null) { digester.register(registrations[i], url.toString()); n++; } } map = digester.getRegistrations(); assertEquals("Registered two URLs", n, map.size()); int count[] = new int[n]; for (int i = 0; i < n; i++) count[i] = 0; Iterator keys = map.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); for (int i = 0; i < n; i++) { if (key.equals(registrations[i*2])) { count[i]++; break; } } } for (int i = 0; i < n; i++) assertEquals("Count for key " + registrations[i*2], 1, count[i]); } /** * Test the basic stack mechanisms. */ public void testStackMethods() { Object value = null; // New stack must be empty assertEquals("New stack is empty", 0, digester.getCount()); value = digester.peek(); assertNull("New stack peek() returns null", value); value = digester.pop(); assertNull("New stack pop() returns null", value); // Test pushing and popping activities digester.push("First Item"); assertEquals("Pushed one item size", 1, digester.getCount()); value = digester.peek(); assertNotNull("Peeked first item is not null", value); assertEquals("Peeked first item value", "First Item", (String) value); digester.push("Second Item"); assertEquals("Pushed two items size", 2, digester.getCount()); value = digester.peek(); assertNotNull("Peeked second item is not null", value); assertEquals("Peeked second item value", "Second Item", (String) value); value = digester.pop(); assertEquals("Popped stack size", 1, digester.getCount()); assertNotNull("Popped second item is not null", value); assertEquals("Popped second item value", "Second Item", (String) value); value = digester.peek(); assertNotNull("Remaining item is not null", value); assertEquals("Remaining item value", "First Item", (String) value); assertEquals("Remaining stack size", 1, digester.getCount()); // Cleared stack is empty digester.push("Dummy Item"); digester.clear(); assertEquals("Cleared stack is empty", 0, digester.getCount()); value = digester.peek(); assertNull("Cleared stack peek() returns null", value); value = digester.pop(); assertNull("Cleared stack pop() returns null", value); } }