vmassol 2003/03/04 13:56:06
Modified: integration/ant/src/test/org/apache/cactus/integration/ant
TestWebMerge.java
integration/ant/src/java/org/apache/cactus/integration/ant
WebMerge.java
Log:
Finished the initial version of WebMerge. Now need to perform integration tests...
Revision Changes Path
1.2 +55 -27
jakarta-cactus/integration/ant/src/test/org/apache/cactus/integration/ant/TestWebMerge.java
Index: TestWebMerge.java
===================================================================
RCS file:
/home/cvs/jakarta-cactus/integration/ant/src/test/org/apache/cactus/integration/ant/TestWebMerge.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestWebMerge.java 4 Mar 2003 17:41:47 -0000 1.1
+++ TestWebMerge.java 4 Mar 2003 21:56:06 -0000 1.2
@@ -87,14 +87,19 @@
String xml =
"<web-app>".trim()
+ " <servlet>".trim()
- + " <servlet-name>name1</servlet-name>".trim()
- + " <servlet-class>class1</servlet-class>".trim()
+ + " <servlet-name>s1</servlet-name>".trim()
+ + " <servlet-class>sclass1</servlet-class>".trim()
+ " </servlet>".trim()
+ " <servlet>".trim()
- + " <servlet-name>name2</servlet-name>".trim()
- + " <servlet-class>class2</servlet-class>".trim()
+ + " <servlet-name>s2</servlet-name>".trim()
+ + " <servlet-class>sclass2</servlet-class>".trim()
+ " </servlet>".trim()
- + "</web-app>".trim();
+ + " <security-role>".trim()
+ + " <description>Test role</description>".trim()
+ + " <role-name>test</role-name>".trim()
+ + " </security-role>".trim()
+ + " <security-constraint/>".trim()
+ + "</web-app>".trim();
WebMerge webMerge = new WebMerge();
return webMerge.parse(new ByteArrayInputStream(xml.getBytes()));
}
@@ -103,14 +108,23 @@
{
String xml =
"<web-app>".trim()
+ + " <filter>".trim()
+ + " <filter-name>f1</filter-name>".trim()
+ + " <filter-class>fclass1</filter-class>".trim()
+ + " </filter>".trim()
+ " <servlet>".trim()
- + " <servlet-name>name3</servlet-name>".trim()
- + " <servlet-class>class3</servlet-class>".trim()
+ + " <servlet-name>s3</servlet-name>".trim()
+ + " <servlet-class>sclass3</servlet-class>".trim()
+ " </servlet>".trim()
+ " <servlet>".trim()
- + " <servlet-name>name4</servlet-name>".trim()
- + " <servlet-class>class4</servlet-class>".trim()
+ + " <servlet-name>s4</servlet-name>".trim()
+ + " <servlet-class>sclass4</servlet-class>".trim()
+ " </servlet>".trim()
+ + " <login-config>".trim()
+ + " <auth-method>BASIC</auth-method>".trim()
+ + " <realm-name>Test</realm-name>".trim()
+ + " </login-config>".trim()
+ + " <security-constraint/>".trim()
+ "</web-app>".trim();
WebMerge webMerge = new WebMerge();
@@ -127,22 +141,22 @@
private void verifyMergedDocument(Node theCurrent)
{
assertEquals("servlet", theCurrent.getNodeName());
- assertEquals("name3",
+ assertEquals("s3",
theCurrent.getFirstChild().getFirstChild().getNodeValue());
theCurrent = theCurrent.getNextSibling();
assertEquals("servlet", theCurrent.getNodeName());
- assertEquals("name4",
+ assertEquals("s4",
theCurrent.getFirstChild().getFirstChild().getNodeValue());
theCurrent = theCurrent.getNextSibling();
assertEquals("servlet", theCurrent.getNodeName());
- assertEquals("name1",
+ assertEquals("s1",
theCurrent.getFirstChild().getFirstChild().getNodeValue());
theCurrent = theCurrent.getNextSibling();
assertEquals("servlet", theCurrent.getNodeName());
- assertEquals("name2",
+ assertEquals("s2",
theCurrent.getFirstChild().getFirstChild().getNodeValue());
}
@@ -160,7 +174,7 @@
webMerge.insertBefore(nl, node);
- Node current = originalDoc.getFirstChild().getFirstChild();
+ Node current = originalDoc.getElementsByTagName("servlet").item(0);
verifyMergedDocument(current);
}
@@ -175,24 +189,24 @@
webMerge.insertTag("servlet", insertPointNode, originalDoc,
overrideDoc);
- Node current = originalDoc.getFirstChild().getFirstChild();
+ Node current = originalDoc.getElementsByTagName("servlet").item(0);
assertEquals("servlet", current.getNodeName());
- assertEquals("name3",
+ assertEquals("s3",
current.getFirstChild().getFirstChild().getNodeValue());
current = current.getNextSibling();
assertEquals("servlet", current.getNodeName());
- assertEquals("name4",
+ assertEquals("s4",
current.getFirstChild().getFirstChild().getNodeValue());
current = current.getNextSibling();
assertEquals("servlet", current.getNodeName());
- assertEquals("name1",
+ assertEquals("s1",
current.getFirstChild().getFirstChild().getNodeValue());
current = current.getNextSibling();
assertEquals("servlet", current.getNodeName());
- assertEquals("name2",
+ assertEquals("s2",
current.getFirstChild().getFirstChild().getNodeValue());
}
@@ -208,14 +222,14 @@
webMerge.insertTag("servlet", insertPointNode, originalDoc,
overrideDoc);
- Node current = originalDoc.getFirstChild().getFirstChild();
+ Node current = originalDoc.getElementsByTagName("servlet").item(0);
assertEquals("servlet", current.getNodeName());
- assertEquals("name1",
+ assertEquals("s1",
current.getFirstChild().getFirstChild().getNodeValue());
current = current.getNextSibling();
assertEquals("servlet", current.getNodeName());
- assertEquals("name2",
+ assertEquals("s2",
current.getFirstChild().getFirstChild().getNodeValue());
}
@@ -233,14 +247,14 @@
webMerge.insertTag("servlet", insertPointNode, originalDoc,
overrideDoc);
- Node current = originalDoc.getFirstChild().getFirstChild();
+ Node current = originalDoc.getElementsByTagName("servlet").item(0);
assertEquals("servlet", current.getNodeName());
- assertEquals("name3",
+ assertEquals("s3",
current.getFirstChild().getFirstChild().getNodeValue());
current = current.getNextSibling();
assertEquals("servlet", current.getNodeName());
- assertEquals("name4",
+ assertEquals("s4",
current.getFirstChild().getFirstChild().getNodeValue());
}
@@ -252,7 +266,21 @@
WebMerge webMerge = new WebMerge();
Document resultDoc = webMerge.merge(originalDoc, overrideDoc);
- Node current = resultDoc.getFirstChild().getFirstChild();
+ Node current = resultDoc.getElementsByTagName("servlet").item(0);
verifyMergedDocument(current);
}
+
+ public void testMergeUniqueElements() throws Exception
+ {
+ Document originalDoc = createOriginalDocument();
+ Document overrideDoc = createOverrideDocument();
+
+ WebMerge webMerge = new WebMerge();
+ Document resultDoc = webMerge.merge(originalDoc, overrideDoc);
+
+ NodeList nl =
+ resultDoc.getElementsByTagName("security-constraint");
+ assertEquals(1, nl.getLength());
+ }
+
}
1.2 +39 -9
jakarta-cactus/integration/ant/src/java/org/apache/cactus/integration/ant/WebMerge.java
Index: WebMerge.java
===================================================================
RCS file:
/home/cvs/jakarta-cactus/integration/ant/src/java/org/apache/cactus/integration/ant/WebMerge.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- WebMerge.java 4 Mar 2003 17:41:47 -0000 1.1
+++ WebMerge.java 4 Mar 2003 21:56:06 -0000 1.2
@@ -101,6 +101,17 @@
private File output;
/**
+ * List of XML elements to merge from the override document to the
+ * original document. For each element we also specify if the element
+ * can be inserted in the original document or whether it should replace
+ * the element of the same name in the original document.
+ */
+ private static final String[][] ELEMENTS = {
+ {"filter", "true"}, {"filter-mapping", "true"}, {"servlet", "true"},
+ {"servlet-mapping", "true"}, {"security-constraint", "false"},
+ {"login-config", "false"}, {"security-role", "false"}};
+
+ /**
* Noop entity resolver so that <code>DOCTYPE</code> entries in XML files
* do not cause any exception when we are offline and the entity to
* resolve is an external URI.
@@ -166,14 +177,33 @@
{
return theOverrideDoc;
}
-
- // Add <servlet> elements
- currentNode = insertTag("servlet", currentNode, theOriginalDoc,
- theOverrideDoc);
-
- // Add <servlet-mapping> elements
- currentNode = insertTag("servlet-mapping", currentNode,
- theOriginalDoc, theOverrideDoc);
+
+ // Merge the elements
+ for (int i = 0; i < ELEMENTS.length; i++)
+ {
+ currentNode = insertTag(ELEMENTS[i][0], currentNode,
+ theOriginalDoc, theOverrideDoc);
+
+ // If the element is unique and present in the override document
+ // and the original document, then remove it from the original
+ // document.
+ if (!new Boolean(ELEMENTS[i][1]).booleanValue())
+ {
+ NodeList originalNl =
+ theOriginalDoc.getElementsByTagName(ELEMENTS[i][0]);
+ NodeList overrideNl =
+ theOverrideDoc.getElementsByTagName(ELEMENTS[i][0]);
+ if (overrideNl.getLength() > 0)
+ {
+ if (originalNl.getLength() > 0)
+ {
+ theOriginalDoc.getDocumentElement().removeChild(
+ theOriginalDoc.getElementsByTagName(
+ ELEMENTS[i][0]).item(0));
+ }
+ }
+ }
+ }
return theOriginalDoc;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]