[HtmlUnit] SVN: [15512] trunk/htmlunit/src
rbri--- via HtmlUnit-develop <[email protected]> Thu, 09 Aug 2018 19:39:06 +0000
| Newsgroups | gmane.comp.java.htmlunit.devel |
|---|---|
| Message-ID | <[email protected]> |
Revision: 15512
http://sourceforge.net/p/htmlunit/code/15512
Author: rbri
Date: 2018-08-09 19:39:03 +0000 (Thu, 09 Aug 2018)
Log Message:
-----------
fix DomNodeIterator traverses uncles of (sub)root
Issue 1982
Modified Paths:
--------------
trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNodeIterator.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeIteratorTest.java
trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/NodeIteratorTest.java
Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNodeIterator.java
===================================================================
--- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNodeIterator.java 2018-08-05 17:08:38 UTC (rev 15511)
+++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/DomNodeIterator.java 2018-08-09 19:39:03 UTC (rev 15512)
@@ -191,12 +191,12 @@
* traversal) from the given node.
*/
private DomNode getFirstUncleNode(final DomNode node) {
- if (node == root_ || node == null) {
+ if (node == null || node == root_) {
return null;
}
final DomNode parent = node.getParentNode();
- if (parent == null) {
+ if (parent == null || parent == root_) {
return null;
}
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeIteratorTest.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeIteratorTest.java 2018-08-05 17:08:38 UTC (rev 15511)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/html/DomNodeIteratorTest.java 2018-08-09 19:39:03 UTC (rev 15512)
@@ -17,10 +17,12 @@
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
+import org.w3c.dom.traversal.NodeFilter;
import org.w3c.dom.traversal.NodeIterator;
import com.gargoylesoftware.htmlunit.BrowserRunner;
@@ -31,6 +33,7 @@
* Tests for {@link DomNodeIterator}.
*
* @author Ahmed Ashour
+ * @author Ronald Brill
*/
@RunWith(BrowserRunner.class)
public final class DomNodeIteratorTest extends WebDriverTestCase {
@@ -55,10 +58,51 @@
if (driver instanceof HtmlUnitDriver) {
final WebWindow webWindow = getWebWindowOf((HtmlUnitDriver) driver);
final HtmlPage page = (HtmlPage) webWindow.getEnclosedPage();
- final NodeIterator iterator = page.createNodeIterator(page.getDocumentElement(),
- org.w3c.dom.traversal.NodeFilter.SHOW_ALL, null,
+ final NodeIterator iterator = page.createNodeIterator(page.getDocumentElement(), NodeFilter.SHOW_ALL, null,
true);
assertThat(iterator.nextNode(), instanceOf(HtmlHtml.class));
}
}
+
+ /**
+ * Test case for issue 1982.
+ * @throws Exception if the test fails
+ */
+ @Test
+ public void subroot() throws Exception {
+ final String html
+ = "<html>\n"
+ + "<head>\n"
+ + "</head>\n"
+ + "<body>\n"
+ + "<table>\n"
+ + " <tr id='1'>\n"
+ + " <td id='11'>11</td>\n"
+ + " <td id='12'>12</td>\n"
+ + " </tr>\n"
+ + " <tr id='2'>\n"
+ + " <td id='21'>21</td>\n"
+ + " <td id='22'>22</td>\n"
+ + " </tr>\n"
+ + "</table>\n"
+ + "</body></html>";
+
+ final WebDriver driver = loadPage2(html);
+ final WebWindow webWindow = getWebWindowOf((HtmlUnitDriver) driver);
+ final HtmlPage page = (HtmlPage) webWindow.getEnclosedPage();
+
+ final HtmlElement subroot = (HtmlElement) page.getElementById("1");
+ final NodeIterator iterator = page.createNodeIterator(subroot, NodeFilter.SHOW_ELEMENT, null, true);
+
+ HtmlElement element = (HtmlElement) iterator.nextNode();
+ Assert.assertEquals("1", element.getId());
+
+ element = (HtmlElement) iterator.nextNode();
+ Assert.assertEquals("11", element.getId());
+
+ element = (HtmlElement) iterator.nextNode();
+ Assert.assertEquals("12", element.getId());
+
+ Assert.assertNull(iterator.nextNode());
+ }
}
Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/NodeIteratorTest.java
===================================================================
--- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/NodeIteratorTest.java 2018-08-05 17:08:38 UTC (rev 15511)
+++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/dom/NodeIteratorTest.java 2018-08-09 19:39:03 UTC (rev 15512)
@@ -135,4 +135,47 @@
loadPageWithAlerts2(html);
}
+
+ /**
+ * Test case for issue 1982.
+ * @throws Exception if the test fails
+ */
+ @Test
+ @Alerts({"1", "11", "12"})
+ public void subroot() throws Exception {
+ final String html
+ = "<html>\n"
+ + "<head>\n"
+ + " <script>\n"
+ + " function test() {\n"
+ + " if (document.createNodeIterator) {\n"
+ + " var nodeIterator = document.createNodeIterator(\n"
+ + " document.getElementById('1'),\n"
+ + " NodeFilter.SHOW_ELEMENT );\n"
+
+ + " var currentNode;\n"
+ + " while (currentNode = nodeIterator.nextNode()) {\n"
+ + " alert(currentNode.id);\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + " </script>\n"
+ + "</head>\n"
+ + "<body onload='test()'>\n"
+ + "<div id='before'>before</div>\n"
+ + "<table>\n"
+ + " <tr id='1'>\n"
+ + " <td id='11'>11</td>\n"
+ + " <td id='12'>12</td>\n"
+ + " </tr>\n"
+ + " <tr id='2'>\n"
+ + " <td id='21'>21</td>\n"
+ + " <td id='22'>22</td>\n"
+ + " </tr>\n"
+ + "</table>\n"
+ + "<div id='after'>after</div>\n"
+ + "</body></html>";
+
+ loadPageWithAlerts2(html);
+ }
}
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot