/** * Creates and adds a child element as last child, if possible. * * @param name The child name. * @return the created element. * @throws IllegalStateException If {@code child}'s parent can not be set. */ public default Element addElement(String name) { final Element child = new Element(name); return addChild(child); }
@Override public Element clone(boolean recurse) { final Element result = new Element(this); if (recurse) { for (final Child child : getChildren()) { result.addChild(child.clone(true)); } } return result; }
@Test public void testSortNoChildren() { final Element root = new Element("root"); root.sortChildren(ComparatorsUtil.adapt(Element.class, Element.NAME_COMPARATOR)); }
@Test public void testClone() { final Element e1 = new Element(NAME); e1.addAttribute(NAME1, VALUE); e1.addAttribute(NAME2, VALUE); final Element e2 = e1.clone(true); assertTrue(e1.deepEquals(e2)); }
@Test public void testGetRootElement() { final Comment x = new Comment(HELLO); assertEquals(null, x.getRootElement()); final Element root = new Element(NAME); root.addChild(x); assertEquals(root, x.getRootElement()); } }
@Test public void testGetRootElement() { final Text x = new Text(HELLO); assertEquals(null, x.getRootElement()); final Element root = new Element(NAME); root.addChild(x); assertEquals(root, x.getRootElement()); } }
@Test public void testConstructors() { final Element e = new Element(NAME); assertEquals(null, e.getParent()); assertEquals(ElementContentType.EMPTY, e.getContentType()); e.addComment("comment", true); assertEquals(ElementContentType.NON_TEXT, e.getContentType()); }
@Test public void testSortName() { final Element root = new Element("root"); for (int i = 9; i >= 0; i--) { root.addElement("child-" + i); } assertEquals(root.getElementNamed("child-0"), root.getChildAt(9)); root.sortChildren(ComparatorsUtil.adapt(Element.class, Element.NAME_COMPARATOR)); assertEquals(root.getElementNamed("child-0"), root.getChildAt(0)); }
@Test public void testSortAttribute() { final Element root = new Element("root"); for (int i = 9; i >= 0; i--) { final Element child = root.addElement("child"); child.addAttribute("id", i); } assertEquals(root.getElementNamedWithAttribute("child", "id", "0"), root.getChildAt(9)); root.sortChildren(ComparatorsUtil.adapt(Element.class, Element.compareAttribute("id"))); assertEquals(root.getElementNamedWithAttribute("child", "id", "0"), root.getChildAt(0)); } }
@Test public void testAttributes() { final Element e = new Element(NAME); assertEquals(0, e.getAttributesCount()); assertFalse(e.hasAttribute(NAME1)); assertEquals(-1, e.getAttributeIndex(NAME1)); assertTrue(e.getAttributes().isEmpty()); assertEquals(null, e.getAttributeValue(NAME1)); e.addAttribute(NAME1, null); assertTrue(e.hasAttribute(NAME1)); assertEquals(null, e.getAttributeValue(NAME1)); assertEquals(0, e.getAttributeIndex(NAME1)); assertEquals(-1, e.getAttributeIndex(NAME2)); assertFalse(e.hasAttribute(NAME2)); assertEquals(1, e.getAttributes().size()); assertEquals(Boolean.TRUE, e.getAttributeAsOptionalBoolean(NAME1, Boolean.TRUE)); assertEquals(Long.valueOf(0L), e.getAttributeAsOptionalLong(NAME1, 0L)); assertEquals(Integer.valueOf(0), e.getAttributeAsOptionalInt(NAME1, 0)); assertEquals(Short.valueOf((short) 0), e.getAttributeAsOptionalShort(NAME1, (short) 0)); assertEquals(Byte.valueOf((byte) 0), e.getAttributeAsOptionalByte(NAME1, (byte) 0)); assertEquals(Double.valueOf(0.0), e.getAttributeAsOptionalDouble(NAME1, 0.0)); assertEquals(Float.valueOf(0.0F), e.getAttributeAsOptionalFloat(NAME1, 0.0F)); assertEquals(FailureReaction.DEFAULT, e.getAttributeAsOptionalEnum(NAME1, FailureReaction.class, FailureReaction.DEFAULT)); }
@Test public void testGetRootElement() { assertEquals(null, Document.getRootElement(null)); final Document doc = new Document(); assertEquals(null, doc.getRootElement()); assertEquals(null, Document.getRootElement(doc)); final Element root = new Element(NAME); doc.addChild(root); assertEquals(root, doc.getRootElement()); assertEquals(root, doc.getRootElement()); assertEquals(root, Document.getRootElement(doc)); }
@Test public void testRoot() { final Document doc = new Document(); assertEquals(null, doc.getRootElement()); final Element root = new Element("root"); assertEquals(null, root.getParent()); assertTrue(doc.canAddChild(root)); doc.addChild(root); assertFalse(doc.canAddChild(root)); assertEquals(root, doc.getRootElement()); root.setParent(null); assertEquals(null, root.getParent()); assertEquals(null, doc.getRootElement()); } }
@Test public void testDeepEquals() { final Document doc1 = new Document(); final Document doc2 = new Document(); assertTrue(doc1.deepEquals(doc2)); doc1.addChild(new Comment()); assertFalse(doc1.deepEquals(doc2)); doc2.addChild(new Comment()); assertTrue(doc1.deepEquals(doc2)); doc1.addChild(new Element(NAME)); assertFalse(doc1.deepEquals(doc2)); doc2.addChild(new Element(NAME)); assertTrue(doc1.deepEquals(doc2)); ((Element) doc1.getLastChild()).addAttribute(NAME, VALUE); assertFalse(doc1.deepEquals(doc2)); ((Element) doc2.getLastChild()).addAttribute(NAME, VALUE); assertTrue(doc1.deepEquals(doc2)); final Document doc3 = doc1.clone(true); assertTrue(doc1.deepEquals(doc3)); doc3.removeChildren(); assertEquals(0, doc3.getChildrenCount()); }
@Test public void testRemoveChildren() { final Element root = new Element(NAME); final Element child = root.addElement(NAME); root.removeChildren(); assertEquals(0, root.getChildrenCount()); assertFalse(root.removeChild(child)); root.addElement(NAME); root.addComment("Hello"); root.addElement(NAME); root.addText("World"); root.addElement(NAME); root.removeComments(); assertEquals(4, root.getChildrenCount()); root.removeTexts(); assertEquals(3, root.getChildrenCount()); root.addElement(NAME1); root.removeElementsNamed(NAME); assertEquals(1, root.getChildrenCount()); }
@Test public void testRemoveChildren() { final Element root = new Element(NAME); root.addElement(NAME1); root.addElement(NAME1); root.addElement(NAME2); root.addElement(NAME1); root.addElement(NAME1); assertEquals(5, root.getChildrenCount(Element.class)); assertEquals(4, root.getChildrenCount(Element.class, Element.named(NAME1))); root.removeChildAt(0); assertEquals(4, root.getChildrenCount(Element.class)); assertEquals(3, root.getChildrenCount(Element.class, Element.named(NAME1))); root.removeElementsNamed(NAME1); assertEquals(1, root.getChildrenCount(Element.class)); assertEquals(0, root.getChildrenCount(Element.class, Element.named(NAME1))); } }
@Test public void testContentType() { final Element e = new Element(NAME); assertEquals(ElementContentType.EMPTY, e.getContentType()); e.addComment("Hello"); assertEquals(ElementContentType.NON_TEXT, e.getContentType()); e.removeChildren(); assertEquals(ElementContentType.EMPTY, e.getContentType()); e.addText("Hello"); assertEquals(ElementContentType.TEXT, e.getContentType()); e.addText("World"); assertEquals(ElementContentType.TEXT, e.getContentType()); e.addComment("Hello"); assertEquals(ElementContentType.MIXED, e.getContentType()); e.removeChildren(); assertEquals(ElementContentType.EMPTY, e.getContentType()); e.addElement("child"); assertEquals(ElementContentType.NON_TEXT, e.getContentType()); e.addComment("Hello"); assertEquals(ElementContentType.NON_TEXT, e.getContentType()); e.addText("World"); assertEquals(ElementContentType.MIXED, e.getContentType()); }
@Test public void testChangeComments() { final Element root = new Element(NAME); root.addComment("hello", false); root.addComment("HELLO", false); root.changeComments(String::toUpperCase); assertEquals(2, root.getChildrenCount()); assertEquals("HELLO", root.getChildAt(Comment.class, 0).getContent()); assertEquals("HELLO", root.getChildAt(Comment.class, 1).getContent()); root.removeChildren(); final Element child1 = root.addElement(NAME1); final Element child2 = root.addElement(NAME2); final Element child3 = root.addElement(NAME1); child1.addComment("hello"); child2.addComment("hello"); child3.addComment("hel"); child3.addComment("lo", false); assertEquals(2, child3.getChildrenCount()); root.changeComments(String::toUpperCase, true); assertEquals(2, child3.getChildrenCount()); assertEquals("HELLO", child1.getChild(Comment.class).getContent()); assertEquals("HEL", child3.getChildAt(Comment.class, 0).getContent()); }
@Test public void testChangeTexts() { final Element root = new Element(NAME); root.addText("hello", false); root.addText("HELLO", false); root.changeTexts(String::toUpperCase); assertEquals(2, root.getChildrenCount()); assertEquals("HELLO", root.getChildAt(Text.class, 0).getContent()); assertEquals("HELLO", root.getChildAt(Text.class, 1).getContent()); root.removeChildren(); final Element child1 = root.addElement(NAME1); final Element child2 = root.addElement(NAME2); final Element child3 = root.addElement(NAME1); child1.addText("hello"); child2.addText("hello"); child3.addText("hel"); child3.addText("lo", false); assertEquals(2, child3.getChildrenCount()); root.changeTexts(String::toUpperCase); assertEquals(2, child3.getChildrenCount()); root.changeNamedTexts(NAME1, String::toUpperCase); assertEquals(1, child3.getChildrenCount()); assertEquals("HELLO", child1.getText()); assertEquals("HELLO", child3.getText()); }
@Test public void testGetChildren() { final Element root = new Element(NAME); assertEquals(null, root.getLastChild()); final Element child1 = root.addElement(NAME1); final Element child2 = root.addElement(NAME2); final Element child3 = root.addElement(NAME1); child3.addAttribute(NAME, VALUE); final Comment child4 = root.addComment("Hello"); assertEquals(4, root.getChildrenCount()); assertTrue(root.hasChildren(Element.class)); assertTrue(root.hasChildren(Comment.class)); assertFalse(root.hasChildren(Text.class)); assertEquals(child4, root.getLastChild()); assertEquals(child1, root.getChild(Element.class)); assertEquals(child1, root.getElementNamed(NAME1)); assertEquals(3, root.getChildrenCount(Element.class)); assertEquals(2, root.getChildrenCount(Element.class, Element.named(NAME1))); assertEquals(child2, root.getChild(Element.class, Element.named(NAME2))); assertEquals(child2, root.getChildAt(Element.class, Element.named(NAME2), 0)); assertEquals(null, root.getChildAt(Element.class, Element.named(NAME2), 1)); assertEquals(child3, root.getChildAt(2)); assertEquals(child3, root.getChildAt(Element.class, 2)); assertEquals(child4, root.getChildAt(Comment.class, 0)); assertEquals(3, Iterables.size(root.getElements())); assertEquals(1, Iterables.size(root.getComments())); assertEquals(0, Iterables.size(root.getTexts())); assertEquals(child3, root.getElementNamedWithAttribute(NAME1, NAME, VALUE)); }