diff options
author | Denis Anisimov <denis@vaadin.com> | 2014-08-24 23:06:25 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-08-26 09:00:04 +0000 |
commit | c8d58261954de18ef67eaf9043bd93360202cf06 (patch) | |
tree | bc7c5066d9b9c3493f347f517c1aa0bf180d69b7 | |
parent | 0ec671619a9cfa6c69c2cb63adcae4c8020ce876 (diff) | |
download | vaadin-framework-c8d58261954de18ef67eaf9043bd93360202cf06.tar.gz vaadin-framework-c8d58261954de18ef67eaf9043bd93360202cf06.zip |
Handle all native events in preview handler for Combobox popup (#14321).
Change-Id: Ibad2f45fb81d9573125fbc786bd3493ac6cdfc00
3 files changed, 161 insertions, 0 deletions
diff --git a/client/src/com/vaadin/client/ui/VFilterSelect.java b/client/src/com/vaadin/client/ui/VFilterSelect.java index b323812c8c..356e7291c4 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<String> options = new ArrayList<String>(); + 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; + } + +} |