package com.googlecode.gwt.test.dom;
import com.google.gwt.dom.client.*;
import com.googlecode.gwt.test.GwtTestTest;
import com.googlecode.gwt.test.internal.utils.JsoUtils;
import org.junit.Before;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class NodeTest extends GwtTestTest {
private Node n;
@Test
public void appendChilds() {
// Given
BaseElement c0 = Document.get().createBaseElement();
ButtonElement c1 = Document.get().createPushButtonElement();
// When
n.appendChild(c0);
n.appendChild(c1);
// Then
assertThat(n.getChildNodes().getLength()).isEqualTo(2);
assertThat(n.getChildNodes().getItem(0)).isEqualTo(c0);
assertThat(n.getChildNodes().getItem(1)).isEqualTo(c1);
}
@Test
public void as() {
// When & Then 1
assertThat(Node.as(n)).isEqualTo(n);
}
@Before
public void beforeNodeTest() {
n = Document.get().createDivElement();
}
@Test
public void clone_Deep() {
// Given
AnchorElement child = Document.get().createAnchorElement();
child.setInnerText("child inner text");
child.getStyle().setBackgroundColor("black");
n.appendChild(child);
// When
DivElement newNode = n.cloneNode(true).cast();
// Then
assertThat(newNode.getNodeType()).isEqualTo(Node.ELEMENT_NODE);
DivElement source = n.cast();
assertThat(newNode.getInnerText()).isEqualTo(source.getInnerText());
assertThat(newNode.getInnerHTML()).isEqualTo(source.getInnerHTML());
assertThat(newNode.toString()).isEqualTo(source.toString());
assertThat(newNode.getParentNode()).isNull();
assertThat(newNode.getChildNodes().getLength()).isEqualTo(n.getChildNodes().getLength());
assertThat(newNode.getChildNodes().getItem(0).getNodeType()).isEqualTo(Node.ELEMENT_NODE);
AnchorElement childElement = newNode.getChildNodes().getItem(0).cast();
assertThat(childElement.getInnerText()).isEqualTo("child inner text");
Style newStyle = childElement.getStyle();
assertThat(newStyle != child.getStyle()).isTrue();
assertThat(newStyle.getBackgroundColor()).isEqualTo("black");
}
@Test
public void clone_NotDeep() {
// Given
Element e = n.cast();
e.setInnerText("text");
e.getStyle().setBackgroundColor("black");
AnchorElement child = Document.get().createAnchorElement();
child.setInnerText("child inner text");
n.appendChild(child);
// When
DivElement newNode = n.cloneNode(false).cast();
// Then
assertThat(newNode.getNodeType()).isEqualTo(Node.ELEMENT_NODE);
assertThat(e.getStyle() != newNode.getStyle()).isTrue();
assertThat(newNode.getStyle().getBackgroundColor()).isEqualTo("black");
assertThat(newNode.getInnerText()).isEqualTo("text");
assertThat(newNode.getParentNode()).isNull();
assertThat(n.getChildNodes().getLength()).isEqualTo(2);
assertThat(newNode.getChildNodes().getLength()).isEqualTo(1);
}
@Test
public void getFirstChild() {
// Preconditions
assertThat(n.getFirstChild()).isNull();
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
n.appendChild(be0);
n.appendChild(be1);
// When & Then
assertThat(n.getFirstChild()).isEqualTo(be0);
}
@Test
public void getLastChild() {
// Preconditions
assertThat(n.getLastChild()).isNull();
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
n.appendChild(be0);
n.appendChild(be1);
// When & Then
assertThat(n.getLastChild()).isEqualTo(be1);
}
@Test
public void getNextSibling() {
// Preconditions
assertThat(n.getNextSibling()).isNull();
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
n.appendChild(be0);
n.appendChild(be1);
// When & Then
assertThat(be0.getNextSibling()).isEqualTo(be1);
}
@Test
public void getOwnerDocument() {
// When & Then
assertThat(n.getOwnerDocument()).isEqualTo(Document.get());
}
@Test
public void getParentNode() {
// Preconditions
assertThat(n.getParentNode()).isNull();
// Given
BaseElement be = Document.get().createBaseElement();
n.appendChild(be);
// When & Then
assertThat(be.getParentNode()).isEqualTo(n);
}
@Test
public void getPreviousSibling() {
// Preconditions
assertThat(n.getPreviousSibling()).isNull();
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
n.appendChild(be0);
n.appendChild(be1);
// When & Then
assertThat(be1.getPreviousSibling()).isEqualTo(be0);
}
@Test
public void hasChildNodes() {
// Preconditions
assertThat(n.hasChildNodes()).as("New element should not have child nodes").isFalse();
// Given
BaseElement be = Document.get().createBaseElement();
n.appendChild(be);
// When & Then
assertThat(n.hasChildNodes()).as("Element should have a child node").isTrue();
}
@Test
public void insertBefore() {
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
ButtonElement be2 = Document.get().createPushButtonElement();
ButtonElement be3 = Document.get().createPushButtonElement();
ButtonElement be4 = Document.get().createPushButtonElement();
ButtonElement be5 = Document.get().createPushButtonElement();
n.appendChild(be0);
n.appendChild(be2);
// When & Then
n.insertBefore(be1, be2);
n.insertBefore(be3, null);
n.insertBefore(be4, be5);
assertThat(n.getChildNodes().getItem(0)).isEqualTo(be0);
assertThat(n.getChildNodes().getItem(1)).isEqualTo(be1);
assertThat(n.getChildNodes().getItem(2)).isEqualTo(be2);
assertThat(n.getChildNodes().getItem(3)).isEqualTo(be3);
assertThat(n.getChildNodes().getItem(4)).isEqualTo(be4);
}
@Test
public void is() {
// Given
NodeList<OptionElement> list = JsoUtils.newNodeList();
// When & Then
assertThat(Node.is(null)).as("null is not a DOM node").isFalse();
assertThat(Node.is(list)).as("NodeList is not a DOM node").isFalse();
assertThat(Node.is(Document.get().createAnchorElement())).as("AnchorElement is a DOM node").isTrue();
}
@Test
public void isOrHasChild_hasChild() {
// Given
Element a = Document.get().createAnchorElement();
Element div = Document.get().createDivElement();
div.appendChild(a);
n.appendChild(div);
// When & Then
assertThat(n.isOrHasChild(a)).isTrue();
}
@Test
public void isOrHasChild_is() {
// When & Then
assertThat(n.isOrHasChild(n)).isTrue();
}
@Test
public void isOrHasChild_notChild() {
// Given
Element a = Document.get().createAnchorElement();
// When & Then
assertThat(n.isOrHasChild(a)).isFalse();
}
@Test
public void nodeName() {
// When & Then
assertThat(Document.get().getNodeName()).isEqualTo("#document");
assertThat(Document.get().getDocumentElement().getNodeName()).isEqualTo("HTML");
assertThat(Document.get().createAnchorElement().getNodeName()).isEqualTo("a");
assertThat(JsoUtils.newText("test", Document.get()).getNodeName()).isEqualTo("#text");
}
@Test
public void nodeType() {
// When & Then
assertThat(Document.get().getNodeType()).isEqualTo(Node.DOCUMENT_NODE);
assertThat(Document.get().getDocumentElement().getNodeType()).isEqualTo(Node.ELEMENT_NODE);
assertThat(Document.get().createAnchorElement().getNodeType()).isEqualTo(Node.ELEMENT_NODE);
assertThat(JsoUtils.newText("test", Document.get()).getNodeType()).isEqualTo(Node.TEXT_NODE);
}
@Test
public void nodeValue_Document() {
// Given
Node documentNode = Document.get();
// Preconditions
assertThat(documentNode.getNodeValue()).isNull();
// When
documentNode.setNodeValue("node");
// Then
assertThat(documentNode.getNodeValue()).isNull();
}
@Test
public void nodeValue_Element() {
// Given
Node doucmentNode = Document.get().getDocumentElement();
// Preconditions
assertThat(doucmentNode.getNodeValue()).isNull();
// When
doucmentNode.setNodeValue("node");
// Then
assertThat(doucmentNode.getNodeValue()).isNull();
}
@Test
public void nodeValue_Text() {
// Given
Text textNode = Document.get().createTextNode("data");
// Preconditions
assertThat(textNode.getNodeValue()).isEqualTo("data");
// When
textNode.setNodeValue("node");
// Then
assertThat(textNode.getNodeValue()).isEqualTo("node");
assertThat(textNode.getData()).isEqualTo("node");
}
@Test
public void removeAllChildren() {
// Given
n.appendChild(Document.get().createAnchorElement());
n.appendChild(Document.get().createDivElement());
// When
n.removeAllChildren();
// Then
assertThat(n.getChildCount()).isEqualTo(0);
}
@Test
public void removeChild() {
// Given
BaseElement c0 = Document.get().createBaseElement();
ButtonElement c1 = Document.get().createPushButtonElement();
n.appendChild(c0);
n.appendChild(c1);
// When
n.removeChild(c1);
// Then
assertThat(n.getChildNodes().getLength()).isEqualTo(1);
assertThat(n.getChildNodes().getItem(0)).isEqualTo(c0);
}
@Test
public void replaceChild() {
// Given
BaseElement c0 = Document.get().createBaseElement();
ButtonElement c1 = Document.get().createPushButtonElement();
AnchorElement c2 = Document.get().createAnchorElement();
n.appendChild(c0);
n.appendChild(c1);
// When
Node replaced = n.replaceChild(c2, c1);
Node nullReplaced = n.replaceChild(c2, c1);
Node nullReplaced2 = n.replaceChild(c2, null);
// Then
assertThat(n.getChildNodes().getLength()).isEqualTo(2);
assertThat(n.getChildNodes().getItem(0)).isEqualTo(c0);
assertThat(n.getChildNodes().getItem(1)).isEqualTo(c2);
assertThat(replaced).isEqualTo(c1);
assertThat(nullReplaced).isNull();
assertThat(nullReplaced2).isNull();
}
}