package com.vaadin.tests.components.menubar; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import java.io.IOException; import java.util.List; import org.junit.Test; import com.vaadin.server.ExternalResource; import com.vaadin.server.ThemeResource; import com.vaadin.shared.ui.ContentMode; import com.vaadin.tests.design.DeclarativeTestBase; import com.vaadin.ui.MenuBar; import com.vaadin.ui.MenuBar.MenuItem; /** * Tests declarative support for menu bars. * * @since 7.4 * @author Vaadin Ltd */ public class MenuBarDeclarativeTest extends DeclarativeTestBase { @Test // #16328 public void testReadWrite() throws IOException { String design = "" + "Save" + "Open" + "Close" + "Help" + "About" + "SubItem" + "WTF?!" + ""; MenuBar bar = new MenuBar(); bar.setAutoOpen(true); bar.setHtmlContentAllowed(true); bar.setTabIndex(5); bar.addItem("Save", null).setCheckable(true); bar.addItem("Open", null).setDescription("Open a file"); bar.addItem("Close", null).setEnabled(false); bar.addItem("Help", null) .setIcon(new ExternalResource("http://foo.bar/ico.png")); bar.addItem("About", null).setVisible(false); bar.addItem("Sub", null).addItem("Item", null); bar.setMoreMenuItem(bar.new MenuItem("WTF?!", null, null)); testWrite(design, bar); testRead(design, bar); } @Test public void testDescriptionContentMode() { String design = "" + "One" + "preformatted" + "I contain
html\">HTML
" + "plain text" + "
"; MenuBar menuBar = new MenuBar(); menuBar.addItem("One", null) .setDescription("This description is implicitly preformatted"); menuBar.addItem("preformatted", null).setDescription( "This description\nis explicitly\n\npreformatted", ContentMode.PREFORMATTED); menuBar.addItem("HTML", null).setDescription( "I contain
html", ContentMode.HTML); menuBar.addItem("plain text", null).setDescription("Just plain text", ContentMode.TEXT); testWrite(design, menuBar); testRead(design, menuBar); } @Test // #16328 public void testTicketSpec1() throws IOException { String design = " " + "File" + "Save" + "Open" + "" + "Exit" + "Not for everybody" + "" + "Other" + "Sub" + "Option 1 - no html" + "Option 2" + "Option 3" // + "" // + "" // + "foo" + ""; // for one reason or another, no component has a correct .equals // implementation, which makes tests a bit annoying MenuBar menuBar = new MenuBar(); menuBar.setHtmlContentAllowed(false); menuBar.setTabIndex(5); menuBar.setAutoOpen(true); // File menu MenuItem fileMenu = menuBar.addItem("File", null); fileMenu.addItem("Save", null); fileMenu.addItem("Open", new ThemeResource("../runo/icons/16/folder.png"), null); fileMenu.addSeparator(); fileMenu.addItem("Exit", null).setEnabled(false); fileMenu.addItem("Not for everybody", null).setVisible(false); MenuItem otherMenu = menuBar.addItem("Other", null); otherMenu.setDescription("This contains many items in sub menus"); MenuItem subMenu = otherMenu.addItem("Sub", null); subMenu.setStyleName("fancy"); MenuItem option1 = subMenu.addItem("Option 1 - no html", null); option1.setCheckable(true); option1.setChecked(true); subMenu.addItem("Option 2", null).setCheckable(true); subMenu.addItem("Option 3", null).setCheckable(true); menuBar.setMoreMenuItem(null); MenuItem moreMenu = menuBar.getMoreMenuItem(); moreMenu.setIcon(new ThemeResource("icon.png")); moreMenu.setText("foo"); testRead(design, menuBar); testWrite(design, menuBar); } @Test // #16328 public void testTicketSpec2() throws IOException { String design = "" + "File" + "Save" + "Open" + "" + "Exit" // + ""; MenuBar menuBar = new MenuBar(); menuBar.setHtmlContentAllowed(true); MenuItem fileMenu = menuBar.addItem("File", null); fileMenu.addItem("Save", null); fileMenu.addItem("Open", new ThemeResource("../runo/icons/16/folder.png"), null); fileMenu.addSeparator(); fileMenu.addItem("Exit", null).setEnabled(false); testRead(design, menuBar); testWrite(design, menuBar); } @Override public MenuBar testRead(String design, MenuBar expected) { MenuBar result = super.testRead(design, expected); List expectedMenuItems = expected.getItems(); List actualMenuItems = result.getItems(); assertEquals("Different amount of menu items", expectedMenuItems.size(), actualMenuItems.size()); for (int i = 0; i < expectedMenuItems.size(); ++i) { compareMenus(expectedMenuItems.get(i), actualMenuItems.get(i)); } return result; } private void compareMenus(MenuItem expected, MenuItem actual) { String baseError = "Error Comparing MenuItem " + expected.getText() + ": "; assertEquals(baseError + "Visibile", expected.isVisible(), actual.isVisible()); assertEquals(baseError + "Checkable", expected.isCheckable(), actual.isCheckable()); assertEquals(baseError + "Checked", expected.isChecked(), actual.isChecked()); assertEquals(baseError + "Separator", expected.isSeparator(), actual.isSeparator()); assertEquals(baseError + "Enabled", expected.isEnabled(), actual.isEnabled()); assertEquals(baseError + "Text", expected.getText(), actual.getText()); assertEquals(baseError + "Description", expected.getDescription(), actual.getDescription()); assertEquals(baseError + "Style Name", expected.getStyleName(), actual.getStyleName()); assertEquals(baseError + "Content Mode", expected.getDescriptionContentMode(), actual.getDescriptionContentMode()); if (expected.getIcon() != null) { assertNotNull(baseError + "Icon was null", actual.getIcon()); } else { if (actual.getIcon() != null) { fail(baseError + "Icon should've been null"); } } assertEquals(baseError + "Has Children", expected.hasChildren(), actual.hasChildren()); if (expected.hasChildren()) { List children = expected.getChildren(); List actualChildren = actual.getChildren(); assertEquals(baseError + "Child count", children.size(), actualChildren.size()); for (int i = 0; i < children.size(); ++i) { compareMenus(children.get(i), actualChildren.get(i)); } } } }