blob: 9d78fd73830e818b9006d308cb6a018eb403a12c [file] [log] [blame]
/*
* Copyright 2009 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 com.google.gwt.user.client.ui;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.junit.client.GWTTestCase;
/**
* Tests the basic widget infrastructure.
*
*/
public class WidgetTest extends GWTTestCase {
ClickHandler handlerA = new ClickHandler() {
public void onClick(ClickEvent event) {
}
};
ClickHandler handlerB = new ClickHandler() {
public void onClick(ClickEvent event) {
}
};
@Override
public String getModuleName() {
return "com.google.gwt.user.User";
}
@SuppressWarnings("deprecation")
public void testCreateHandlerManager() {
final com.google.gwt.event.shared.HandlerManager manager = new com.google.gwt.event.shared.HandlerManager(
null);
Widget w = new Widget() {
@Override
protected com.google.gwt.event.shared.HandlerManager createHandlerManager() {
return manager;
}
};
w.ensureHandlers();
assertEquals(manager, w.getHandlerManager());
}
public void testAsWidget() {
Widget a = new Widget();
assertSame(a, a.asWidget());
}
public void testHandlerCount() {
Widget a = new Widget();
assertEquals(0, a.getHandlerCount(ClickEvent.getType()));
HandlerRegistration r1 = a.addDomHandler(handlerA, ClickEvent.getType());
assertEquals(1, a.getHandlerCount(ClickEvent.getType()));
HandlerRegistration r2 = a.addHandler(handlerB, ClickEvent.getType());
assertEquals(2, a.getHandlerCount(ClickEvent.getType()));
assertEquals(0, a.getHandlerCount(ChangeEvent.getType()));
r1.removeHandler();
r2.removeHandler();
assertEquals(0, a.getHandlerCount(ClickEvent.getType()));
}
public void testOnAttachWithErrorDoAttachChildren() {
// Create a panel that will throw an exception doAttachChildren
BadWidget w = new BadWidget();
w.setFailAttachChildren(true);
assertFalse(w.isAttached());
assertNull(w.getParent());
// Attach the widget.
try {
RootPanel.get().add(w);
fail("Expected AttachDetachException");
} catch (AttachDetachException e) {
// Expected.
}
assertTrue(w.isAttached());
assertEquals(RootPanel.get(), w.getParent());
// Detach the widget.
RootPanel.get().remove(w);
assertFalse(w.isAttached());
assertNull(w.getParent());
}
public void testOnAttachWithErrorOnLoad() {
// Create a widget that will throw an exception onLoad.
BadWidget w = new BadWidget();
w.setFailOnLoad(true);
assertFalse(w.isAttached());
assertNull(w.getParent());
// Attach the widget.
try {
RootPanel.get().add(w);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected.
}
assertTrue(w.isAttached());
assertEquals(RootPanel.get(), w.getParent());
// Detach the widget.
RootPanel.get().remove(w);
assertFalse(w.isAttached());
assertNull(w.getParent());
}
public void testOnDetachWithErrorDoDetachChildren() {
// Create a widget that will throw an exception onUnload.
BadWidget w = new BadWidget();
w.setFailDetachChildren(true);
assertFalse(w.isAttached());
assertNull(w.getParent());
// Attach the widget.
RootPanel.get().add(w);
assertTrue(w.isAttached());
assertEquals(RootPanel.get(), w.getParent());
// Detach the widget.
try {
RootPanel.get().remove(w);
fail("Expected AttachDetachException");
} catch (AttachDetachException e) {
// Expected.
}
assertFalse(w.isAttached());
assertNull(w.getParent());
}
public void testOnDetachWithErrorOnUnload() {
// Create a widget that will throw an exception onUnload.
BadWidget w = new BadWidget();
w.setFailOnUnload(true);
assertFalse(w.isAttached());
assertNull(w.getParent());
// Attach the widget.
RootPanel.get().add(w);
assertTrue(w.isAttached());
assertEquals(RootPanel.get(), w.getParent());
// Detach the widget.
try {
RootPanel.get().remove(w);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected.
}
assertFalse(w.isAttached());
assertNull(w.getParent());
}
public void testSetParentWithErrorOnUnload() {
// Create a widget that will throw an exception onUnload.
BadWidget w = new BadWidget();
w.setFailOnUnload(true);
assertFalse(w.isAttached());
assertNull(w.getParent());
// Attach the widget.
RootPanel.get().add(w);
assertTrue(w.isAttached());
assertEquals(RootPanel.get(), w.getParent());
// Detach the widget.
try {
w.removeFromParent();
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
// Expected.
}
assertFalse(w.isAttached());
assertNull(w.getParent());
}
}