1 38 package com.gargoylesoftware.htmlunit.html; 39 40 import java.util.ArrayList; 41 import java.util.HashMap; 42 import java.util.Iterator; 43 import java.util.List; 44 import java.util.Map; 45 46 import com.gargoylesoftware.htmlunit.ElementNotFoundException; 47 import com.gargoylesoftware.htmlunit.WebTestCase; 48 49 55 public class DomNodeTest extends WebTestCase { 56 57 62 public DomNodeTest( final String name ) { 63 super( name ); 64 } 65 66 69 public void testRemoveAllChildren() throws Exception { 70 final String content 71 = "<html><head></head><body>\n" 72 + "<p id='tag'><table>\n" 73 + "<tr><td>row 1</td></tr>\n" 74 + "<tr><td>row 2</td></tr>\n" 75 + "</table></p></body></html>\n"; 76 final List collectedAlerts = new ArrayList(); 77 final HtmlPage page = loadPage(content, collectedAlerts); 78 79 final DomNode node = page.getDocumentElement().getHtmlElementById("tag"); 80 node.removeAllChildren(); 81 assertEquals("Did not remove all nodes", null, node.getFirstChild()); 82 } 83 84 87 public void testReplace() throws Exception { 88 final String content 89 = "<html><head></head><body>\n" 90 + "<br><div id='tag'/><br></body></html>\n"; 91 final HtmlPage page = loadPage(content); 92 93 final DomNode node = page.getDocumentElement().getHtmlElementById("tag"); 94 95 final DomNode previousSibling = node.getPreviousSibling(); 96 final DomNode nextSibling = node.getNextSibling(); 97 final DomNode parent = node.getParentNode(); 98 99 final int position = readPositionAmongParentChildren(node); 101 102 final DomNode newNode = new DomText(page, "test"); 103 node.replace(newNode); 104 assertSame("previous sibling", previousSibling, newNode.getPreviousSibling()); 105 assertSame("next sibling", nextSibling, newNode.getNextSibling()); 106 assertSame("parent", parent, newNode.getParentNode()); 107 assertSame(newNode, previousSibling.getNextSibling()); 108 assertSame(newNode, nextSibling.getPreviousSibling()); 109 assertEquals(position, readPositionAmongParentChildren(newNode)); 110 } 111 112 115 public void testGetNewNodeById() throws Exception { 116 final String content 117 = "<html><head></head><body>\n" 118 + "<br><div id='tag'/></body></html>\n"; 119 final HtmlPage page = loadPage(content); 120 121 final DomNode node = page.getDocumentElement().getHtmlElementById("tag"); 122 123 final Map attributes = new HashMap(); 124 attributes.put("id", "newElt"); 125 final DomNode newNode = new HtmlDivision(page, attributes); 126 try { 127 page.getHtmlElementById("newElt"); 128 fail("Element should not exist yet"); 129 } 130 catch (final ElementNotFoundException e) { 131 } 133 134 node.replace(newNode); 135 136 page.getHtmlElementById("newElt"); 137 try { 138 page.getHtmlElementById("tag"); 139 fail("Element should not exist anymore"); 140 } 141 catch (final ElementNotFoundException e) { 142 } 144 145 newNode.insertBefore(node); 146 page.getHtmlElementById("tag"); 147 } 148 149 152 public void testAppendChild() throws Exception { 153 final String content 154 = "<html><head></head><body>\n" 155 + "<br><div><div id='tag'/></div><br></body></html>\n"; 156 final HtmlPage page = loadPage(content); 157 158 final DomNode node = page.getDocumentElement().getHtmlElementById("tag"); 159 160 final DomNode parent = node.getParentNode(); 161 162 final int position = readPositionAmongParentChildren(node); 164 165 final DomNode newNode = new DomText(page, "test"); 166 parent.appendChild(newNode); 167 assertSame("new node previous sibling", node, newNode.getPreviousSibling()); 168 assertSame("new node next sibling", null, newNode.getNextSibling()); 169 assertSame("next sibling", newNode, node.getNextSibling()); 170 assertSame("parent", parent, newNode.getParentNode()); 171 assertEquals(position+1, readPositionAmongParentChildren(newNode)); 172 173 final DomNode newNode2 = new DomText(page, "test2"); 174 parent.appendChild(newNode2); 175 page.getHtmlElementById("tag"); 176 } 177 178 181 public void testInsertBefore() throws Exception { 182 final String content 183 = "<html><head></head><body>\n" 184 + "<br><div id='tag'/><br></body></html>\n"; 185 final HtmlPage page = loadPage(content); 186 187 final DomNode node = page.getDocumentElement().getHtmlElementById("tag"); 188 189 final DomNode previousSibling = node.getPreviousSibling(); 190 final DomNode nextSibling = node.getNextSibling(); 191 final DomNode parent = node.getParentNode(); 192 193 final int position = readPositionAmongParentChildren(node); 195 196 final DomNode newNode = new DomText(page, "test"); 197 node.insertBefore(newNode); 198 assertSame("new node previous sibling", previousSibling, newNode.getPreviousSibling()); 199 assertSame("previous sibling", newNode, node.getPreviousSibling()); 200 assertSame("new node next sibling", node, newNode.getNextSibling()); 201 assertSame("next sibling", nextSibling, node.getNextSibling()); 202 assertSame("parent", parent, newNode.getParentNode()); 203 assertSame(newNode, previousSibling.getNextSibling()); 204 assertSame(node, nextSibling.getPreviousSibling()); 205 assertEquals(position, readPositionAmongParentChildren(newNode)); 206 } 207 208 213 private int readPositionAmongParentChildren(final DomNode node) { 214 int i = 0; 215 for (final Iterator iter = node.getParentNode().getChildIterator(); iter.hasNext();) { 216 final DomNode child = (DomNode) iter.next(); 217 if (child == node) { 218 return i; 219 } 220 ++i; 221 } 222 223 return -1; 224 } 225 } 226 | Popular Tags |