From 7f769ec77d52aecbbf9d4787ab2e482d3b31a2af Mon Sep 17 00:00:00 2001 From: Juuso Valli Date: Wed, 18 Jun 2014 15:10:28 +0300 Subject: Fix regression with DnD tooltips (#7766) Change-Id: I74e6c35ef0aa30dbb24301bfb5858cedd0008e71 --- client/src/com/vaadin/client/TooltipInfo.java | 6 +- client/src/com/vaadin/client/VTooltip.java | 14 +-- .../DragAndDropWrapperTooltips.html | 53 -------- .../DragAndDropWrapperTooltips.java | 134 --------------------- .../tests/tooltip/DragAndDropWrapperTooltips.java | 134 +++++++++++++++++++++ .../tooltip/DragAndDropWrapperTooltipsTest.java | 44 +++++++ 6 files changed, 189 insertions(+), 196 deletions(-) delete mode 100644 uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html delete mode 100644 uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java create mode 100644 uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltips.java create mode 100644 uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltipsTest.java diff --git a/client/src/com/vaadin/client/TooltipInfo.java b/client/src/com/vaadin/client/TooltipInfo.java index 06940536c8..c1dd5037eb 100644 --- a/client/src/com/vaadin/client/TooltipInfo.java +++ b/client/src/com/vaadin/client/TooltipInfo.java @@ -15,6 +15,8 @@ */ package com.vaadin.client; +import com.vaadin.shared.util.SharedUtil; + public class TooltipInfo { private String title; @@ -79,7 +81,7 @@ public class TooltipInfo { } public boolean equals(TooltipInfo other) { - return (other != null && other.title == title - && other.errorMessageHtml == errorMessageHtml && other.identifier == identifier); + return (other != null && SharedUtil.equals(other.title, title) + && SharedUtil.equals(other.errorMessageHtml, errorMessageHtml) && other.identifier == identifier); } } diff --git a/client/src/com/vaadin/client/VTooltip.java b/client/src/com/vaadin/client/VTooltip.java index 4db4477caa..d1a2c395f7 100644 --- a/client/src/com/vaadin/client/VTooltip.java +++ b/client/src/com/vaadin/client/VTooltip.java @@ -22,13 +22,13 @@ import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DomEvent; import com.google.gwt.event.dom.client.FocusEvent; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.dom.client.MouseDownEvent; +import com.google.gwt.event.dom.client.MouseDownHandler; import com.google.gwt.event.dom.client.MouseMoveEvent; import com.google.gwt.event.dom.client.MouseMoveHandler; import com.google.gwt.user.client.DOM; @@ -337,7 +337,7 @@ public class VTooltip extends VWindowOverlay { } private class TooltipEventHandler implements MouseMoveHandler, - ClickHandler, KeyDownHandler, FocusHandler, BlurHandler { + KeyDownHandler, FocusHandler, BlurHandler, MouseDownHandler { /** * Current element hovered @@ -403,7 +403,7 @@ public class VTooltip extends VWindowOverlay { } @Override - public void onClick(ClickEvent event) { + public void onMouseDown(MouseDownEvent event) { handleHideEvent(); } @@ -449,9 +449,9 @@ public class VTooltip extends VWindowOverlay { // TooltipInfo contains a reference to the parent component that is // checked in it's equals-method. if (currentElement != null && isTooltipOpen()) { - TooltipInfo currentTooltip = getTooltipFor(currentElement); TooltipInfo newTooltip = getTooltipFor(element); - if (currentTooltip != null && currentTooltip.equals(newTooltip)) { + if (currentTooltipInfo != null + && currentTooltipInfo.equals(newTooltip)) { return; } } @@ -498,7 +498,7 @@ public class VTooltip extends VWindowOverlay { public void connectHandlersToWidget(Widget widget) { Profiler.enter("VTooltip.connectHandlersToWidget"); widget.addDomHandler(tooltipEventHandler, MouseMoveEvent.getType()); - widget.addDomHandler(tooltipEventHandler, ClickEvent.getType()); + widget.addDomHandler(tooltipEventHandler, MouseDownEvent.getType()); widget.addDomHandler(tooltipEventHandler, KeyDownEvent.getType()); widget.addDomHandler(tooltipEventHandler, FocusEvent.getType()); widget.addDomHandler(tooltipEventHandler, BlurEvent.getType()); diff --git a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html deleted file mode 100644 index 3c91c8b24f..0000000000 --- a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - -New Test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
New Test
open/run/com.vaadin.tests.components.draganddropwrapper.DragAndDropWrapperTooltips?restartApplication
showTooltipvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::PID_Swrapper3/VLabel[0]0,0
screenCapturetooltip-initial
dragvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::PID_Swrapper4/VLabel[0]30,41
dropvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::PID_Swrapper24,42
showTooltipvaadin=runcomvaadintestscomponentsdraganddropwrapperDragAndDropWrapperTooltips::PID_Swrapper1/VLabel[0]0,0
screenCapturetooltip-after-drag
- - diff --git a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java b/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java deleted file mode 100644 index f0010acce8..0000000000 --- a/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.vaadin.tests.components.draganddropwrapper; - -import java.util.Iterator; - -import com.vaadin.event.Transferable; -import com.vaadin.event.TransferableImpl; -import com.vaadin.event.dd.DragAndDropEvent; -import com.vaadin.event.dd.DropHandler; -import com.vaadin.event.dd.DropTarget; -import com.vaadin.event.dd.TargetDetails; -import com.vaadin.event.dd.acceptcriteria.AcceptAll; -import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; -import com.vaadin.tests.components.TestBase; -import com.vaadin.tests.util.TestUtils; -import com.vaadin.ui.Component; -import com.vaadin.ui.CssLayout; -import com.vaadin.ui.DragAndDropWrapper; -import com.vaadin.ui.Label; -import com.vaadin.ui.VerticalLayout; - -public class DragAndDropWrapperTooltips extends TestBase { - - private final String BASE = ".v-widget.greenblock {vertical-align: middle; float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;color: white;}"; - private final String B2 = ".v-widget.b2 {background-color: red !important;}"; - private final String B3 = ".v-widget.b3 {background-color: yellow !important;color: black;}"; - private final String B4 = ".v-widget.b4 {background-color: blue !important;}"; - private final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}"; - private DragAndDropWrapper dragAndDropWrapper; - - @Override - protected void setup() { - TestUtils.injectCSS(getMainWindow(), BASE + B4 + B2 + B3 - + HIDEDRAGSOURCE); - - VerticalLayout l = new VerticalLayout(); - l.setWidth("400px"); - l.setHeight("100px"); - dragAndDropWrapper = new DragAndDropWrapper(cssLayout); - dragAndDropWrapper - .setDescription("Tooltip for the wrapper wrapping all the draggable layouts"); - dragAndDropWrapper.setSizeFull(); - l.addComponent(dragAndDropWrapper); - - addComponent(l); - - for (int i = 1; i <= 4; i++) { - WrappedLabel wl = new WrappedLabel("Block"); - wl.setId("wrapper" + i); - wl.addStyleName("b" + i); - cssLayout.addComponent(wl); - } - - } - - int count; - - private CssLayout cssLayout = new CssLayout() { - }; - - class WrappedLabel extends DragAndDropWrapper { - - private static final long serialVersionUID = 1L; - - public WrappedLabel(String content) { - super(new Label(content + " " + ++count)); - getCompositionRoot().setSizeUndefined(); - setHeight("60px"); // FIXME custom component seems to be broken: - // can't set height with css only - setWidth("60px"); - setDragStartMode(DragStartMode.WRAPPER); - addStyleName("greenblock"); - } - - @Override - public DropHandler getDropHandler() { - return dh; - } - - } - - private DropHandler dh = new DropHandler() { - - @Override - public AcceptCriterion getAcceptCriterion() { - return AcceptAll.get(); - } - - @Override - public void drop(DragAndDropEvent dropEvent) { - Transferable transferable = dropEvent.getTransferable(); - if (transferable instanceof TransferableImpl) { - TransferableImpl ct = (TransferableImpl) transferable; - Component sourceComponent = ct.getSourceComponent(); - if (sourceComponent instanceof WrappedLabel) { - int index = 1; - Iterator componentIterator = cssLayout - .getComponentIterator(); - Component next = componentIterator.next(); - TargetDetails dropTargetData = dropEvent.getTargetDetails(); - DropTarget target = dropTargetData.getTarget(); - while (next != target) { - if (next != sourceComponent) { - index++; - } - next = componentIterator.next(); - } - if (dropTargetData.getData("horizontalLocation").equals( - "LEFT")) { - index--; - if (index < 0) { - index = 0; - } - } - - cssLayout.removeComponent(sourceComponent); - cssLayout.addComponent(sourceComponent, index); - - dragAndDropWrapper - .setDescription("Drag was performed and tooltip was changed"); - } - } - } - }; - - @Override - protected String getDescription() { - return "A tooltip should be shown when hovering the DragAndDropWrapper containing all the draggable layouts"; - } - - @Override - protected Integer getTicketNumber() { - return 7708; - } -} diff --git a/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltips.java b/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltips.java new file mode 100644 index 0000000000..606a773141 --- /dev/null +++ b/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltips.java @@ -0,0 +1,134 @@ +package com.vaadin.tests.tooltip; + +import java.util.Iterator; + +import com.vaadin.event.Transferable; +import com.vaadin.event.TransferableImpl; +import com.vaadin.event.dd.DragAndDropEvent; +import com.vaadin.event.dd.DropHandler; +import com.vaadin.event.dd.DropTarget; +import com.vaadin.event.dd.TargetDetails; +import com.vaadin.event.dd.acceptcriteria.AcceptAll; +import com.vaadin.event.dd.acceptcriteria.AcceptCriterion; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.tests.util.TestUtils; +import com.vaadin.ui.Component; +import com.vaadin.ui.CssLayout; +import com.vaadin.ui.DragAndDropWrapper; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalLayout; + +public class DragAndDropWrapperTooltips extends AbstractTestUI { + + private final String BASE = ".v-widget.greenblock {vertical-align: middle; float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;color: white;}"; + private final String B2 = ".v-widget.b2 {background-color: red !important;}"; + private final String B3 = ".v-widget.b3 {background-color: yellow !important;color: black;}"; + private final String B4 = ".v-widget.b4 {background-color: blue !important;}"; + private final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}"; + private DragAndDropWrapper dragAndDropWrapper; + + @Override + protected void setup(VaadinRequest request) { + TestUtils.injectCSS(this, BASE + B4 + B2 + B3 + HIDEDRAGSOURCE); + + VerticalLayout l = new VerticalLayout(); + l.setWidth("400px"); + l.setHeight("100px"); + dragAndDropWrapper = new DragAndDropWrapper(cssLayout); + dragAndDropWrapper + .setDescription("Tooltip for the wrapper wrapping all the draggable layouts"); + dragAndDropWrapper.setSizeFull(); + l.addComponent(dragAndDropWrapper); + + addComponent(l); + + for (int i = 1; i <= 4; i++) { + WrappedLabel wl = new WrappedLabel("Block"); + wl.setId("wrapper" + i); + wl.addStyleName("b" + i); + cssLayout.addComponent(wl); + } + getTooltipConfiguration().setOpenDelay(300); + } + + int count; + + private CssLayout cssLayout = new CssLayout() { + }; + + class WrappedLabel extends DragAndDropWrapper { + + private static final long serialVersionUID = 1L; + + public WrappedLabel(String content) { + super(new Label(content + " " + ++count)); + getCompositionRoot().setSizeUndefined(); + setHeight("60px"); // FIXME custom component seems to be broken: + // can't set height with css only + setWidth("60px"); + setDragStartMode(DragStartMode.WRAPPER); + addStyleName("greenblock"); + } + + @Override + public DropHandler getDropHandler() { + return dh; + } + + } + + private DropHandler dh = new DropHandler() { + + @Override + public AcceptCriterion getAcceptCriterion() { + return AcceptAll.get(); + } + + @Override + public void drop(DragAndDropEvent dropEvent) { + Transferable transferable = dropEvent.getTransferable(); + if (transferable instanceof TransferableImpl) { + TransferableImpl ct = (TransferableImpl) transferable; + Component sourceComponent = ct.getSourceComponent(); + if (sourceComponent instanceof WrappedLabel) { + int index = 1; + Iterator componentIterator = cssLayout + .getComponentIterator(); + Component next = componentIterator.next(); + TargetDetails dropTargetData = dropEvent.getTargetDetails(); + DropTarget target = dropTargetData.getTarget(); + while (next != target) { + if (next != sourceComponent) { + index++; + } + next = componentIterator.next(); + } + if (dropTargetData.getData("horizontalLocation").equals( + "LEFT")) { + index--; + if (index < 0) { + index = 0; + } + } + + cssLayout.removeComponent(sourceComponent); + cssLayout.addComponent(sourceComponent, index); + + dragAndDropWrapper + .setDescription("Drag was performed and tooltip was changed"); + } + } + } + }; + + @Override + protected String getTestDescription() { + return "A tooltip should be shown when hovering the DragAndDropWrapper containing all the draggable layouts"; + } + + @Override + protected Integer getTicketNumber() { + return 7708; + } +} diff --git a/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltipsTest.java b/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltipsTest.java new file mode 100644 index 0000000000..d913c8cc12 --- /dev/null +++ b/uitest/src/com/vaadin/tests/tooltip/DragAndDropWrapperTooltipsTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * 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.vaadin.tests.tooltip; + +import org.junit.Test; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.LabelElement; +import com.vaadin.tests.tb3.TooltipTest; + +/** + * + * + * @author Vaadin Ltd + */ +public class DragAndDropWrapperTooltipsTest extends TooltipTest { + @Test + public void testDragAndDropTooltips() throws Exception { + openTestURL(); + LabelElement element = $(LabelElement.class).get(4); + LabelElement targetElement = $(LabelElement.class).get(1); + checkTooltip(element, + "Tooltip for the wrapper wrapping all the draggable layouts"); + new Actions(getDriver()).clickAndHold(element) + .moveToElement(targetElement).perform(); + sleep(500); + checkTooltipNotPresent(); + new Actions(getDriver()).release().perform(); + checkTooltip(element, "Drag was performed and tooltip was changed"); + } +} -- cgit v1.2.3