blob: f4f21e8485c6cd401f1020b988041b896fa3772a [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package elemental.html;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
import com.google.gwt.junit.client.GWTTestCase;
import static elemental.client.Browser.getDocument;
import elemental.client.Browser;
import elemental.dom.Document;
import elemental.dom.Element;
import elemental.events.Event;
import elemental.events.EventListener;
/**
* Tests for HTMLElement.
*/
public class ElementTest extends GWTTestCase {
private Element btn;
@Override
public String getModuleName() {
return "elemental.Elemental";
}
/**
* Tests that addEventListener() actually fires events.
*/
public void testEventListener() {
final boolean[] clicked = new boolean[1];
btn.addEventListener("click", new EventListener() {
@Override
public void handleEvent(Event evt) {
clicked[0] = true;
}
}, false);
TestUtils.click(btn);
assertTrue(clicked[0]);
}
/**
* Tests {@link Element#hasClassName(String)}.
*/
public void testHasClassName() {
final Element e = btn;
e.setClassName("jimmy crack corn");
assertTrue(e.getClassList().contains("jimmy"));
assertTrue(e.getClassList().contains("crack"));
assertTrue(e.getClassList().contains("corn"));
assertFalse(e.getClassList().contains("jim"));
assertFalse(e.getClassList().contains("popcorn"));
e.setClassName("turtles");
assertTrue(e.getClassList().contains("turtles"));
}
/**
* Tests that setting Element.onclick actually fires events.
*/
public void testOnClick() {
final boolean[] clicked = new boolean[1];
EventListener listener = new EventListener() {
@Override
public void handleEvent(Event evt) {
clicked[0] = true;
}
};
btn.setOnclick(listener);
TestUtils.click(btn);
assertTrue(clicked[0]);
assertEquals(listener, btn.getOnclick());
}
/**
* Tests that the {@link UncaughtExceptionHandler} gets called correctly when
* events are fired from {@link Element#setOnClick(EventListener)}.
*/
public void testUncaughtException() {
// Create a button with an event handler that will throw an exception.
Document doc = Browser.getDocument();
ButtonElement btn = doc.createButtonElement();
doc.getBody().appendChild(btn);
btn.setOnclick(new EventListener() {
@Override
public void handleEvent(Event evt) {
throw new RuntimeException("w00t!");
}
});
// Setup the UncaughtExceptionHandler.
final Throwable[] ex = new Throwable[1];
GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void onUncaughtException(Throwable e) {
ex[0] = e;
}
});
// Click it and make sure the exception got caught.
TestUtils.click(btn);
assertNotNull(ex[0]);
assertEquals("w00t!", ex[0].getMessage());
// Clean up.
GWT.setUncaughtExceptionHandler(null);
doc.getBody().removeChild(btn);
}
@Override
protected void gwtSetUp() throws Exception {
btn = getDocument().createElement("button");
getDocument().getBody().appendChild(btn);
}
@Override
protected void gwtTearDown() throws Exception {
getDocument().getBody().removeChild(btn);
}
}