Added: 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlMerger.java
URL: 
http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlMerger.java?rev=631917&view=auto
==============================================================================
--- 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlMerger.java
 (added)
+++ 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlMerger.java
 Thu Feb 28 02:26:25 2008
@@ -0,0 +1,868 @@
+/* 
+ * ========================================================================
+ * 
+ * Copyright 2003-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.cactus.integration.ant.deployment.webapp;
+
+import java.io.ByteArrayInputStream;
+import java.util.Iterator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.TestCase;
+
+import org.codehaus.cargo.module.webapp.WebXml;
+import org.codehaus.cargo.module.webapp.WebXmlIo;
+import org.codehaus.cargo.module.webapp.WebXmlMerger;
+import org.codehaus.cargo.module.webapp.WebXmlTag;
+import org.codehaus.cargo.module.webapp.WebXmlVersion;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Unit tests for [EMAIL PROTECTED] WebXmlMerger}.
+ * 
+ * TODO: we need more tests for the security sections and the various 
references
+ * 
+ * @version $Id: TestWebXmlMerger.java 239003 2004-05-31 20:05:27Z vmassol $
+ */
+public final class TestWebXmlMerger extends TestCase
+{
+    /**
+     * The document builder factory.
+     */
+    private DocumentBuilderFactory factory;
+
+    /**
+     * The JAXP document builder.
+     */
+    private DocumentBuilder builder;
+
+    /**
+     * [EMAIL PROTECTED]
+     * @see TestCase#setUp
+     */
+    public void setUp() throws ParserConfigurationException
+    {
+        factory = DocumentBuilderFactory.newInstance();
+        factory.setValidating(false);
+        factory.setNamespaceAware(false);
+
+        builder = factory.newDocumentBuilder();
+    }
+
+    /**
+     * Tests whether a single filter is correctly merged into an empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterIntoEmptyDocument() throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        WebXml srcWebXml = WebXmlIo.parseWebXml(new 
ByteArrayInputStream(srcXml.getBytes()), null);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        WebXml mergeWebXml = WebXmlIo.parseWebXml(new 
ByteArrayInputStream(mergeXml.getBytes()), null);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+    }
+
+    /**
+     * Tests whether a single context param is correctly merged into an empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneContextParamIntoEmptyDocument() throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <context-param>"
+            + "    <param-name>param</param-name>"
+            + "    <param-value>value</param-value>"
+            + "  </context-param>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasContextParam("param"));
+    }
+    
+    /**
+     * Tests whether a single filter is correctly merged into a descriptor that
+     * already contains another filter.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterIntoDocumentWithAnotherFilter()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f2</filter-name>"
+            + "    <filter-class>fclass2</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+        assertTrue(srcWebXml.hasFilter("f2"));
+    }
+
+    /**
+     * Tests whether a single context param is correctly merged into a 
+     * descriptor that already contains another context param.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneContextParamIntoDocumentWithAnotherContextParam()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <context-param>"
+            + "    <param-name>param1</param-name>"
+            + "    <param-value>value1</param-value>"
+            + "  </context-param>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <context-param>"
+            + "    <param-name>param2</param-name>"
+            + "    <param-value>value2</param-value>"
+            + "  </context-param>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasContextParam("param1"));
+        assertTrue(srcWebXml.hasContextParam("param2"));
+    }
+
+    /**
+     * Tests whether a single filter in the merge descriptor is ignored because
+     * a filter with the same name already exists in the source descriptor. 
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterIntoDocumentWithSameFilter()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = srcXml;
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+    }
+
+    /**
+     * Tests whether a single context param in the merge descriptor is ignored 
+     * because a context param with the same name already exists in the source 
+     * descriptor. 
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneContextParamIntoDocumentWithSameContextParam()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <context-param>"
+            + "    <param-name>param</param-name>"
+            + "    <param-value>value</param-value>"
+            + "  </context-param>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = srcXml;
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasContextParam("param"));
+    }
+    
+    /**
+     * Tests whether a filter initialization parameter is merged into the
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterIntoDocumentWithSameFilterAndParam()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "    <init-param>"
+            + "      <param-name>f1param1</param-name>"
+            + "      <param-value>f1param1value</param-value>"
+            + "    </init-param>"
+            + "  </filter>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+        Iterator initParams = srcWebXml.getFilterInitParamNames("f1");
+        assertEquals("f1param1", initParams.next());
+        assertTrue(!initParams.hasNext());
+        
+        
+    }
+
+    /**
+     * Tests whether a single filter is correctly merged into a descriptor that
+     * already contains multiple other filter definitions.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterIntoDocumentWithMultipleFilters()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "  <filter>"
+            + "    <filter-name>f2</filter-name>"
+            + "    <filter-class>fclass2</filter-class>"
+            + "  </filter>"
+            + "  <filter>"
+            + "    <filter-name>f3</filter-name>"
+            + "    <filter-class>fclass3</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f4</filter-name>"
+            + "    <filter-class>fclass4</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator filterNames = srcWebXml.getFilterNames();
+        assertEquals("f1", filterNames.next());
+        assertEquals("f2", filterNames.next());
+        assertEquals("f3", filterNames.next());
+        assertEquals("f4", filterNames.next());
+        assertTrue(!filterNames.hasNext());
+    }
+
+    /**
+     * Tests whether multiple filters are correctly merged into an empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeMultipleFiltersIntoEmptyDocument() throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "  <filter>"
+            + "    <filter-name>f2</filter-name>"
+            + "    <filter-class>fclass2</filter-class>"
+            + "  </filter>"
+            + "  <filter>"
+            + "    <filter-name>f3</filter-name>"
+            + "    <filter-class>fclass3</filter-class>"
+            + "  </filter>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator filterNames = srcWebXml.getFilterNames();
+        assertEquals("f1", filterNames.next());
+        assertEquals("f2", filterNames.next());
+        assertEquals("f3", filterNames.next());
+        assertTrue(!filterNames.hasNext());
+    }
+
+    /**
+     * Tests whether a filter with one mapping is correctly merged into an 
empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterWithOneMappingIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "  <filter-mapping>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <url-pattern>/f1mapping1</url-pattern>"
+            + "  </filter-mapping>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+        Iterator filterMappings = srcWebXml.getFilterMappings("f1");
+        assertEquals("/f1mapping1", filterMappings.next());
+        assertTrue(!filterMappings.hasNext());
+    }
+
+    /**
+     * Tests wether a single filter with multiple mappings is correctly merged
+     * into an empty descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneFilterWithMultipleMappingsIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <filter>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <filter-class>fclass1</filter-class>"
+            + "  </filter>"
+            + "  <filter-mapping>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <url-pattern>/f1mapping1</url-pattern>"
+            + "  </filter-mapping>"
+            + "  <filter-mapping>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <url-pattern>/f1mapping2</url-pattern>"
+            + "  </filter-mapping>"
+            + "  <filter-mapping>"
+            + "    <filter-name>f1</filter-name>"
+            + "    <url-pattern>/f1mapping3</url-pattern>"
+            + "  </filter-mapping>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasFilter("f1"));
+        Iterator filterMappings = srcWebXml.getFilterMappings("f1");
+        assertEquals("/f1mapping1", filterMappings.next());
+        assertEquals("/f1mapping2", filterMappings.next());
+        assertEquals("/f1mapping3", filterMappings.next());
+        assertTrue(!filterMappings.hasNext());
+    }
+
+    /**
+     * Tests whether a single servlet is correctly merged into an empty 
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletIntoEmptyDocument() throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+    }
+
+    /**
+     * Tests whether a single servlet is correctly merged into a descriptor 
that
+     * already contains the definition of an other servlet.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletIntoDocumentWithAnotherServlet()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s2</servlet-name>"
+            + "    <servlet-class>sclass2</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+        assertTrue(srcWebXml.hasServlet("s2"));
+    }
+
+    /**
+     * Tests whether a single servlet is correctly merged into a descriptor 
that
+     * already contains the definition of a servlet with the same name.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletIntoDocumentWithSameServlet()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+    }
+
+    /**
+     * Tets whether a servlet with an initialization parameter is correctly
+     * merged into a descriptor that contains the definition of a servlet with
+     * the same name.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletIntoDocumentWithSameServletAndParam()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "    <init-param>"
+            + "      <param-name>s1param1</param-name>"
+            + "      <param-value>s1param1value</param-value>"
+            + "    </init-param>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+        Iterator initParams = srcWebXml.getServletInitParamNames("s1");
+        assertEquals("s1param1", initParams.next());
+        assertTrue(!initParams.hasNext());
+        assertEquals("s1param1value",
+            srcWebXml.getServletInitParam("s1", "s1param1"));
+    }
+
+    /**
+     * Tests whether a single servlet is correctly merged into a descriptor 
with
+     * multiple servlets.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletIntoDocumentWithMultipleServlets()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet>"
+            + "    <servlet-name>s2</servlet-name>"
+            + "    <servlet-class>sclass2</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet>"
+            + "    <servlet-name>s3</servlet-name>"
+            + "    <servlet-class>sclass3</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s4</servlet-name>"
+            + "    <servlet-class>sclass4</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator servletNames = srcWebXml.getServletNames();
+        assertEquals("s1", servletNames.next());
+        assertEquals("s2", servletNames.next());
+        assertEquals("s3", servletNames.next());
+        assertEquals("s4", servletNames.next());
+        assertTrue(!servletNames.hasNext());
+    }
+
+    /**
+     * Verifies that servlet init parameters are added after the 
load-on-startup
+     * element of an already existing servlet definition.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergingServletWithInitParamsThatIsAlreadyDefined()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>".trim()
+            + "  <servlet>".trim()
+            + "    <servlet-name>s1</servlet-name>".trim()
+            + "    <servlet-class>sclass1</servlet-class>".trim()
+            + "    <load-on-startup>1</load-on-startup>".trim()
+            + "  </servlet>".trim()
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>".trim()
+            + "    <servlet-name>s1</servlet-name>".trim()
+            + "    <servlet-class>sclass1</servlet-class>".trim()
+            + "    <init-param>".trim()
+            + "      <param-name>s1param1</param-name>".trim()
+            + "      <param-value>s1param1value</param-value>".trim()
+            + "    </init-param>".trim()
+            + "  </servlet>".trim()
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Element servletElement = srcWebXml.getServlet("s1");
+        assertEquals("load-on-startup",
+            ((Element) servletElement.getLastChild()).getTagName());
+    }
+
+    /**
+     * Tests whether multiple servlet in the merge file are correctly inserted
+     * into an empty descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeMultipleServletsIntoEmptyDocument() throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet>"
+            + "    <servlet-name>s2</servlet-name>"
+            + "    <servlet-class>sclass2</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet>"
+            + "    <servlet-name>s3</servlet-name>"
+            + "    <servlet-class>sclass3</servlet-class>"
+            + "  </servlet>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator servletNames = srcWebXml.getServletNames();
+        assertEquals("s1", servletNames.next());
+        assertEquals("s2", servletNames.next());
+        assertEquals("s3", servletNames.next());
+        assertTrue(!servletNames.hasNext());
+    }
+
+    /**
+     * Tests whether a single servlet with one mapping is correctly inserted
+     * into an empty descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletWithOneMappingIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet-mapping>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <url-pattern>/s1mapping1</url-pattern>"
+            + "  </servlet-mapping>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+        Iterator servletMappings = srcWebXml.getServletMappings("s1");
+        assertEquals("/s1mapping1", servletMappings.next());
+        assertTrue(!servletMappings.hasNext());
+    }
+
+    /**
+     * Tests whether a single servlet with multiple mappings is correctly 
+     * inserted into an empty descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneServletWithMultipleMappingsIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <servlet>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <servlet-class>sclass1</servlet-class>"
+            + "  </servlet>"
+            + "  <servlet-mapping>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <url-pattern>/s1mapping1</url-pattern>"
+            + "  </servlet-mapping>"
+            + "  <servlet-mapping>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <url-pattern>/s1mapping2</url-pattern>"
+            + "  </servlet-mapping>"
+            + "  <servlet-mapping>"
+            + "    <servlet-name>s1</servlet-name>"
+            + "    <url-pattern>/s1mapping3</url-pattern>"
+            + "  </servlet-mapping>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        assertTrue(srcWebXml.hasServlet("s1"));
+        Iterator servletMappings = srcWebXml.getServletMappings("s1");
+        assertEquals("/s1mapping1", servletMappings.next());
+        assertEquals("/s1mapping2", servletMappings.next());
+        assertEquals("/s1mapping3", servletMappings.next());
+        assertTrue(!servletMappings.hasNext());
+    }
+
+    /**
+     * Tests whether a single security role is correctly inserted into an empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeSecurityRoleIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <security-role>"
+            + "    <role-name>role1</role-name>"
+            + "  </security-role>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator securityRoleNames = srcWebXml.getSecurityRoleNames();
+        assertTrue(securityRoleNames.hasNext());
+        assertEquals("role1", securityRoleNames.next());
+        assertTrue(!securityRoleNames.hasNext());
+    }
+
+    /**
+     * Tests whether a single security role is ignored when the source
+     * descriptor already contains a role with the same name.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeSecurityRoleIntoDocumentWithSameRole()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>"
+            + "  <security-role>"
+            + "    <description>A role</description>"
+            + "    <role-name>role1</role-name>"
+            + "  </security-role>"
+            + "</web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <security-role>"
+            + "    <role-name>role1</role-name>"
+            + "  </security-role>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator securityRoleNames = srcWebXml.getSecurityRoleNames();
+        assertTrue(securityRoleNames.hasNext());
+        assertEquals("role1", securityRoleNames.next());
+        assertTrue(!securityRoleNames.hasNext());
+    }
+
+    /**
+     * Tests whether a single EJB reference is correctly inserted into an empty
+     * descriptor.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testMergeOneEjbRefIntoEmptyDocument()
+        throws Exception
+    {
+        String srcXml = "<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, 
Inc.//DTD Web Application 2.3//EN' 
'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app></web-app>";
+        Document srcDoc =
+            builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
+        WebXml srcWebXml = new WebXml(srcDoc);
+        String mergeXml = "<web-app>"
+            + "  <ejb-ref>"
+            + "    <ejb-ref-name>ejbref1</ejb-ref-name>"
+            + "    <ejb-ref-type>ejbref1.type</ejb-ref-type>"
+            + "    <home>ejbref1.homeInterface</home>"
+            + "    <remote>ejbref1.remoteInterface</remote>"
+            + "  </ejb-ref>"
+            + "</web-app>";
+        Document mergeDoc =
+            builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
+        WebXml mergeWebXml = new WebXml(mergeDoc);
+        WebXmlMerger merger = new WebXmlMerger(srcWebXml);
+        merger.merge(mergeWebXml);
+        Iterator ejbRefs = srcWebXml.getElements(WebXmlTag.EJB_REF); 
+        assertTrue(ejbRefs.hasNext());
+    }
+
+}

Added: 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlVersion.java
URL: 
http://svn.apache.org/viewvc/jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlVersion.java?rev=631917&view=auto
==============================================================================
--- 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlVersion.java
 (added)
+++ 
jakarta/cactus/trunk/integration/ant/src/test/java/org/apache/cactus/integration/ant/deployment/webapp/TestWebXmlVersion.java
 Thu Feb 28 02:26:25 2008
@@ -0,0 +1,157 @@
+/* 
+ * ========================================================================
+ * 
+ * Copyright 2003 The Apache Software Foundation.
+ *
+ * Licensed 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.cactus.integration.ant.deployment.webapp;
+
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import junit.framework.TestCase;
+
+import org.codehaus.cargo.module.webapp.WebXmlVersion;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.DocumentType;
+
+/**
+ * Unit tests for [EMAIL PROTECTED] WebXmlVersion}.
+ *
+ * @version $Id: TestWebXmlVersion.java 239003 2004-05-31 20:05:27Z vmassol $
+ */
+public final class TestWebXmlVersion extends TestCase
+{
+    /**
+     * The DOM implementation.
+     */
+    private DOMImplementation domImpl;
+
+    /**
+     * [EMAIL PROTECTED]
+     * @see TestCase#setUp
+     */
+    public void setUp() throws ParserConfigurationException
+    {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setValidating(false);
+        factory.setNamespaceAware(false);
+
+        this.domImpl = factory.newDocumentBuilder().getDOMImplementation();
+    }
+
+    /**
+     * Verifies that comparing version 2.2 to version 2.2 yields zero.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testCompare22To22() throws Exception
+    {
+        assertTrue(WebXmlVersion.V2_2.compareTo(WebXmlVersion.V2_2) == 0);
+    }
+
+    /**
+     * Verifies that comparing version 2.2 to version 2.3 yields a negative
+     * value.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testCompare22To23() throws Exception
+    {
+        assertTrue(WebXmlVersion.V2_2.compareTo(WebXmlVersion.V2_3) < 0);
+    }
+
+    /**
+     * Verifies that comparing version 2.3 to version 2.3 yields zero.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testCompare23To23() throws Exception
+    {
+        assertTrue(WebXmlVersion.V2_3.compareTo(WebXmlVersion.V2_3) == 0);
+    }
+
+    /**
+     * Verifies that comparing version 2.2 to version 2.3 yields a negative
+     * value.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testCompare23To22() throws Exception
+    {
+        assertTrue(WebXmlVersion.V2_3.compareTo(WebXmlVersion.V2_2) > 0);
+    }
+
+    /**
+     * Verifies that calling WebXmlVersion.valueOf(null) throws a
+     * NullPointerException.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testValueOfNull() throws Exception
+    {
+        try
+        {
+            WebXmlVersion.valueOf((DocumentType) null);
+            fail("Expected NullPointerException");
+        }
+        catch (NullPointerException expected)
+        {
+            // expected
+        }
+    }
+
+    /**
+     * Verifies that calling WebXmlVersion.valueOf() with a unknown document
+     * type returns null.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testValueOfUnknownDocType() throws Exception
+    {
+        DocumentType docType = domImpl.createDocumentType("web-app",
+            "foo", "bar");
+        assertNull(WebXmlVersion.valueOf(docType));
+    }
+
+    /**
+     * Verifies that calling WebXmlVersion.valueOf() with a web-app 2.2 
document
+     * type returns the correct instance.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testValueOfDocType22() throws Exception
+    {
+        DocumentType docType = domImpl.createDocumentType("web-app",
+            WebXmlVersion.V2_2.getPublicId(), 
WebXmlVersion.V2_2.getSystemId());
+        assertEquals(WebXmlVersion.V2_2, WebXmlVersion.valueOf(docType));
+    }
+
+    /**
+     * Verifies that calling WebXmlVersion.valueOf() with a web-app 2.3 
document
+     * type returns the correct instance.
+     * 
+     * @throws Exception If an unexpected error occurs
+     */
+    public void testValueOfDocType23() throws Exception
+    {
+        DocumentType docType = domImpl.createDocumentType("web-app",
+            WebXmlVersion.V2_3.getPublicId(), 
WebXmlVersion.V2_3.getSystemId());
+        assertEquals(WebXmlVersion.V2_3, WebXmlVersion.valueOf(docType));
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to