Author: veithen Date: Wed Dec 17 05:11:38 2008 New Revision: 727371 URL: http://svn.apache.org/viewvc?rev=727371&view=rev Log: DOOM: Fixed an issue where detach() didn't work correctly if the next sibling had not been built yet.
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java?rev=727371&r1=727370&r2=727371&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java Wed Dec 17 05:11:38 2008 @@ -114,6 +114,7 @@ if (!done) { build(); } + getNextOMSibling(); // Make sure that nextSibling is set correctly if (previousSibling == null) { // This is the first child if (nextSibling != null) { this.parentNode.setFirstChild(nextSibling); Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java?rev=727371&r1=727370&r2=727371&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java Wed Dec 17 05:11:38 2008 @@ -24,6 +24,8 @@ import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamConstants; +import org.apache.axiom.om.impl.llom.util.AXIOMUtil; + public abstract class OMElementTestBase extends AbstractTestCase { protected abstract OMFactory getOMFactory(); @@ -101,4 +103,31 @@ assertXMLEqual("<ns:parent xmlns:ns=\"http://www.testuri.com\">" + "<ns:c1 /><ns:c2 /><ns:c3 /></ns:parent>", parent.toString()); } + + private void testDetach(boolean build) throws Exception { + OMElement root = AXIOMUtil.stringToOM(getOMFactory(), "<root><a/><b/><c/></root>"); + if (build) { + root.build(); + } else { + assertFalse(root.isComplete()); + } + OMElement a = (OMElement)root.getFirstOMChild(); + assertEquals("a", a.getLocalName()); + OMElement b = (OMElement)a.getNextOMSibling(); + assertEquals("b", b.getLocalName()); + b.detach(); + assertNull(b.getParent()); + OMElement c = (OMElement)a.getNextOMSibling(); + assertEquals("c", c.getLocalName()); + assertSame(c, a.getNextOMSibling()); + assertSame(a, c.getPreviousOMSibling()); + } + + public void testDetachWithBuild() throws Exception { + testDetach(true); + } + + public void testDetachWithoutBuild() throws Exception { + testDetach(false); + } }