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() {