From 45d329410979d5bbc2e2a8dd768756d10944a46f Mon Sep 17 00:00:00 2001 From: Denis Anisimov Date: Sun, 24 Aug 2014 23:06:25 +0300 Subject: [PATCH] Handle all native events in preview handler for Combobox popup (#14321). Change-Id: Ibad2f45fb81d9573125fbc786bd3493ac6cdfc00 --- .../com/vaadin/client/ui/VFilterSelect.java | 2 + .../combobox/ComboboxMenuBarAutoopen.java | 79 ++++++++++++++++++ .../combobox/ComboboxMenuBarAutoopenTest.java | 80 +++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopen.java create mode 100644 uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopenTest.java diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java index 927666a12a..bb217f2de2 100644 --- a/client/src/com/vaadin/client/ui/VFilterSelect.java +++ b/client/src/com/vaadin/client/ui/VFilterSelect.java @@ -250,6 +250,8 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler, addCloseHandler(this); Roles.getListRole().set(getElement()); + + setPreviewingAllNativeEvents(true); } /** diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopen.java b/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopen.java new file mode 100644 index 0000000000..f65b020bd1 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopen.java @@ -0,0 +1,79 @@ +/* + * 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.components.combobox; + +import java.util.ArrayList; + +import com.vaadin.server.Page; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.MenuBar; +import com.vaadin.ui.MenuBar.MenuItem; +import com.vaadin.ui.Notification; +import com.vaadin.ui.Notification.Type; + +/** + * Test UI for combobox popup which should be closed on any click outside it. + * + * @author Vaadin Ltd + */ +public class ComboboxMenuBarAutoopen extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + HorizontalLayout layout = new HorizontalLayout(); + layout.setSpacing(true); + ArrayList options = new ArrayList(); + options.add("1"); + options.add("2"); + options.add("3"); + ComboBox combo = new ComboBox(null, options); + layout.addComponent(combo); + + MenuBar menubar = getMenubar(); + layout.addComponent(menubar); + + addComponent(layout); + } + + @Override + protected String getTestDescription() { + return "Combobox popup should close on click to other popup or associated components."; + } + + @Override + protected Integer getTicketNumber() { + return 14321; + } + + private MenuBar getMenubar() { + MenuBar menubar = new MenuBar(); + menubar.setAutoOpen(true); + MenuItem item = menubar.addItem("auto-open", null); + item.addItem("sub-item 1", new MenuBar.Command() { + + @Override + public void menuSelected(MenuItem selectedItem) { + Notification notification = new Notification("Test", + Type.HUMANIZED_MESSAGE); + notification.show(Page.getCurrent()); + } + }); + return menubar; + } +} diff --git a/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopenTest.java b/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopenTest.java new file mode 100644 index 0000000000..5c8c971194 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopenTest.java @@ -0,0 +1,80 @@ +/* + * 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.components.combobox; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.ComboBoxElement; +import com.vaadin.testbench.elements.MenuBarElement; +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * Test that checks whether Combobox popup is closed on click to autoopen + * menubar and its item. + * + * @author Vaadin Ltd + */ +public class ComboboxMenuBarAutoopenTest extends MultiBrowserTest { + + @Test + public void closeComboboxPopupOnClickToMenuBar() { + openTestURL(); + + openPopup(); + MenuBarElement menuBar = selectMenuBar(); + menuBar.click(); + Assert.assertFalse("Combobox popup items are visible", + isElementPresent(By.className("gwt-MenuItem"))); + + openPopup(); + menuBar = selectMenuBar(); + + WebElement menuBarItem = findElement(By + .className("v-menubar-menuitem-caption")); + Actions actions = new Actions(getDriver()); + actions.moveToElement(menuBarItem).build().perform(); + menuBar.click(); + Assert.assertFalse("Combobox popup items are visible", + isElementPresent(By.className("gwt-MenuItem"))); + } + + private void openPopup() { + ComboBoxElement combobox = $(ComboBoxElement.class).first(); + combobox.click(); + combobox.openPopup(); + combobox.focus(); + + Actions actions = new Actions(getDriver()); + actions.moveToElement( + getDriver().findElement(By.className("gwt-MenuItem"))).build() + .perform(); + } + + private MenuBarElement selectMenuBar() { + MenuBarElement menuBar = $(MenuBarElement.class).first(); + menuBar.focus(); + + Actions actions = new Actions(getDriver()); + actions.moveToElement(menuBar).build().perform(); + + return menuBar; + } + +} -- 2.39.5