package com.googlecode.gwt.test.dom;
import com.google.gwt.dom.client.*;
import com.google.gwt.dom.client.Style.Float;
import com.googlecode.gwt.test.GwtTestTest;
import com.googlecode.gwt.test.internal.utils.JsoUtils;
import org.junit.Before;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
public class ElementTest extends GwtTestTest {
private Element e;
@Test
public void attribute() {
// Preconditions
assertThat(e.getAttribute("input")).isEqualTo("");
// When
e.setAttribute("input", "text");
// Then
assertThat(e.getAttribute("input")).isEqualTo("text");
}
@Before
public void beforeElementTest() {
e = Document.get().createDivElement();
}
@Test
public void cast_OK() {
// When
DivElement casted = e.cast();
// Then
assertThat(casted).isNotNull();
}
@Test
public void checkHashCode() {
// Given
Map<Element, String> map = new HashMap<Element, String>();
// When
map.put(e, "a string value");
map.put(e, "this value should have overrided the first one");
// Then
assertThat(map.get(e)).isEqualTo("this value should have overrided the first one");
}
@Test
public void checkToString() {
// Given
DivElement div = Document.get().createDivElement();
div.setAttribute("someAttr", "myVal");
div.getStyle().setBackgroundColor("black");
div.getStyle().setFloat(Float.LEFT);
div.getStyle().setProperty("backgroundColor", "white");
div.setInnerHTML("<span>in span</span> out span");
// When
String html = div.toString();
// Then
assertThat(html).isEqualTo("<div someattr=\"myVal\" style=\"float: left; background-color: white; \"><span>in span</span> out span</div>");
}
@Test
public void className() {
// When 1
e.setClassName("testClass");
// Then 1
assertThat(e.getClassName()).isEqualTo("testClass");
assertThat(e.getAttribute("class")).isEqualTo("testClass");
assertThat(e.getAttribute("CLASS")).isEqualTo("testClass");
assertThat(e.getAttribute("className")).isEqualTo("");
assertThat(e.getAttribute("CLASSNAME")).isEqualTo("");
assertThat(e.getPropertyString("class")).isNull();
assertThat(e.getPropertyString("CLASS")).isNull();
assertThat(e.getPropertyString("className")).isEqualTo("testClass");
assertThat(e.getPropertyString("CLASSNAME")).isNull();
// When 2
e.addClassName("addon");
// Then 2
assertThat(e.getClassName()).isEqualTo("testClass addon");
assertThat(e.getAttribute("class")).isEqualTo("testClass addon");
// When 3
e.setAttribute("class", "override");
// Then 3
assertThat(e.getClassName()).isEqualTo("override");
assertThat(e.getAttribute("class")).isEqualTo("override");
}
@Test
public void clone_Deep() {
// Given
e.setTitle("title");
e.setPropertyBoolean("bool", true);
Element child = Document.get().createAnchorElement();
child.setTitle("child");
e.appendChild(child);
// When
DivElement newNode = e.cloneNode(true).cast();
// Then
assertThat(newNode.getTitle()).isEqualTo("title");
assertThat(newNode.getParentNode()).as("Cloned element's parent should be null").isNull();
assertThat(newNode.getPropertyBoolean("bool")).isEqualTo(true);
assertThat(newNode.getChildNodes().getLength()).isEqualTo(1);
assertThat(child != newNode.getChildNodes().getItem(0)).isTrue();
assertThat(e.getChildNodes().getLength()).isEqualTo(1);
}
@Test
public void clone_NotDeep() {
// Given
e.setTitle("title");
e.setPropertyBoolean("bool", true);
AnchorElement child = Document.get().createAnchorElement();
child.setTitle("child");
e.appendChild(child);
// When
DivElement newNode = e.cloneNode(false).cast();
// Then
assertThat(newNode.getTitle()).isEqualTo("title");
assertThat(newNode.getParentNode()).as("Cloned element's parent should be null").isNull();
assertThat(newNode.getPropertyBoolean("bool")).isEqualTo(true);
assertThat(newNode.getChildNodes().getLength()).isEqualTo(0);
assertThat(e.getChildNodes().getLength()).isEqualTo(1);
}
@Test
public void dir() {
// When
e.setDir("dir");
// Then
assertThat(e.getDir()).isEqualTo("dir");
}
@Test
public void domImplementation() {
// Given
e.setAttribute("test", "testAttr");
// Then getAttribute() is case insensitive
assertThat(e.getAttribute("test")).isEqualTo("testAttr");
assertThat(e.getAttribute("Test")).isEqualTo("testAttr");
// Then hasAttribute is case insensitive
assertThat(e.hasAttribute("teST")).isTrue();
// Then removeAttribute is case insensitve
e.removeAttribute("tEst");
assertThat(e.getAttribute("test")).isEqualTo("");
assertThat(e.hasAttribute("teST")).isFalse();
// Then "non standard" DOM properties returns 'undefined' for String,
// Object and JSO
assertThat(e.getPropertyString("test")).isNull();
assertThat(e.getPropertyBoolean("test")).isFalse();
assertThat(e.getPropertyInt("test")).isEqualTo(0);
assertThat((Double) e.getPropertyDouble("test")).isEqualTo(new Double(0.0));
assertThat(e.getPropertyObject("test")).isNull();
assertThat(e.getPropertyJSO("test")).isNull();
// Then "standard" DOM properties returns "" for String
assertThat(e.getPropertyString("className")).isEqualTo("");
assertThat(e.getPropertyString("classnamE")).isNull();
e.setPropertyString("className", "testClass");
assertThat(e.getPropertyString("className")).isEqualTo("testClass");
// Special case "class" and "className"
assertThat(e.getPropertyString("class")).isNull();
assertThat(e.getAttribute("class")).isEqualTo("testClass");
assertThat(e.getAttribute("CLASSNAME")).isEqualTo("");
assertThat(e.getPropertyString("CLASSNAME")).isNull();
// Then on Style JSO
assertThat(e.getAttribute("style")).isEqualTo(""); // prints ""
assertThat(e.getPropertyString("style")).isEqualTo("");
}
@Test
public void getElementByTagName() {
// Given
AnchorElement ae0 = Document.get().createAnchorElement();
AnchorElement ae1 = Document.get().createAnchorElement();
ButtonElement be = Document.get().createPushButtonElement();
e.appendChild(ae0);
e.appendChild(ae1);
e.appendChild(be);
// When
NodeList<Element> anchorList = e.getElementsByTagName("a");
NodeList<Element> buttonList = e.getElementsByTagName("button");
NodeList<Element> allList = e.getElementsByTagName("*");
// Then
assertThat(anchorList.getLength()).isEqualTo(2);
assertThat(anchorList.getItem(0)).isEqualTo(ae0);
assertThat(anchorList.getItem(1)).isEqualTo(ae1);
assertThat(buttonList.getLength()).isEqualTo(1);
assertThat(buttonList.getItem(0)).isEqualTo(be);
assertThat(allList.getLength()).isEqualTo(3);
assertThat(allList.getItem(0)).isEqualTo(ae0);
assertThat(allList.getItem(1)).isEqualTo(ae1);
assertThat(allList.getItem(2)).isEqualTo(be);
}
@Test
public void getFirstChildElement() {
// Preconditions
assertThat(e.getFirstChildElement()).isNull();
// Given
Node node = Document.get().createTextNode("test");
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
e.appendChild(node);
e.appendChild(be0);
e.appendChild(be1);
// When & Then
assertThat(e.getFirstChildElement()).isEqualTo(be0);
}
@Test
public void getNextSiblingElement() {
// Preconditions
assertThat(e.getNextSiblingElement()).isNull();
// Given
ButtonElement be0 = Document.get().createPushButtonElement();
ButtonElement be1 = Document.get().createPushButtonElement();
e.appendChild(be0);
e.appendChild(JsoUtils.newText("test1", Document.get()));
e.appendChild(be1);
e.appendChild(JsoUtils.newText("test2", Document.get()));
// When & Then
assertThat(be0.getNextSiblingElement()).isEqualTo(be1);
assertThat(be1.getNextSiblingElement()).isNull();
}
@Test
public void getOffset() {
// Given
Element parent = Document.get().createElement("a");
parent.appendChild(e);
// When & Then
assertThat(e.getOffsetHeight()).isEqualTo(0);
assertThat(e.getOffsetLeft()).isEqualTo(0);
assertThat(e.getOffsetTop()).isEqualTo(0);
assertThat(e.getOffsetWidth()).isEqualTo(0);
assertThat(e.getOffsetParent()).isEqualTo(parent);
}
@Test
public void getParentElement() {
// Given
Element otherParent = Document.get().createDivElement();
Element child = Document.get().createBaseElement();
e.appendChild(child);
// When and assert
assertThat(child.getParentElement()).isEqualTo(e);
// When 2
otherParent.appendChild(child);
// Then 2
assertThat(e.hasChildNodes()).isFalse();
}
@Test
public void hasAttribute() {
// Given
e.setAttribute("myAttr", "value");
// When & Then
assertThat(e.hasAttribute("myAttr")).isTrue();
}
@Test
public void id() {
// When 1
e.setId("myId");
// Then 1
assertThat(e.getId()).isEqualTo("myId");
assertThat(e.getAttribute("id")).isEqualTo("myId");
// When 2
e.setAttribute("id", "updatedId");
// Then 2
assertThat(e.getId()).isEqualTo("updatedId");
assertThat(e.getAttribute("id")).isEqualTo("updatedId");
}
@Test
public void innerHTML() {
// When
e.setInnerHTML("<h1>test</h1>");
// Then
assertThat(e.getInnerHTML()).isEqualTo("<h1>test</h1>");
assertThat(e.getChildCount()).isEqualTo(1);
HeadingElement h1 = e.getChild(0).cast();
assertThat(h1.getTagName()).isEqualTo("H1");
assertThat(h1.getInnerText()).isEqualTo("test");
}
@Test
public void innerText() {
// When
e.setInnerText("myText");
// Then
assertThat(e.getInnerText()).isEqualTo("myText");
}
@Test
public void isOrHasChild() {
// Given
AnchorElement child = Document.get().createAnchorElement();
e.appendChild(child);
AnchorElement notAChild = Document.get().createAnchorElement();
// When & Then
assertThat(e.isOrHasChild(e)).isTrue();
assertThat(e.isOrHasChild(child)).isTrue();
assertThat(e.isOrHasChild(notAChild)).isFalse();
}
@Test
public void lang() {
// When
e.setLang("myLang");
// Then
assertThat(e.getLang()).isEqualTo("myLang");
}
@Test
public void propertyBoolean_False() {
// When
e.setPropertyBoolean("prop", false);
// Then
assertThat(e.getPropertyBoolean("prop")).isFalse();
}
@Test
public void propertyBoolean_True() {
// Preconditions
assertThat(e.getPropertyBoolean("prop")).isFalse();
// When
e.setPropertyBoolean("prop", true);
// Then
assertThat(e.getPropertyBoolean("prop")).isTrue();
}
@Test
public void propertyDouble() {
// Preconditions
assertThat((Double) e.getPropertyDouble("prop")).isEqualTo(new Double(0));
// When
e.setPropertyDouble("prop", 23);
// Then
assertThat((Double) e.getPropertyDouble("prop")).isEqualTo(new Double(23));
}
@Test
public void propertyInt() {
// Preconditions
assertThat(e.getPropertyInt("prop")).isEqualTo(0);
// When
e.setPropertyInt("prop", 2);
// Then
assertThat(e.getPropertyInt("prop")).isEqualTo(2);
}
@Test
public void propertyString() {
// Preconditions
assertThat(e.getPropertyString("prop")).isNull();
// When
e.setPropertyString("prop", "test");
// Then
assertThat(e.getPropertyString("prop")).isEqualTo("test");
}
@Test
public void removeAttribute() {
// Given
e.setAttribute("test", "value");
// When
e.removeAttribute("Test");
// Then
assertThat(e.getAttribute("test")).as("Removed attribute should return emptyString").isEqualTo("");
}
@Test
public void scrollLeft() {
// Preconditions
assertThat(e.getScrollLeft()).isEqualTo(0);
// When
e.setScrollLeft(3);
// Then
assertThat(e.getScrollLeft()).isEqualTo(3);
}
@Test
public void scrollTop() {
// Preconditions
assertThat(e.getScrollTop()).isEqualTo(0);
// When
e.setScrollTop(3);
assertThat(e.getScrollTop()).isEqualTo(3);
}
@Test
public void style() {
// When
e.getStyle().setProperty("test", "value");
// Then
assertThat(e.getStyle().getProperty("test")).isEqualTo("value");
}
@Test
public void tagName() {
// When & Then
assertThat(e.getTagName()).isEqualTo("div");
assertThat(e.getAttribute("tagName")).isEqualTo("");
assertThat(e.getAttribute("TAGNAME")).isEqualTo("");
assertThat(e.getPropertyString("tagName")).isEqualTo("DIV");
assertThat(e.getPropertyString("TAGNAME")).isNull();
}
@Test
public void title() {
// Preconditions
assertThat(e.getTitle()).isEqualTo("");
assertThat(e.getAttribute("title")).isEqualTo("");
assertThat(e.getAttribute("titLe")).isEqualTo("");
assertThat(e.getPropertyString("title")).isEqualTo("");
assertThat(e.getPropertyString("titLe")).isNull();
assertThat(e.getPropertyObject("title")).isNull();
assertThat(e.getPropertyObject("titLe")).isNull();
// When
e.setTitle("MyTitle");
// Then
assertThat(e.getTitle()).isEqualTo("MyTitle");
assertThat(e.getAttribute("title")).isEqualTo("MyTitle");
assertThat(e.getAttribute("titLe")).isEqualTo("MyTitle");
assertThat(e.getPropertyString("title")).isEqualTo("MyTitle");
assertThat(e.getPropertyString("titLe")).isNull();
assertThat(e.getPropertyObject("title")).isEqualTo("MyTitle");
assertThat(e.getPropertyObject("titLe")).isNull();
}
}