]> source.dussan.org Git - vaadin-framework.git/commitdiff
Handle all native events in preview handler for Combobox popup (#14321).
authorDenis Anisimov <denis@vaadin.com>
Sun, 24 Aug 2014 20:06:25 +0000 (23:06 +0300)
committerSauli Tähkäpää <sauli@vaadin.com>
Thu, 16 Oct 2014 12:53:02 +0000 (15:53 +0300)
Change-Id: Ibad2f45fb81d9573125fbc786bd3493ac6cdfc00

client/src/com/vaadin/client/ui/VFilterSelect.java
uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopen.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/combobox/ComboboxMenuBarAutoopenTest.java [new file with mode: 0644]

index 927666a12ac898edea0bdd9579a18e0b97f162f8..bb217f2de2fde5bfc95be8012908afe88f418677 100644 (file)
@@ -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 (file)
index 0000000..f65b020
--- /dev/null
@@ -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 (file)
index 0000000..5c8c971
--- /dev/null
@@ -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;
+    }
+
+}