/* * Copyright 2000-2016 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.menubar; import java.io.IOException; import java.util.List; import org.junit.Assert; import org.junit.Test; import com.vaadin.server.ExternalResource; import com.vaadin.server.ThemeResource; 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<MenuBar> { @Test // #16328 public void testReadWrite() throws IOException { String design = "<vaadin-menu-bar auto-open tabindex=5>" + "<menu checkable>Save</menu>" + "<menu description='Open a file'>Open</menu>" + "<menu disabled>Close</menu>" + "<menu icon='http://foo.bar/ico.png'>Help</menu>" + "<menu visible='false'>About</menu>" + "<menu>Sub<menu>Item</menu></menu>" + "<menu more>WTF?!</menu>" + "</vaadin-menu-bar>"; 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 // #16328 public void testTicketSpec1() throws IOException { String design = "<vaadin-menu-bar auto-open plain-text tabindex=5> " + "<menu>File" + "<menu>Save</menu>" + "<menu icon=\"theme://../runo/icons/16/folder.png\">Open</menu>" + "<menu separator />" + "<menu disabled>Exit</menu>" + "<menu visible='false'>Not for everybody</menu>" + "</menu>" + "<menu description=\"This contains many items in sub menus\">Other" + "<menu style-name=\"fancy\">Sub" + "<menu checkable checked>Option 1 - no <b>html</b></menu>" + "<menu checkable>Option 2</menu>" + "<menu checkable>Option 3</menu>" // + "</menu>" // + "</menu>" // + "<menu more icon=\"theme://icon.png\">foo</menu>" + "</vaadin-menu-bar>"; // 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 <b>html</b>", 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 = "<vaadin-menu-bar>" + "<menu><b>File</b>" + "<menu><font style=\"color: red\">Save</font></menu>" + "<menu icon=\"theme://../runo/icons/16/folder.png\">Open</menu>" + "<menu separator />" + "<menu disabled>Exit</menu>" // + "</menu></vaadin-menu-bar>"; MenuBar menuBar = new MenuBar(); menuBar.setHtmlContentAllowed(true); MenuItem fileMenu = menuBar.addItem("<b>File</b>", null); fileMenu.addItem("<font style=\"color: red\">Save</font>", 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<MenuItem> expectedMenuItems = expected.getItems(); List<MenuItem> actualMenuItems = result.getItems(); Assert.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() + ": "; Assert.assertEquals(baseError + "Visibile", expected.isVisible(), actual.isVisible()); Assert.assertEquals(baseError + "Checkable", expected.isCheckable(), actual.isCheckable()); Assert.assertEquals(baseError + "Checked", expected.isChecked(), actual.isChecked()); Assert.assertEquals(baseError + "Separator", expected.isSeparator(), actual.isSeparator()); Assert.assertEquals(baseError + "Enabled", expected.isEnabled(), actual.isEnabled()); Assert.assertEquals(baseError + "Text", expected.getText(), actual.getText()); Assert.assertEquals(baseError + "Description", expected.getDescription(), actual.getDescription()); Assert.assertEquals(baseError + "Style Name", expected.getStyleName(), actual.getStyleName()); if (expected.getIcon() != null) { Assert.assertNotNull(baseError + "Icon was null", actual.getIcon()); } else { if (actual.getIcon() != null) { Assert.fail(baseError + "Icon should've been null"); } } Assert.assertEquals(baseError + "Has Children", expected.hasChildren(), actual.hasChildren()); if (expected.hasChildren()) { List<MenuItem> children = expected.getChildren(); List<MenuItem> actualChildren = actual.getChildren(); Assert.assertEquals(baseError + "Child count", children.size(), actualChildren.size()); for (int i = 0; i < children.size(); ++i) { compareMenus(children.get(i), actualChildren.get(i)); } } } }