blob: 200404ab5e3e6050eb991e6f1687cdc04dd6f743 [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 com.google.gwt.user.client;
import com.google.gwt.event.dom.client.DoubleClickEvent;
import com.google.gwt.event.dom.client.DoubleClickHandler;
import com.google.gwt.event.dom.client.HasDoubleClickHandlers;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SimpleRadioButton;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.Widget;
/**
* Test Case for sinking of double click events.
*/
public class DoubleClickEventSinkTest extends GWTTestCase {
@Override
public String getModuleName() {
return "com.google.gwt.user.User";
}
public void testDoubleClickBitFieldNotTriviallyZero() {
assertNotSame(0, Event.ONDBLCLICK);
}
public void testFocusPanelDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new FocusPanel(), false);
}
public void testFocusWidgetDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new Anchor(), false);
verifyEventSinkOnAddHandler(new Button(), false);
CheckBox checkBox = new CheckBox();
// Get the inputElem on which events are sunk
Element e = (Element) checkBox.getElement().getFirstChildElement();
verifyEventSinkOnAddHandler(checkBox, e, false);
verifyEventSinkOnAddHandler(new ToggleButton(), false);
verifyEventSinkOnAddHandler(new ListBox(), false);
verifyEventSinkOnAddHandler(new RichTextArea(), false);
verifyEventSinkOnAddHandler(new TextArea(), false);
verifyEventSinkOnAddHandler(new PasswordTextBox(), false);
verifyEventSinkOnAddHandler(new TextBox(), false);
verifyEventSinkOnAddHandler(new SimpleRadioButton("foo"), false);
}
public void testHTMLTableDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new Grid(), false);
verifyEventSinkOnAddHandler(new FlexTable(), false);
}
public void testImageDoubleClickEventSinkByAddingHandler() {
/*
* The Image widget currently sinks events too early, before handlers are
* attached. We verify that (broken) behavior in this test.
* TODO(fredsa) Once Image has been fixed to lazily sink events, update
* this test and remove verifyEventSinkOnAddHandler's second parameter.
*/
verifyEventSinkOnAddHandler(new Image(), true);
}
public void testLabelDoubleClickEventSinkByAddingHandler() {
verifyEventSinkOnAddHandler(new Label(), false);
}
private boolean isDoubleClickEventSunk(Element e) {
return (DOM.getEventsSunk(e) & Event.ONDBLCLICK) != 0;
}
private <W extends Widget & HasDoubleClickHandlers>
void verifyEventSinkOnAddHandler(W w, boolean allowEarlySink) {
verifyEventSinkOnAddHandler(w, w.getElement(), allowEarlySink);
}
private <W extends Widget & HasDoubleClickHandlers>
void verifyEventSinkOnAddHandler(W w, Element e, boolean widgetSinksEventsOnAttach) {
RootPanel.get().add(w);
if (widgetSinksEventsOnAttach) {
assertTrue("Event should have been sunk on " + w.getClass().getName()
+ " once the widget has been attached", isDoubleClickEventSunk(e));
} else {
assertFalse(
"Event should not be sunk on " + w.getClass().getName() + " until a "
+ DoubleClickEvent.getType().getName()
+ " handler has been added", isDoubleClickEventSunk(e));
}
w.addDoubleClickHandler(new DoubleClickHandler() {
public void onDoubleClick(DoubleClickEvent event) {
}
});
assertTrue(
"Event should have been sunk on " + w.getClass().getName()
+ " once the widget has been attached and a "
+ DoubleClickEvent.getType().getName() + " handler has been added",
isDoubleClickEventSunk(e));
}
}