Author: veithen
Date: Thu Feb 5 10:57:31 2009
New Revision: 741074
URL: http://svn.apache.org/viewvc?rev=741074&view=rev
Log:
WSCOMMONS-435: Applied patch provided by Andrei Ivanov and added some test
cases for removeChild.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/ElementImplTest.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java?rev=741074&r1=741073&r2=741074&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
Thu Feb 5 10:57:31 2009
@@ -481,9 +481,15 @@
if (this.firstChild == tempNode) {
// If this is the first child
- this.firstChild = null;
- this.lastChild = null;
+ ChildNode nextSib = tempNode.nextSibling;
+ this.firstChild = nextSib;
+ if (nextSib == null) {
+ this.lastChild = null;
+ } else {
+ nextSib.previousSibling = null;
+ }
tempNode.parentNode = null;
+ tempNode.nextSibling = null;
} else if (this.lastChild == tempNode) {
// not the first child, but the last child
ChildNode prevSib = tempNode.previousSibling;
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/ElementImplTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/ElementImplTest.java?rev=741074&r1=741073&r2=741074&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/ElementImplTest.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/ElementImplTest.java
Thu Feb 5 10:57:31 2009
@@ -31,6 +31,7 @@
import org.w3c.dom.Text;
import org.xml.sax.InputSource;
+import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayOutputStream;
@@ -88,7 +89,49 @@
}
});
}
+
+ public void testRemoveSingleChild() throws Exception {
+ DOMTestUtil.execute(new DOMTestUtil.Test() {
+ public void execute(DocumentBuilderFactory dbf) throws Exception {
+ DocumentBuilder builder = dbf.newDocumentBuilder();
+ Element element = builder.parse(new InputSource(new
StringReader(
+ "<root><a/></root>"))).getDocumentElement();
+ element.removeChild(element.getFirstChild());
+ assertNull(element.getFirstChild());
+ assertNull(element.getLastChild());
+ }
+ });
+ }
+
+ // Regression test for WSCOMMONS-435
+ public void testRemoveFirstChild() throws Exception {
+ DOMTestUtil.execute(new DOMTestUtil.Test() {
+ public void execute(DocumentBuilderFactory dbf) throws Exception {
+ DocumentBuilder builder = dbf.newDocumentBuilder();
+ Element element = builder.parse(new InputSource(new
StringReader(
+ "<root><a/><b/><c/></root>"))).getDocumentElement();
+ element.removeChild(element.getFirstChild());
+ Node firstChild = element.getFirstChild();
+ assertNotNull(firstChild);
+ assertEquals("b", firstChild.getNodeName());
+ }
+ });
+ }
+ public void testRemoveLastChild() throws Exception {
+ DOMTestUtil.execute(new DOMTestUtil.Test() {
+ public void execute(DocumentBuilderFactory dbf) throws Exception {
+ DocumentBuilder builder = dbf.newDocumentBuilder();
+ Element element = builder.parse(new InputSource(new
StringReader(
+ "<root><a/><b/><c/></root>"))).getDocumentElement();
+ element.removeChild(element.getLastChild());
+ Node lastChild = element.getLastChild();
+ assertNotNull(lastChild);
+ assertEquals("b", lastChild.getNodeName());
+ }
+ });
+ }
+
/** Testing the NodeList returned with the elements's children */
public void testGetElementsByTagName() throws Exception {
DOMTestUtil.execute(new DOMTestUtil.Test() {