--- /dev/null
+package com.vaadin.tests.server.component.menubar;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import junit.framework.TestCase;\r
+\r
+import com.vaadin.ui.MenuBar;\r
+import com.vaadin.ui.MenuBar.Command;\r
+import com.vaadin.ui.MenuBar.MenuItem;\r
+\r
+public class MenuBarIds extends TestCase implements Command {\r
+\r
+ private MenuItem lastSelectedItem;\r
+ private MenuItem menuFile;\r
+ private MenuItem menuEdit;\r
+ private MenuItem menuEditCopy;\r
+ private MenuItem menuEditCut;\r
+ private MenuItem menuEditPaste;\r
+ private MenuItem menuEditFind;\r
+ private MenuItem menuFileOpen;\r
+ private MenuItem menuFileSave;\r
+ private MenuItem menuFileExit;\r
+ private Set<MenuItem> menuItems = new HashSet<MenuItem>();\r
+\r
+ private MenuBar menuBar;\r
+\r
+ @Override\r
+ public void setUp() {\r
+ menuBar = new MenuBar();\r
+ menuFile = menuBar.addItem("File", this);\r
+ menuEdit = menuBar.addItem("Edit", this);\r
+ menuEditCopy = menuEdit.addItem("Copy", this);\r
+ menuEditCut = menuEdit.addItem("Cut", this);\r
+ menuEditPaste = menuEdit.addItem("Paste", this);\r
+ menuEdit.addSeparator();\r
+ menuEditFind = menuEdit.addItem("Find...", this);\r
+ menuFileOpen = menuFile.addItem("Open", this);\r
+ menuFileSave = menuFile.addItem("Save", this);\r
+ menuFile.addSeparator();\r
+ menuFileExit = menuFile.addItem("Exit", this);\r
+\r
+ menuItems.add(menuFile);\r
+ menuItems.add(menuEdit);\r
+ menuItems.add(menuEditCopy);\r
+ menuItems.add(menuEditCut);\r
+ menuItems.add(menuEditPaste);\r
+ menuItems.add(menuEditFind);\r
+ menuItems.add(menuFileOpen);\r
+ menuItems.add(menuFileSave);\r
+ menuItems.add(menuFileExit);\r
+ }\r
+\r
+ public void testMenubarIdUniqueness() {\r
+ // Ids within a menubar must be unique\r
+ assertUniqueIds(menuBar);\r
+\r
+ menuBar.removeItem(menuFile);\r
+ MenuItem file2 = menuBar.addItem("File2", this);\r
+ MenuItem file3 = menuBar.addItem("File3", this);\r
+ MenuItem file2sub = file2.addItem("File2 sub menu", this);\r
+ menuItems.add(file2);\r
+ menuItems.add(file2sub);\r
+ menuItems.add(file3);\r
+\r
+ assertUniqueIds(menuBar);\r
+ }\r
+\r
+ private static void assertUniqueIds(MenuBar menuBar) {\r
+\r
+ Set<Object> ids = new HashSet<Object>();\r
+\r
+ for (MenuItem item : menuBar.getItems()) {\r
+ assertUniqueIds(ids, item);\r
+ }\r
+ }\r
+\r
+ private static void assertUniqueIds(Set<Object> ids, MenuItem item) {\r
+ int id = item.getId();\r
+ System.out.println("Item " + item.getText() + ", id: " + id);\r
+ assertFalse(ids.contains(id));\r
+ ids.add(id);\r
+ if (item.getChildren() != null) {\r
+ for (MenuItem subItem : item.getChildren()) {\r
+ assertUniqueIds(ids, subItem);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void menuSelected(MenuItem selectedItem) {\r
+ assertNull("lastSelectedItem was not cleared before selecting an item",\r
+ lastSelectedItem);\r
+\r
+ lastSelectedItem = selectedItem;\r
+\r
+ }\r
+}\r