blob: 106ec14cfed4b405758cc5f2c45f7f85d48b98aa [file] [log] [blame]
/*
* Copyright 2008 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.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.OpenEvent;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Timer;
/**
* Tests core functionality of {@link DisclosurePanel}.
*/
@SuppressWarnings("deprecation")
public class DisclosurePanelTest extends GWTTestCase {
private static final int OPEN = 0;
private static final int CLOSE = 1;
@Override
public String getModuleName() {
return "com.google.gwt.user.DebugTest";
}
/**
* Test to ensure css style changes that control core functionality do change
* appropriately.
*/
public void testCoreFunctionality() {
final DisclosurePanel panel = createTestPanel();
assertTrue(DOM.getStyleAttribute(
DOM.getParent(panel.getContent().getElement()), "display").equalsIgnoreCase(
"none"));
panel.setOpen(true);
delayTestFinish(5000);
// Allow the animation time to finish
Timer t = new Timer() {
@Override
public void run() {
assertTrue(DOM.getStyleAttribute(
DOM.getParent(panel.getContent().getElement()), "display").trim().equals(
""));
finishTest();
}
};
t.schedule(450);
}
public void testAttachDetachOrder() {
HasWidgetsTester.testAll(new DisclosurePanel(),
new HasWidgetsTester.DefaultWidgetAdder(), false);
}
public void testDebugId() {
Label header = new Label("header");
Label content = new Label("content");
DisclosurePanel panel = new DisclosurePanel(header);
panel.setContent(content);
panel.ensureDebugId("myPanel");
// Check the body ids
UIObjectTest.assertDebugId("myPanel", panel.getElement());
UIObjectTest.assertDebugId("myPanel-header",
DOM.getParent(header.getElement()));
}
public void testEvents() {
final DisclosurePanel panel = createTestPanel();
assertEquals(1, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
panel.addCloseHandler(new CloseHandler<DisclosurePanel>() {
public void onClose(CloseEvent<DisclosurePanel> event) {
// for now nothing.
}
});
assertEquals(2, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
}
/**
* Test to ensure that event handler dispatch function appropriately.
*/
@SuppressWarnings("deprecation")
public void testEventHandlers() {
final boolean[] aDidFire = new boolean[2];
final boolean[] bDidFire = new boolean[2];
final DisclosurePanel panel = createTestPanel();
DisclosureHandler handleA = new DisclosureHandler() {
public void onClose(DisclosureEvent event) {
aDidFire[CLOSE] = true;
}
public void onOpen(DisclosureEvent event) {
aDidFire[OPEN] = true;
}
};
DisclosureHandler handleB = new DisclosureHandler() {
public void onClose(DisclosureEvent event) {
assertEquals(event.getSource(), panel);
bDidFire[CLOSE] = true;
}
public void onOpen(DisclosureEvent event) {
assertEquals(event.getSource(), panel);
bDidFire[OPEN] = true;
}
};
panel.addEventHandler(handleA);
panel.addEventHandler(handleB);
// There is one to begin with.
assertEquals(3, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
assertEquals(3, panel.getHandlerManager().getHandlerCount(OpenEvent.getType()));
panel.setOpen(true);
// We expect onOpen to fire and onClose to not fire.
assertTrue(aDidFire[OPEN] && bDidFire[OPEN] && !aDidFire[CLOSE]
&& !bDidFire[CLOSE]);
aDidFire[OPEN] = bDidFire[OPEN] = false;
panel.setOpen(false);
// We expect onOpen to fire and onClose to not fire.
assertTrue(aDidFire[CLOSE] && bDidFire[CLOSE] && !aDidFire[OPEN]
&& !bDidFire[OPEN]);
aDidFire[OPEN] = bDidFire[CLOSE] = false;
panel.removeEventHandler(handleB);
assertEquals(2, panel.getHandlerManager().getHandlerCount(OpenEvent.getType()));
assertEquals(2, panel.getHandlerManager().getHandlerCount(CloseEvent.getType()));
panel.setOpen(true);
panel.setOpen(false);
// We expect a to have fired both events, and b to have fired none.
assertTrue(aDidFire[OPEN]);
assertTrue(aDidFire[CLOSE]);
assertTrue(!bDidFire[OPEN]);
assertTrue(!bDidFire[CLOSE]);
}
/**
* Tests that the content is set to null if the content widget's
* {@link Widget#removeFromParent()} method is called.
*/
public void testRemoveFromParent() {
DisclosurePanel panel = createTestPanel();
Label content = new Label();
panel.setContent(content);
assertEquals(content, panel.getContent());
content.removeFromParent();
assertNull(panel.getContent());
}
private DisclosurePanel createTestPanel() {
DisclosurePanel panel = new DisclosurePanel("Test Subject", false);
panel.setContent(new SimplePanel());
return panel;
}
}