diff options
author | Jonni Madekivi <jonni@egarden.fi> | 2018-12-17 09:43:37 +0200 |
---|---|---|
committer | Sun Zhe <31067185+ZheSun88@users.noreply.github.com> | 2018-12-17 09:43:37 +0200 |
commit | 5ad9dbf519d131e69f3b9c5a3fdf73d0e96011e0 (patch) | |
tree | fbae75c4561a8817bedc38e5c85e3e66320f1e76 | |
parent | c9c960ee57c54d2a1d3b6572cc91b73cb561ac60 (diff) | |
download | vaadin-framework-5ad9dbf519d131e69f3b9c5a3fdf73d0e96011e0.tar.gz vaadin-framework-5ad9dbf519d131e69f3b9c5a3fdf73d0e96011e0.zip |
Prevent IndexOutOfBoundException in VMenuBar.CustomMenuItem (#11285)
* Fixes #10814
* Add missing tests
Fixes #11374
3 files changed, 51 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VMenuBar.java b/client/src/main/java/com/vaadin/client/ui/VMenuBar.java index a652cf79fd..2d4f35a2ad 100644 --- a/client/src/main/java/com/vaadin/client/ui/VMenuBar.java +++ b/client/src/main/java/com/vaadin/client/ui/VMenuBar.java @@ -903,6 +903,7 @@ public class VMenuBar extends FocusableFlowPanel implements super.onLoad(); if (getParentMenu() != null && getParentMenu().getParentMenu() == null + && getParentMenu().getItems().size() >= 1 && getParentMenu().getItems().get(0).equals(this)) { getElement().setAttribute("tabindex", "0"); } else { diff --git a/uitest/src/main/java/com/vaadin/tests/components/menubar/MenuBarSmallWidth.java b/uitest/src/main/java/com/vaadin/tests/components/menubar/MenuBarSmallWidth.java new file mode 100644 index 0000000000..650cae0f62 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/menubar/MenuBarSmallWidth.java @@ -0,0 +1,37 @@ +package com.vaadin.tests.components.menubar; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.ThemeResource; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Label; +import com.vaadin.ui.MenuBar; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class MenuBarSmallWidth extends AbstractTestUI { + @Override + protected void setup(VaadinRequest request) { + MenuBar barmenu = new MenuBar(); + barmenu.setWidth("50px"); + addComponent(barmenu); + // A top-level menu item that opens a submenu + MenuBar.MenuItem drinks = barmenu.addItem("Beverages", null, null); + + // Submenu item with a sub-submenu + MenuBar.MenuItem hots = drinks.addItem("Hot", null, null); + hots.addItem("Tea", new ThemeResource("icons/tea-16px.png"), null); + hots.addItem("Coffee", new ThemeResource("icons/coffee-16px.png"), + null); + + // Another submenu item with a sub-submenu + MenuBar.MenuItem colds = drinks.addItem("Cold", null, null); + colds.addItem("Milk", null, null); + colds.addItem("Weissbier", null, null); + + // Another top-level item + MenuBar.MenuItem snacks = barmenu.addItem("Snacks", null, null); + snacks.addItem("Weisswurst", null, null); + snacks.addItem("Bratwurst", null, null); + snacks.addItem("Currywurst", null, null); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/menubar/MenuBarSmallWidthTest.java b/uitest/src/test/java/com/vaadin/tests/components/menubar/MenuBarSmallWidthTest.java new file mode 100644 index 0000000000..cf3fb294cc --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/menubar/MenuBarSmallWidthTest.java @@ -0,0 +1,13 @@ +package com.vaadin.tests.components.menubar; + +import com.vaadin.tests.tb3.MultiBrowserTest; +import org.junit.Test; + +public class MenuBarSmallWidthTest extends MultiBrowserTest { + + @Test + public void noIndexOutOfBoundsExceptionPresent() { + openTestURL("debug"); + assertNoErrorNotifications(); + } +} |