From: <mgu...@us...> - 2013-03-10 13:54:30
|
Revision: 8155 http://sourceforge.net/p/htmlunit/code/8155 Author: mguillem Date: 2013-03-10 13:54:27 +0000 (Sun, 10 Mar 2013) Log Message: ----------- DomNode.removeAllChildren should not detach nested children from their parent node. Issue 1494 Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2013-03-09 13:27:42 UTC (rev 8154) +++ trunk/htmlunit/src/changes/changes.xml 2013-03-10 13:54:27 UTC (rev 8155) @@ -8,6 +8,9 @@ <body> <release version="2.13" date="???" description="Bugfixes"> + <action type="fix" dev="mguillem" issue="1494"> + DomNode.removeAllChildren should not detach nested children from their parent node. + </action> <action type="update" dev="rbri"> WebRequest: deprecate constructor (WebRequest, URL). </action> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2013-03-09 13:27:42 UTC (rev 8154) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNode.java 2013-03-10 13:54:27 UTC (rev 8155) @@ -1384,14 +1384,9 @@ * Removes all of this node's children. */ public void removeAllChildren() { - if (getFirstChild() == null) { - return; + while (getFirstChild() != null) { + getFirstChild().remove(); } - - for (final Iterator<DomNode> it = getChildren().iterator(); it.hasNext();) { - it.next().removeAllChildren(); - it.remove(); - } } /** Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-03-09 13:27:42 UTC (rev 8154) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLElementTest.java 2013-03-10 13:54:27 UTC (rev 8155) @@ -3836,4 +3836,22 @@ loadPageWithAlerts2(html); } + + /** + * @throws Exception if the test fails + */ + @Test + @Alerts(DEFAULT = { "[object Text]", "[object Text]" }, IE = { "[object]", "[object]" }) + public void textContentShouldNotDetachNestedNode() throws Exception { + final String html = "<html><body><div><div id='it'>foo</div></div><script>\n" + + "try {\n" + + " var elt = document.getElementById('it');\n" + + " alert(elt.firstChild);\n" + + " elt.parentNode.textContent = '';\n" + + " alert(elt.firstChild);\n" + + "} catch (e) { alert('exception'); }\n" + + "</script></body></html>"; + + loadPageWithAlerts2(html); + } } |