/******************************************************************************* * Copyright (c) 2013 RelationWare, Benno Luthiger * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * RelationWare, Benno Luthiger ******************************************************************************/ package org.ripla.rap.internal.menu; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.osgi.service.useradmin.Authorization; import org.ripla.interfaces.IMenuItem; import org.ripla.menu.RiplaMenuComposite; import org.ripla.rap.DataHouskeeper; import org.ripla.rap.internal.menu.DropDownMenu.IMenuItemsCreator; /** * * @author Luthiger */ @RunWith(MockitoJUnitRunner.class) public class DropDownMenuTest { private static String[][] EXPECTED2 = new String[][] { { "MenuItem {Sub 1}", "1956661274" }, { "MenuItem {Sub 2}", "1956661275" }, { "MenuItem {Sub 3}", "1956661276" }, { "MenuItem {Sub 4}", "1956661277" }, { "MenuItem {Sub 5}", "1956661273" } }; private static String[][] EXPECTED3 = new String[][] { { "MenuItem {Sub 1}", "1956661274" }, { "MenuItem {Sub 3}", "1956661276" }, { "MenuItem {Sub 4}", "1956661277" }, { "MenuItem {Sub 5}", "1956661273" } }; @Mock private Authorization authorization; @Mock private SelectionAdapter listener; private Shell shell; private Menu menu; @Before public void setUp() { DataHouskeeper.createServiceContext(); shell = new Shell(Display.getDefault()); menu = new Menu(shell, SWT.NONE); } @SuppressWarnings("serial") @Test @Ignore public void testDropDownMenu() { final IMenuItemsCreator lCreator = DropDownMenu.getItemsCreator( createMenu("", ""), listener, authorization); final DropDownMenu lMenu = new DropDownMenu(shell, lCreator) { }; System.out.println(lMenu); } @SuppressWarnings("serial") @Test public void testMenuItemsCreator() throws Exception { final IMenuItemsCreator lTest = DropDownMenu.getItemsCreator( createMenu("", ""), listener, authorization); lTest.create(menu); final MenuItem[] lItems = menu.getItems(); int i = 0; for (final MenuItem lMenuItem : lItems) { assertItem(lMenuItem, EXPECTED2[i++]); } assertEquals(EXPECTED2.length, lItems.length); } @SuppressWarnings("serial") @Test public void testMenuItemsCreator2() throws Exception { // item 2 is displayed only with permission "test.sub" IMenuItemsCreator lTest = DropDownMenu.getItemsCreator( createMenu("test.top", "test.sub"), listener, authorization); lTest.create(menu); // no display of item 2 MenuItem[] lItems = menu.getItems(); int i = 0; for (final MenuItem lMenuItem : lItems) { assertItem(lMenuItem, EXPECTED3[i++]); } assertEquals(EXPECTED3.length, lItems.length); // still no display of item 2 when(authorization.hasRole("test.top")).thenReturn(true); lTest = DropDownMenu.getItemsCreator( createMenu("test.top", "test.sub"), listener, authorization); menu = new Menu(shell, SWT.NONE); lTest.create(menu); lItems = menu.getItems(); assertEquals(EXPECTED3.length, lItems.length); // try the correct permission now when(authorization.hasRole("test.sub")).thenReturn(true); lTest = DropDownMenu.getItemsCreator( createMenu("test.top", "test.sub"), listener, authorization); menu = new Menu(shell, SWT.NONE); lTest.create(menu); lItems = menu.getItems(); i = 0; for (final MenuItem lMenuItem : lItems) { assertItem(lMenuItem, EXPECTED2[i++]); } assertEquals(EXPECTED2.length, lItems.length); } private void assertItem(final MenuItem inMenuItem, final String[] inExpected) { assertEquals(inExpected[0], inMenuItem.toString()); assertEquals(inExpected[1], String.valueOf(inMenuItem.getID())); } // --- private IMenuItem createMenu(final String inPermissionTop, final String inPermissionSub) { final RiplaMenuComposite outMenu = new RiplaMenuComposite("Top", 10); //$NON-NLS-1$ outMenu.setControllerName("org.ripla.rap/1"); outMenu.setPermission(inPermissionTop); RiplaMenuComposite lSubMenu = new RiplaMenuComposite("Sub 1", 10); //$NON-NLS-1$ lSubMenu.setControllerName("org.ripla.rap/2"); outMenu.add(lSubMenu); lSubMenu = new RiplaMenuComposite("Sub 2", 20); //$NON-NLS-1$ lSubMenu.setControllerName("org.ripla.rap/3"); lSubMenu.setPermission(inPermissionSub); outMenu.add(lSubMenu); lSubMenu = new RiplaMenuComposite("Sub 3", 30); //$NON-NLS-1$ lSubMenu.setControllerName("org.ripla.rap/4"); outMenu.add(lSubMenu); lSubMenu = new RiplaMenuComposite("Sub 4", 40); //$NON-NLS-1$ lSubMenu.setControllerName("org.ripla.rap/5"); outMenu.add(lSubMenu); lSubMenu = new RiplaMenuComposite("Sub 5", 50); //$NON-NLS-1$ lSubMenu.setControllerName("org.ripla.rap/1"); outMenu.add(lSubMenu); return outMenu; } }