@Test void testSpecialCases() { Document document = new Document(); Element html = new Element(document, "html"); document.addChild(html); assertEquals(0, html.getChildNodesCount()); assertNull(html.getChild(0)); assertNull(html.getChild(1000)); assertEquals(0, html.getChildNodes().length); assertNull(html.getFirstChild()); assertNull(html.getFirstChildElement()); assertNull(html.getFirstChildElement("h1")); assertNull(html.getLastChild()); assertNull(html.getLastChildElement()); assertNull(html.getLastChildElement("h1")); assertEquals(0, html.getSiblingIndex()); assertEquals(0, html.getSiblingElementIndex()); assertEquals(0, html.getSiblingNameIndex()); assertTrue(document.check()); }
@Test void testDetach() { Document document = new Document(); Element html = new Element(document, "html"); document.addChild(html); Element div1 = new Element(document, "div"); html.addChild(div1); Element div2 = new Element(document, "div"); div1.addChild(div2); div1.detachFromParent(); assertEquals(0, html.getChildNodesCount()); assertNull(div1.getParentNode()); assertTrue(document.check()); }
) { String elementNodeName = element.getNodeName().toLowerCase(); if (elementNodeName.equals("form")) { if (element.getChildNodesCount() > 0) { Node[] formChildNodes = element.getChildNodes(); parentNode.insertAfter(formChildNodes, element); return false; String inputType = element.getAttribute("type");
protected void elementBody(final Element element) throws IOException { int childCount = element.getChildNodesCount(); if (element.isRawTag()) { for (int i = 0; i < childCount; i++) { Node childNode = element.getChild(i); if (childNode.getNodeType() == Node.NodeType.TEXT) { appendable.append(childNode.getNodeValue()); } else { childNode.visit(this); } } } else { element.visitChildren(this); } }
protected void _element(final Element element) throws IOException { String nodeName = resolveNodeName(element); appendable.append('<'); appendable.append(nodeName); int attrCount = element.getAttributesCount(); if (attrCount != 0) { for (int i = 0; i < attrCount; i++) { Attribute attr = element.getAttribute(i); appendable.append(' '); renderAttribute(element, attr, appendable); } } int childCount = element.getChildNodesCount(); if (element.selfClosed && childCount == 0) { appendable.append("/>"); return; } appendable.append('>'); if (element.voidElement) { return; } if (childCount != 0) { elementBody(element); } appendable.append("</"); appendable.append(nodeName); appendable.append('>'); }
assertEquals(Node.NodeType.ELEMENT, html.getNodeType()); assertNotNull(html); assertEquals("html", html.getNodeName()); assertEquals(1, html.getChildNodesCount()); assertEquals(0, html.getAttributesCount()); Element body = (Element) html.getFirstChild(); assertEquals(Node.NodeType.ELEMENT, body.getNodeType()); assertNotNull(body); assertEquals("body", body.getNodeName()); assertEquals(1, body.getChildNodesCount()); assertNull(body.getAttribute("id")); assertEquals(0, body.getAttributesCount()); Element p = (Element) body.getChild(0); assertNotNull(p); assertEquals("p", p.getNodeName()); assertEquals(3, p.getChildNodesCount()); assertEquals("w173", p.getAttribute("id")); assertEquals(1, p.getAttributesCount()); Attribute attr = p.getAttribute(0); assertEquals("id", attr.getName()); assertEquals("w173", attr.getValue()); assertTrue(p.hasAttribute("id")); Text t = (Text) p.getChild(0); assertEquals(Node.NodeType.TEXT, t.getNodeType()); assertEquals("Hello", t.getNodeValue());
@Test void testAttributes() { Document document = new Document(); Element node = new Element(document, "div"); assertFalse(node.hasAttributes()); assertFalse(node.hasAttribute("id")); assertNull(node.getAttribute("id")); node.setAttribute("id", "jodd"); assertTrue(node.hasAttributes()); assertTrue(node.hasAttribute("id")); assertEquals("jodd", node.getAttribute("id")); node.setAttribute("foo"); assertTrue(node.hasAttribute("foo")); assertNull(node.getAttribute("foo")); assertFalse(node.isAttributeContaining("class", "one")); node.setAttribute("class", " one two three "); assertTrue(node.isAttributeContaining("class", "two")); assertTrue(node.isAttributeContaining("class", "three")); assertEquals(3, node.getAttributesCount()); }
Element html = new Element(document, "html"); document.addChild(html); Element div1 = new Element(document, "div"); html.addChild(div1); Element div2 = new Element(document, "div"); html.addChild(div2); Element div3 = new Element(document, "div"); html.addChild(div3); assertEquals(3, html.getChildNodesCount()); assertEquals(3, html.getChildElementsCount()); assertEquals(3, html.getChildElementsCount("div")); assertEquals(div2, html.removeChild(1)); assertEquals(2, html.getChildNodesCount()); assertEquals(2, html.getChildElementsCount()); assertEquals(2, html.getChildElementsCount("div")); html.insertAfter(div2, div1); assertEquals(3, html.getChildNodesCount()); assertEquals(3, html.getChildElementsCount()); assertEquals(3, html.getChildElementsCount("div")); Node[] node = html.getChildNodes(); assertEquals(div1, node[0]); assertEquals(div2, node[1]); assertEquals(div3, node[2]);
Element node = new Element(document, "div"); node.addChild(textHello); Element em = new Element(document, "em"); node.addChild(em); Text textJodd = new Text(document, "jodd"); em.addChild(textJodd); node.addChild(textHey); assertEquals(3, node.getChildNodesCount()); assertEquals(1, node.getChildElementsCount()); assertEquals(1, node.getChildElementsCount("em")); Element b = new Element(document, "b"); node.addChild(b); Text textJodd2 = new Text(document, "fwk"); b.addChild(textJodd2); assertEquals(4, node.getChildNodesCount()); assertEquals(2, node.getChildElementsCount()); assertEquals(1, node.getChildElementsCount("em")); assertEquals(1, node.getChildElementsCount("b")); assertEquals(b, em.getNextSiblingElement()); assertNull(em.getNextSiblingName()); assertNull(em.getPreviousSiblingElement()); assertNull(em.getPreviousSiblingName());
@Test void testNamesAndChilds() { Document document = new LagartoDOMBuilder().parse("<div id='top'><p id='id1'>one</p><span id='t1'>text1</span><p id='id2'>two</p><span id='t2'>text2</span><p id='id3'>three</p><span id='t3'>text3</span></div>"); Element topDiv = (Element) document.getFirstChild(); Element p1 = (Element) topDiv.getFirstChild(); assertEquals("id1", p1.getAttribute("id")); Element s1 = (Element) p1.getNextSibling(); assertEquals("t1", s1.getAttribute("id")); Element p2 = (Element) s1.getNextSiblingElement(); assertEquals("id2", p2.getAttribute("id")); Element p3 = (Element) p2.getNextSiblingElement().getNextSiblingElement(); assertEquals("id3", p3.getAttribute("id")); Element s3 = (Element) p3.getNextSibling(); assertEquals("t3", s3.getAttribute("id")); assertEquals(p2, p1.getNextSiblingName()); assertEquals(s3, s1.getNextSiblingName().getNextSiblingName()); assertEquals(p2, p3.getPreviousSiblingName()); assertEquals(s1, s3.getPreviousSiblingName().getPreviousSiblingName()); assertEquals(p1, topDiv.getFirstChild()); assertEquals(p1, topDiv.getFirstChildElement()); assertEquals(p1, topDiv.getFirstChildElement("p")); assertEquals(s1, topDiv.getFirstChildElement("span")); assertEquals(s3, topDiv.getLastChild()); assertEquals(s3, topDiv.getLastChildElement()); assertEquals(p3, topDiv.getLastChildElement("p")); assertEquals(s3, topDiv.getLastChildElement("span")); assertTrue(document.check()); }
@Test void testCssPath() { Document document = new Document(); Element html = new Element(document, "html"); document.addChild(html); Element div1 = new Element(document, "div"); div1.setAttribute("id", "one"); html.addChild(div1); Element div2 = new Element(document, "div"); div1.addChild(div2); assertEquals("html div#one div", div2.getCssPath()); assertEquals("html div#one", div1.getCssPath()); assertTrue(document.check()); }
@Test void testHasVsGet333() { Document document = new Document(); Element one = new Element(document, "one"); document.addChild(one); one.setAttribute("a1", "v1"); assertEquals("v1", one.getAttribute("a1")); assertEquals("v1", one.getAttribute("A1")); assertTrue(one.hasAttribute("a1")); assertTrue(one.hasAttribute("A1")); } }
/** * Performs the fix for elements. */ protected void fixElements() { for (Element fosterElement : fosterElements) { // find parent table Element lastTable = findLastTable(fosterElement); Node fosterElementParent = fosterElement.getParentNode(); // filter our foster element Node[] fosterChilds = fosterElement.getChildNodes(); for (Node fosterChild : fosterChilds) { if (fosterChild.getNodeType() == Node.NodeType.ELEMENT) { if (isOneOfTableElements((Element) fosterChild)) { // move all child table elements outside // the foster element fosterChild.detachFromParent(); fosterElementParent.insertBefore(fosterChild, fosterElement); } } } // finally, move foster element above the table fosterElement.detachFromParent(); lastTable.getParentNode().insertBefore(fosterElement, lastTable); } }
@Test void testKelkoo() throws Exception { File file = new File(testDataRoot, "kelkoo.html"); Jerry jerry; try { jerry = Jerry.jerry().parse(FileUtil.readString(file)); } catch (Exception ex) { fail(ex.toString()); throw ex; } Element script = (Element) jerry.$("script").get(0); assertEquals("script", script.getNodeName()); assertEquals(6, script.getAttributesCount()); assertEquals("src", script.getAttribute(0).getName()); assertEquals("data-config", script.getAttribute(1).getName()); assertEquals("ext\\u00e9rieur|barbecue,", script.getAttribute(2).getName()); assertEquals("planchaaccessoires\":\"http:\\", script.getAttribute(3).getName()); assertEquals("www.kelkoo.fr\"}'", script.getAttribute(4).getName()); assertEquals("data-adsense-append", script.getAttribute(5).getName()); }
while (true) { String parentNodeName = parentNode.getNodeName(); if (!implRules.implicitlyCloseParentTagOnNewTag(parentNodeName, node.getNodeName())) { break; log.debug("Implicitly closed tag <" + node.getNodeName() + "> "); if (!node.isVoidElement()) { parentNode = node;
@Test void testWhitespaces() throws IOException { String xmlContent = "<foo> <!--c--> <bar> </bar> <x/> </foo>"; LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); lagartoDOMBuilder.enableXmlMode(); lagartoDOMBuilder.getConfig().setSelfCloseVoidTags(true); Document doc = lagartoDOMBuilder.parse(xmlContent); assertEquals(1, doc.getChildNodesCount()); Element foo = (Element) doc.getChild(0); assertEquals("foo", foo.getNodeName()); assertEquals(3, foo.getChildNodesCount()); Element bar = (Element) foo.getChild(1); assertEquals("bar", bar.getNodeName()); assertEquals(1, bar.getChildNodesCount()); // must be 1 as whitespaces are between open/closed tag assertEquals("<foo><!--c--><bar> </bar><x/></foo>", doc.getHtml()); assertTrue(doc.check()); }
@Override public void toHtml(Appendable appendable) throws IOException { appendable.append('<'); appendable.append(nodeName); int attrCount = getAttributesCount(); if (attrCount != 0) { for (int i = 0; i < attrCount; i++) { Attribute attr = getAttribute(i); appendable.append(' '); attr.toHtml(appendable); } } int childCount = getChildNodesCount(); if (selfClosed && childCount == 0) { appendable.append("/>"); return; } appendable.append('>'); if (voidElement) { return; } if (childCount != 0) { toInnerHtml(appendable); } appendable.append("</"); appendable.append(nodeName); appendable.append('>'); }
@Test void testOrphanAttribute() { LagartoDOMBuilder lagartoDOMBuilder = new LagartoDOMBuilder(); Document document = lagartoDOMBuilder.parse("<div qwe '8989' foo zoo='123'/>"); Element div = (Element) document.getFirstChild(); assertEquals("div", div.getNodeName()); assertEquals(4, div.getAttributesCount()); assertTrue(div.hasAttribute("qwe")); assertTrue(div.hasAttribute("foo")); assertTrue(div.hasAttribute("zoo")); assertTrue(div.hasAttribute("'8989'")); assertTrue(document.check()); }