blob: 22b529d547ccdb892e7ccc76d32c50c695732e56 [file] [log] [blame]
package org.eclipse.e4.ui.menu.tests;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.e4.core.commands.CommandServiceAddon;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.bindings.BindingServiceAddon;
import org.eclipse.e4.ui.internal.workbench.E4Workbench;
import org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer;
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
import org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.commands.MCommand;
import org.eclipse.e4.ui.model.application.commands.impl.CommandsFactoryImpl;
import org.eclipse.e4.ui.model.application.impl.ApplicationFactoryImpl;
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl;
import org.eclipse.e4.ui.model.application.ui.impl.UiFactoryImpl;
import org.eclipse.e4.ui.model.application.ui.menu.ItemType;
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuSeparator;
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
import org.eclipse.e4.ui.services.ContextServiceAddon;
import org.eclipse.e4.ui.services.EContextService;
import org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord;
import org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.internal.menus.MenuPersistence;
public class MMenuItemTest extends TestCase {
final static String PDE_SEARCH_AS_ID = "org.eclipse.pde.ui.SearchActionSet";
final static String SEARCH_AS_ID = "org.eclipse.search.searchActionSet";
protected IEclipseContext appContext;
protected E4Workbench wb;
private MMenuContribution createContribution(boolean withVisibleWhen) {
MMenuContribution mmc = MenuFactoryImpl.eINSTANCE
.createMenuContribution();
mmc.setElementId("test.contrib1");
mmc.setParentId("file");
mmc.setPositionInParent("after=additions");
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("mmc.item1");
item1.setLabel("mmc.item1");
mmc.getChildren().add(item1);
if (withVisibleWhen) {
MCoreExpression exp = UiFactoryImpl.eINSTANCE
.createCoreExpression();
exp.setCoreExpressionId("org.eclipse.e4.ui.tests.withMmc1");
mmc.setVisibleWhen(exp);
}
return mmc;
}
private void createMenuContribution(MApplication application) {
MMenuContribution mmc = MenuFactoryImpl.eINSTANCE
.createMenuContribution();
mmc.setElementId("test.contrib2");
mmc.setParentId("org.eclipse.ui.main.menu");
mmc.setPositionInParent("after=additions");
MMenu menu = MenuFactoryImpl.eINSTANCE.createMenu();
menu.setElementId("vanish");
menu.setLabel("Vanish");
mmc.getChildren().add(menu);
MCoreExpression exp = UiFactoryImpl.eINSTANCE.createCoreExpression();
exp.setCoreExpressionId("org.eclipse.e4.ui.tests.withMmc1");
mmc.setVisibleWhen(exp);
application.getMenuContributions().add(mmc);
mmc = MenuFactoryImpl.eINSTANCE.createMenuContribution();
mmc.setElementId("test.contrib3");
mmc.setParentId("vanish");
mmc.setPositionInParent("after=additions");
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("mmc.item2");
item1.setLabel("mmc.item2");
mmc.getChildren().add(item1);
// exp = UiFactoryImpl.eINSTANCE.createCoreExpression();
// exp.setCoreExpressionId("org.eclipse.e4.ui.tests.withMmc1");
// mmc.setVisibleWhen(exp);
application.getMenuContributions().add(mmc);
}
private MenuManagerRenderer getRenderer(IEclipseContext context,
MUIElement element) {
IRendererFactory rendererFactory = context.get(IRendererFactory.class);
AbstractPartRenderer renderer = rendererFactory.getRenderer(element,
null);
assertEquals(MenuManagerRenderer.class, renderer.getClass());
return (MenuManagerRenderer) renderer;
}
@Override
protected void setUp() throws Exception {
appContext = E4Application.createDefaultContext();
ContextInjectionFactory.make(CommandServiceAddon.class, appContext);
ContextInjectionFactory.make(ContextServiceAddon.class, appContext);
ContextInjectionFactory.make(BindingServiceAddon.class, appContext);
appContext.set(E4Workbench.PRESENTATION_URI_ARG,
PartRenderingEngine.engineURI);
}
@Override
protected void tearDown() throws Exception {
if (wb != null) {
wb.close();
}
appContext.dispose();
}
public void testActionSetGeneration() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MMenu menuBar = application.getChildren().get(0).getMainMenu();
// setup structure for actionSet test
TestUtil.setupActionBuilderStructure(menuBar);
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p2");
mp.reRead();
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(5, manager.getSize());
MenuManager editManager = (MenuManager) manager.getItems()[1];
assertEquals(5, editManager.getSize());
IContributionItem[] editItems = editManager.getItems();
assertEquals("org.eclipse.e4.ui.menu.tests.p2.action4",
editItems[4].getId());
MenuManager actionManager = (MenuManager) manager.getItems()[3];
assertEquals("org.eclipse.e4.ui.menu.tests.p2.menu1",
actionManager.getId());
assertEquals(5, actionManager.getSize());
IContributionItem[] actionItems = actionManager.getItems();
assertEquals("group1", actionItems[0].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.p2.action2",
actionItems[1].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.p2.action1",
actionItems[2].getId());
assertEquals("group2", actionItems[3].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.p2.action3",
actionItems[4].getId());
}
public void testActionSetSharedBothActive() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MWindow window = application.getChildren().get(0);
MMenu menuBar = window.getMainMenu();
// setup structure for actionSet test
TestUtil.setupActionBuilderStructure(menuBar);
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p3");
mp.reRead();
// printContributions(application);
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(6, manager.getSize());
MenuManager editManager = (MenuManager) manager.getItems()[1];
assertEquals(4, editManager.getSize());
MenuManager searchManager = (MenuManager) manager.getItems()[4];
assertEquals("org.eclipse.search.menu", searchManager.getId());
assertFalse(searchManager.isVisible());
IEclipseContext windowContext = window.getContext();
EContextService ecs = windowContext.get(EContextService.class);
ecs.activateContext(SEARCH_AS_ID);
ecs.activateContext(PDE_SEARCH_AS_ID);
assertTrue(searchManager.isVisible());
assertEquals(10, searchManager.getSize());
IContributionItem[] searchItems = searchManager.getItems();
assertEquals("internalDialogGroup", searchItems[0].getId());
assertEquals("org.eclipse.search.OpenSearchDialog",
searchItems[1].getId());
assertEquals("org.eclipse.search.OpenFileSearchPage",
searchItems[2].getId());
assertEquals("dialogGroup", searchItems[3].getId());
assertEquals("org.eclipse.pde.ui.actions.OpenPluginSearchPage",
searchItems[4].getId());
assertEquals("fileSearchContextMenuActionsGroup",
searchItems[5].getId());
assertEquals("textSearchSubMenu", searchItems[6].getId());
assertEquals("contextMenuActionsGroup", searchItems[7].getId());
assertEquals("occurencesActionsGroup", searchItems[8].getId());
assertEquals("extraSearchGroup", searchItems[9].getId());
}
public void testActionSetSharedMenuGeneration() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MWindow window = application.getChildren().get(0);
MMenu menuBar = window.getMainMenu();
// setup structure for actionSet test
TestUtil.setupActionBuilderStructure(menuBar);
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p3");
mp.reRead();
// printContributions(application);
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(6, manager.getSize());
MenuManager editManager = (MenuManager) manager.getItems()[1];
assertEquals(4, editManager.getSize());
MenuManager searchManager = (MenuManager) manager.getItems()[4];
assertEquals("org.eclipse.search.menu", searchManager.getId());
assertFalse(searchManager.isVisible());
assertEquals(10, searchManager.getSize());
IContributionItem[] searchItems = searchManager.getItems();
assertEquals("internalDialogGroup", searchItems[0].getId());
assertEquals("org.eclipse.search.OpenSearchDialog",
searchItems[1].getId());
assertEquals("org.eclipse.search.OpenFileSearchPage",
searchItems[2].getId());
assertEquals("dialogGroup", searchItems[3].getId());
assertEquals("org.eclipse.pde.ui.actions.OpenPluginSearchPage",
searchItems[4].getId());
assertEquals("fileSearchContextMenuActionsGroup",
searchItems[5].getId());
assertEquals("textSearchSubMenu", searchItems[6].getId());
assertEquals("contextMenuActionsGroup", searchItems[7].getId());
assertEquals("occurencesActionsGroup", searchItems[8].getId());
assertEquals("extraSearchGroup", searchItems[9].getId());
}
public void testActionSetSharedPDEActive() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MWindow window = application.getChildren().get(0);
MMenu menuBar = window.getMainMenu();
// setup structure for actionSet test
TestUtil.setupActionBuilderStructure(menuBar);
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p3");
mp.reRead();
// printContributions(application);
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(6, manager.getSize());
MenuManager editManager = (MenuManager) manager.getItems()[1];
assertEquals(4, editManager.getSize());
MenuManager searchManager = (MenuManager) manager.getItems()[4];
assertEquals("org.eclipse.search.menu", searchManager.getId());
assertFalse(searchManager.isVisible());
IEclipseContext windowContext = window.getContext();
EContextService ecs = windowContext.get(EContextService.class);
ecs.activateContext(PDE_SEARCH_AS_ID);
assertTrue(searchManager.isVisible());
assertEquals(10, searchManager.getSize());
IContributionItem[] searchItems = searchManager.getItems();
assertEquals("internalDialogGroup", searchItems[0].getId());
assertEquals("org.eclipse.search.OpenSearchDialog",
searchItems[1].getId());
assertEquals("org.eclipse.search.OpenFileSearchPage",
searchItems[2].getId());
assertEquals("dialogGroup", searchItems[3].getId());
assertEquals("org.eclipse.pde.ui.actions.OpenPluginSearchPage",
searchItems[4].getId());
assertEquals("fileSearchContextMenuActionsGroup",
searchItems[5].getId());
assertEquals("textSearchSubMenu", searchItems[6].getId());
assertEquals("contextMenuActionsGroup", searchItems[7].getId());
assertEquals("occurencesActionsGroup", searchItems[8].getId());
assertEquals("extraSearchGroup", searchItems[9].getId());
}
public void testActionSetSharedSearchActive() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MWindow window = application.getChildren().get(0);
MMenu menuBar = window.getMainMenu();
// setup structure for actionSet test
TestUtil.setupActionBuilderStructure(menuBar);
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p3");
mp.reRead();
// printContributions(application);
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(6, manager.getSize());
MenuManager editManager = (MenuManager) manager.getItems()[1];
assertEquals(4, editManager.getSize());
MenuManager searchManager = (MenuManager) manager.getItems()[4];
assertEquals("org.eclipse.search.menu", searchManager.getId());
assertFalse(searchManager.isVisible());
IEclipseContext windowContext = window.getContext();
EContextService ecs = windowContext.get(EContextService.class);
ecs.activateContext(SEARCH_AS_ID);
assertTrue(searchManager.isVisible());
assertEquals(10, searchManager.getSize());
IContributionItem[] searchItems = searchManager.getItems();
assertEquals("internalDialogGroup", searchItems[0].getId());
assertEquals("org.eclipse.search.OpenSearchDialog",
searchItems[1].getId());
assertEquals("org.eclipse.search.OpenFileSearchPage",
searchItems[2].getId());
assertEquals("dialogGroup", searchItems[3].getId());
assertEquals("org.eclipse.pde.ui.actions.OpenPluginSearchPage",
searchItems[4].getId());
assertEquals("fileSearchContextMenuActionsGroup",
searchItems[5].getId());
assertEquals("textSearchSubMenu", searchItems[6].getId());
assertEquals("contextMenuActionsGroup", searchItems[7].getId());
assertEquals("occurencesActionsGroup", searchItems[8].getId());
assertEquals("extraSearchGroup", searchItems[9].getId());
}
public void testContributionRecordMerging() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MMenu menuBar = application.getChildren().get(0).getMainMenu();
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p1");
mp.reRead();
// printContributions(application);
List<MMenuContribution> menuContributions = application
.getMenuContributions();
assertEquals(6, menuContributions.size());
ContributionRecord twoMenus = new ContributionRecord(menuBar,
menuContributions.get(0), renderer);
assertTrue(twoMenus.mergeIntoModel());
assertEquals(2, menuBar.getChildren().size());
MMenu withHandlers = (MMenu) menuBar.getChildren().get(1);
assertEquals(0, withHandlers.getChildren().size());
ContributionRecord handlers = new ContributionRecord(withHandlers,
menuContributions.get(2), renderer);
assertTrue(handlers.mergeIntoModel());
assertEquals(4, withHandlers.getChildren().size());
}
public void testMenuContribution() throws Exception {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menuBar = MenuFactoryImpl.eINSTANCE.createMenu();
menuBar.setElementId("org.eclipse.ui.main.menu");
window.setMainMenu(menuBar);
MMenu fileMenu = MenuFactoryImpl.eINSTANCE.createMenu();
fileMenu.setElementId("file");
fileMenu.setLabel("File");
menuBar.getChildren().add(fileMenu);
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("item1");
item1.setLabel("item1");
fileMenu.getChildren().add(item1);
MMenuSeparator sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator();
sep.setElementId("group1");
fileMenu.getChildren().add(sep);
MMenuItem item2 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item2.setElementId("item2");
item2.setLabel("item2");
fileMenu.getChildren().add(item2);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
application.getMenuContributions().add(createContribution(false));
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
MenuManagerRenderer renderer = getRenderer(appContext, menuBar);
MenuManager fileManager = renderer.getManager(fileMenu);
assertNotNull("No file menu?", fileManager);
assertEquals(4, fileManager.getSize());
assertEquals("mmc.item1", fileManager.getItems()[3].getId());
}
public void testMenuContributionGeneration() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MMenu menuBar = application.getChildren().get(0).getMainMenu();
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p1");
mp.reRead();
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(2, manager.getSize());
MenuManager withGroup = (MenuManager) manager.getItems()[0];
assertEquals("WithGroup", withGroup.getId());
assertEquals(4, withGroup.getSize());
IContributionItem[] withGroupItems = withGroup.getItems();
assertEquals("group1", withGroupItems[0].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandOne",
withGroupItems[1].getId());
assertEquals("group2", withGroupItems[2].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandTwo",
withGroupItems[3].getId());
MenuManager withHandlers = (MenuManager) manager.getItems()[1];
assertEquals("WithHandlers", withHandlers.getId());
assertEquals(5, withHandlers.getSize());
IContributionItem[] withHandlerItems = withHandlers.getItems();
assertEquals("org.eclipse.e4.ui.menu.tests.commandOne",
withHandlerItems[0].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandTwo",
withHandlerItems[1].getId());
assertEquals("group1", withHandlerItems[2].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandFour",
withHandlerItems[3].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandThree",
withHandlerItems[4].getId());
}
public void testMenuContributionVisibility() throws Exception {
MApplication application = TestUtil.setupRenderer(appContext);
MenuManagerRenderer renderer = appContext
.get(MenuManagerRenderer.class);
MMenu menuBar = application.getChildren().get(0).getMainMenu();
// read in the relevant extensions.
MenuPersistence mp = new MenuPersistence(application, appContext,
"org.eclipse.e4.ui.menu.tests.p4");
mp.reRead();
// render the main menu bar
Shell shell = new Shell();
Menu menu = (Menu) renderer.createWidget(menuBar, shell);
assertNotNull(menu);
Object obj = menuBar;
renderer.processContents((MElementContainer<MUIElement>) obj);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull(manager);
assertEquals(2, manager.getSize());
MenuManager withGroup = (MenuManager) manager.getItems()[0];
assertEquals("WithGroup", withGroup.getId());
assertEquals(5, withGroup.getSize());
IContributionItem[] withGroupItems = withGroup.getItems();
assertEquals("group1", withGroupItems[0].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandOne",
withGroupItems[1].getId());
IContributionItem p4InvOne = withGroupItems[2];
assertEquals("p4.invisible.commandOne", p4InvOne.getId());
assertEquals("group2", withGroupItems[3].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandTwo",
withGroupItems[4].getId());
assertTrue(p4InvOne.isVisible());
Menu withGroupMenu = withGroup.getMenu();
assertNotNull(withGroupMenu);
Event show = new Event();
show.widget = withGroupMenu;
show.type = SWT.Show;
withGroupMenu.notifyListeners(SWT.Show, show);
Event hide = new Event();
hide.widget = withGroupMenu;
hide.type = SWT.Hide;
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertFalse(p4InvOne.isVisible());
MWindow window = application.getChildren().get(0);
IEclipseContext context = window.getContext();
context.set("selection", new StructuredSelection(
"show.p4.invisible.commandOne"));
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertTrue(p4InvOne.isVisible());
context.set("selection", new StructuredSelection(
new Object[] { "show.p4.invisible.commandOne",
"show.p4.invisible.commandOne" }));
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertFalse(p4InvOne.isVisible());
context.set("selection", new StructuredSelection(
"show.p4.invisible.commandOne"));
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertTrue(p4InvOne.isVisible());
context.set("selection", new StructuredSelection(
"hide.p4.invisible.commandOne"));
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertFalse(p4InvOne.isVisible());
context.set("selection", new StructuredSelection(
"show.p4.invisible.commandOne"));
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertTrue(p4InvOne.isVisible());
context.remove("selection");
withGroupMenu.notifyListeners(SWT.Show, show);
withGroupMenu.notifyListeners(SWT.Hide, hide);
assertFalse(p4InvOne.isVisible());
MenuManager withHandlers = (MenuManager) manager.getItems()[1];
assertEquals("WithHandlers", withHandlers.getId());
assertEquals(5, withHandlers.getSize());
IContributionItem[] withHandlerItems = withHandlers.getItems();
assertEquals("org.eclipse.e4.ui.menu.tests.commandOne",
withHandlerItems[0].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandTwo",
withHandlerItems[1].getId());
assertEquals("group1", withHandlerItems[2].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandFour",
withHandlerItems[3].getId());
assertEquals("org.eclipse.e4.ui.menu.tests.commandThree",
withHandlerItems[4].getId());
}
public void testMHandledMenuItem_Check_Bug316752() {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menu = MenuFactoryImpl.eINSTANCE.createMenu();
MHandledMenuItem menuItem = MenuFactoryImpl.eINSTANCE
.createHandledMenuItem();
MCommand command = CommandsFactoryImpl.eINSTANCE.createCommand();
command.setElementId("commandId");
menuItem.setCommand(command);
menuItem.setType(ItemType.CHECK);
menuItem.setSelected(true);
menu.getChildren().add(menuItem);
window.setMainMenu(menu);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
MenuManager barManager = (MenuManager) ((Menu) menu.getWidget())
.getData();
barManager.updateAll(true);
Object widget1 = menuItem.getWidget();
assertNotNull(widget1);
assertTrue(widget1 instanceof MenuItem);
MenuItem menuItemWidget = (MenuItem) widget1;
assertTrue(menuItemWidget.getSelection());
}
public void testMMenuItem_RadioItems() {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menu = MenuFactoryImpl.eINSTANCE.createMenu();
MMenuItem menuItem1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
MMenuItem menuItem2 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
menuItem1.setType(ItemType.RADIO);
menuItem2.setType(ItemType.RADIO);
menu.getChildren().add(menuItem1);
menu.getChildren().add(menuItem2);
window.setMainMenu(menu);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
((MenuManager) ((Widget) menu.getWidget()).getData()).updateAll(true);
Object widget1 = menuItem1.getWidget();
assertNotNull(widget1);
assertTrue(widget1 instanceof MenuItem);
Object widget2 = menuItem2.getWidget();
assertNotNull(widget2);
assertTrue(widget2 instanceof MenuItem);
MenuItem menuItemWidget1 = (MenuItem) widget1;
MenuItem menuItemWidget2 = (MenuItem) widget2;
// test that 'clicking' on the item updates the model
menuItemWidget1.setSelection(false);
menuItemWidget2.setSelection(true);
menuItemWidget1.notifyListeners(SWT.Selection, new Event());
menuItemWidget2.notifyListeners(SWT.Selection, new Event());
assertFalse(menuItem1.isSelected());
assertTrue(menuItem2.isSelected());
menuItemWidget2.setSelection(false);
menuItemWidget1.setSelection(true);
menuItemWidget2.notifyListeners(SWT.Selection, new Event());
menuItemWidget1.notifyListeners(SWT.Selection, new Event());
assertTrue(menuItem1.isSelected());
assertFalse(menuItem2.isSelected());
// Check that model changes are reflected in the items
menuItem1.setSelected(false);
assertFalse(menuItemWidget1.getSelection());
menuItem2.setSelected(true);
assertTrue(menuItemWidget2.getSelection());
}
private void testMMenuItem_Text(String before, String beforeExpected,
String after, String afterExpected) {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menu = MenuFactoryImpl.eINSTANCE.createMenu();
MMenuItem menuItem = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
menuItem.setLabel(before);
window.setMainMenu(menu);
menu.getChildren().add(menuItem);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
((MenuManager) ((Widget) menu.getWidget()).getData()).updateAll(true);
Object widget = menuItem.getWidget();
assertNotNull(widget);
assertTrue(widget instanceof MenuItem);
MenuItem menuItemWidget = (MenuItem) widget;
assertEquals(beforeExpected, menuItemWidget.getText());
menuItem.setLabel(after);
assertEquals(afterExpected, menuItemWidget.getText());
}
public void testMMenuItem_Text_EmptyEmpty() {
testMMenuItem_Text("", "", "", "");
}
public void testMMenuItem_Text_EmptyNull() {
testMMenuItem_Text("", "", null, "");
}
public void testMMenuItem_Text_EmptyString() {
testMMenuItem_Text("", "", "label", "label");
}
public void testMMenuItem_Text_NullEmpty() {
testMMenuItem_Text(null, "", "", "");
}
public void testMMenuItem_Text_NullNull() {
testMMenuItem_Text(null, "", null, "");
}
public void testMMenuItem_Text_NullString() {
testMMenuItem_Text(null, "", "label", "label");
}
public void testMMenuItem_Text_StringEmpty() {
testMMenuItem_Text("label", "label", "", "");
}
public void testMMenuItem_Text_StringNull() {
testMMenuItem_Text("label", "label", null, "");
}
public void testMMenuItem_Text_StringStringChanged() {
testMMenuItem_Text("label", "label", "label2", "label2");
}
public void testMMenuItem_Text_StringStringUnchanged() {
testMMenuItem_Text("label", "label", "label", "label");
}
public void testSubMenuCreation() throws Exception {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menuBar = MenuFactoryImpl.eINSTANCE.createMenu();
menuBar.setElementId("org.eclipse.ui.main.menu");
window.setMainMenu(menuBar);
MMenu fileMenu = MenuFactoryImpl.eINSTANCE.createMenu();
fileMenu.setElementId("file");
fileMenu.setLabel("File");
menuBar.getChildren().add(fileMenu);
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("item1");
item1.setLabel("item1");
fileMenu.getChildren().add(item1);
MMenuSeparator sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator();
sep.setElementId("group1");
fileMenu.getChildren().add(sep);
MMenuItem item2 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item2.setElementId("item2");
item2.setLabel("item2");
fileMenu.getChildren().add(item2);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
MenuManagerRenderer renderer = getRenderer(appContext, menuBar);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull("failed to create menu bar manager", manager);
assertEquals(1, manager.getSize());
MenuManager fileManager = (MenuManager) manager.getItems()[0];
MenuManager fileR = renderer.getManager(fileMenu);
assertEquals(fileManager, fileR);
assertEquals(3, fileManager.getSize());
}
public void testTbrItem() throws Exception {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menuBar = MenuFactoryImpl.eINSTANCE.createMenu();
menuBar.setElementId("org.eclipse.ui.main.menu");
window.setMainMenu(menuBar);
MMenu fileMenu = MenuFactoryImpl.eINSTANCE.createMenu();
fileMenu.setElementId("file");
fileMenu.setLabel("File");
menuBar.getChildren().add(fileMenu);
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("item1");
item1.setLabel("item1");
fileMenu.getChildren().add(item1);
MMenuSeparator sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator();
sep.setElementId("group1");
fileMenu.getChildren().add(sep);
MMenuItem item2 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item2.setElementId("item2");
item2.setLabel("item2");
fileMenu.getChildren().add(item2);
item2.setToBeRendered(false);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
MenuManagerRenderer renderer = getRenderer(appContext, menuBar);
MenuManager manager = renderer.getManager(menuBar);
assertNotNull("failed to create menu bar manager", manager);
assertEquals(1, manager.getSize());
MenuManager fileManager = (MenuManager) manager.getItems()[0];
MenuManager fileR = renderer.getManager(fileMenu);
assertEquals(fileManager, fileR);
assertEquals(2, fileManager.getSize());
}
public void testWithVisible() throws Exception {
MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
MMenu menuBar = MenuFactoryImpl.eINSTANCE.createMenu();
menuBar.setElementId("org.eclipse.ui.main.menu");
window.setMainMenu(menuBar);
MMenu fileMenu = MenuFactoryImpl.eINSTANCE.createMenu();
fileMenu.setElementId("file");
fileMenu.setLabel("File");
menuBar.getChildren().add(fileMenu);
MMenuItem item1 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item1.setElementId("item1");
item1.setLabel("item1");
fileMenu.getChildren().add(item1);
MMenuSeparator sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator();
sep.setElementId("group1");
fileMenu.getChildren().add(sep);
MMenuItem item2 = MenuFactoryImpl.eINSTANCE.createDirectMenuItem();
item2.setElementId("item2");
item2.setLabel("item2");
fileMenu.getChildren().add(item2);
MApplication application = ApplicationFactoryImpl.eINSTANCE
.createApplication();
application.getChildren().add(window);
application.setContext(appContext);
appContext.set(MApplication.class.getName(), application);
application.getMenuContributions().add(createContribution(true));
wb = new E4Workbench(window, appContext);
wb.createAndRunUI(window);
MenuManagerRenderer renderer = getRenderer(appContext, menuBar);
MenuManager fileManager = renderer.getManager(fileMenu);
assertNotNull("No file menu?", fileManager);
assertEquals(4, fileManager.getSize());
IContributionItem mmcItem = fileManager.getItems()[3];
assertEquals("mmc.item1", mmcItem.getId());
assertEquals("before the first show, we have no context to evaluate",
true, mmcItem.isVisible());
MenuManager manager = renderer.getManager(menuBar);
manager.updateAll(true);
Menu fileWidget = fileManager.getMenu();
assertNotNull(fileWidget);
Event show = new Event();
show.widget = fileWidget;
show.type = SWT.Show;
fileWidget.notifyListeners(SWT.Show, show);
Event hide = new Event();
hide.widget = fileWidget;
hide.type = SWT.Hide;
fileWidget.notifyListeners(SWT.Hide, hide);
assertEquals("after the first show, it should not be visible", false,
mmcItem.isVisible());
appContext.set("mmc1", Boolean.TRUE);
assertEquals("Change should not show up until next show", false,
mmcItem.isVisible());
fileWidget.notifyListeners(SWT.Show, show);
fileWidget.notifyListeners(SWT.Hide, hide);
assertEquals(true, mmcItem.isVisible());
appContext.remove("mmc1");
fileWidget.notifyListeners(SWT.Show, show);
assertEquals(false, mmcItem.isVisible());
fileWidget.notifyListeners(SWT.Hide, hide);
}
}