/* * Copyright (c) 2010, grossmann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.api.test; import org.jowidgets.api.toolkit.Toolkit; import org.jowidgets.api.widgets.IActionMenuItem; import org.jowidgets.api.widgets.IFrame; import org.jowidgets.api.widgets.IMainMenu; import org.jowidgets.api.widgets.IMenu; import org.jowidgets.api.widgets.IMenuBar; import org.jowidgets.api.widgets.IMenuItem; import org.jowidgets.api.widgets.IPopupMenu; import org.jowidgets.api.widgets.ISelectableMenuItem; import org.jowidgets.api.widgets.ISubMenu; import org.jowidgets.api.widgets.blueprint.factory.IBluePrintFactory; import org.jowidgets.common.application.IApplication; import org.jowidgets.common.application.IApplicationLifecycle; import org.jowidgets.common.types.Position; import org.junit.Assert; import org.junit.Test; public class MenuTest { private static final IBluePrintFactory BPF = Toolkit.getBluePrintFactory(); @Test public void createWidgetsTest() { Toolkit.getApplicationRunner().run(new IApplication() { @Override public void start(final IApplicationLifecycle lifecycle) { final IFrame frame = Toolkit.createRootFrame(BPF.frame(), lifecycle); frame.setVisible(true); //create menu bar final IMenuBar menuBar = frame.createMenuBar(); //create first menu final IMainMenu menu1 = menuBar.addMenu("menu1"); Assert.assertTrue(menuBar.getMenus().size() == 1); Assert.assertTrue(menuBar.getMenus().contains(menu1)); testMenus(menu1); //create second menu final IMainMenu menu2 = menuBar.addMenu("menu2"); Assert.assertTrue(menuBar.getMenus().size() == 2); Assert.assertTrue(menuBar.getMenus().contains(menu2)); testMenus(menu2); //create third menu at second position (index == 1) final IMainMenu menu3 = menuBar.addMenu(1, "menu3"); Assert.assertTrue(menuBar.getMenus().size() == 3); Assert.assertTrue(menuBar.getMenus().contains(menu3)); Assert.assertTrue(menuBar.getMenus().indexOf(menu3) == 1); testMenus(menu2); final IPopupMenu popupMenu = frame.createPopupMenu(); popupMenu.show(new Position(0, 0)); testMenus(popupMenu); frame.dispose(); } }); } public void testMenus(final IMenu popupMenu) { Assert.assertNotNull(popupMenu); //add a menu item final IActionMenuItem item1 = testMenuItem(popupMenu, popupMenu.addItem(BPF.menuItem("test1"))); //add a separator final IMenuItem separator1 = popupMenu.addSeparator(); //add radio items final ISelectableMenuItem radio1 = testMenuItem(popupMenu, popupMenu.addItem(BPF.radioMenuItem("radio1"))); final ISelectableMenuItem radio2 = testMenuItem(popupMenu, popupMenu.addItem(BPF.radioMenuItem("radio1"))); final ISelectableMenuItem radio3 = testMenuItem(popupMenu, popupMenu.addItem(BPF.radioMenuItem("radio1"))); Assert.assertFalse(radio1.isSelected()); Assert.assertFalse(radio2.isSelected()); Assert.assertFalse(radio3.isSelected()); radio1.setSelected(true); Assert.assertTrue(radio1.isSelected()); //add a second separator final IMenuItem separator2 = popupMenu.addSeparator(); //add checked item final ISelectableMenuItem checked = testMenuItem(popupMenu, popupMenu.addItem(BPF.checkedMenuItem("checked"))); Assert.assertFalse(checked.isSelected()); checked.setSelected(true); Assert.assertTrue(checked.isSelected()); checked.setSelected(false); Assert.assertFalse(checked.isSelected()); //add sub menu final ISubMenu subMenu = popupMenu.addItem(BPF.subMenu("subMenu")); subMenu.addItem(BPF.menuItem("subSub1")); subMenu.addItem(BPF.menuItem("subSub2")); Assert.assertTrue(subMenu.getChildren().size() == 2); //add at position final IActionMenuItem itemAtPos3 = testMenuItem(popupMenu, popupMenu.addItem(3, BPF.menuItem("test1"))); Assert.assertTrue(itemAtPos3 == popupMenu.getChildren().get(3)); //count the items Assert.assertTrue(popupMenu.getChildren().size() == 9); //remove the items popupMenu.remove(item1); Assert.assertFalse(popupMenu.getChildren().contains(item1)); popupMenu.remove(separator1); Assert.assertFalse(popupMenu.getChildren().contains(separator1)); popupMenu.remove(radio1); Assert.assertFalse(popupMenu.getChildren().contains(radio1)); popupMenu.remove(radio2); Assert.assertFalse(popupMenu.getChildren().contains(radio2)); popupMenu.remove(radio3); Assert.assertFalse(popupMenu.getChildren().contains(radio3)); popupMenu.remove(separator2); Assert.assertFalse(popupMenu.getChildren().contains(separator2)); popupMenu.remove(checked); Assert.assertFalse(popupMenu.getChildren().contains(checked)); popupMenu.remove(subMenu); Assert.assertFalse(popupMenu.getChildren().contains(subMenu)); popupMenu.remove(itemAtPos3); Assert.assertFalse(popupMenu.getChildren().contains(itemAtPos3)); //menu must be empty now Assert.assertTrue(popupMenu.getChildren().size() == 0); } public <RESULT_TYPE extends IMenuItem> RESULT_TYPE testMenuItem(final IMenu parent, final RESULT_TYPE item) { //test parent - child Assert.assertTrue(item.getParent() == parent); Assert.assertTrue(parent.getChildren().contains(item)); //test setEnabled Assert.assertTrue(item.isEnabled()); item.setEnabled(false); Assert.assertFalse(item.isEnabled()); item.setEnabled(true); Assert.assertTrue(item.isEnabled()); //test setters item.setText("text1"); item.setMnemonic('e'); return item; } }