Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
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.MParameter;
import org.eclipse.e4.ui.model.application.ui.MExpression;
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;
Expand Down Expand Up @@ -247,7 +248,12 @@ private void fillMenu(IMenuManager innerMgr) {
ccip.parameters.put(menuParam.getName(), menuParam.getValue());
}
}
innerMgr.add(new CommandContributionItem(ccip));
CommandContributionItem cci = new CommandContributionItem(ccip);
MExpression visibleWhen = menuElement.getVisibleWhen();
if (visibleWhen != null) {
cci.setVisible(ContributionsAnalyzer.isVisible(visibleWhen, eContext));
}
innerMgr.add(cci);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
DynamicMenuTest.class,
Bug231304Test.class,
ShowViewMenuTest.class,
ShowInMenuTest.class,
Bug264804Test.class,
MenuHelperTest.class,
Bug410426Test.class,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package org.eclipse.ui.tests.menus;

import static org.eclipse.ui.tests.harness.util.UITestUtil.openTestWindow;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;

import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ContributionItemFactory;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.internal.ide.handlers.ShowInSystemExplorerHandler;
import org.eclipse.ui.tests.harness.util.CloseTestWindowsExtension;
import org.eclipse.ui.tests.harness.util.EditorTestHelper;
import org.eclipse.ui.tests.harness.util.FileUtil;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(CloseTestWindowsExtension.class)
public class ShowInMenuTest {

private static final String TEST_ITEM_ID = "org.eclipse.ui.tests.menus.showInMenuTestItem";

private IWorkbenchWindow window;
private IWorkbenchPage page;
private List<IProject> projects;

@BeforeEach
public final void setUp() throws Exception {
window = openTestWindow(IDE.RESOURCE_PERSPECTIVE_ID);
page = window.getActivePage();
projects = List.of(FileUtil.createProject("a"), FileUtil.createProject("b"));
}

@AfterEach
public final void tearDown() throws Exception {
for (IProject project : projects) {
FileUtil.deleteProject(project);
}
}

@Test
void testVisibleWhenEvaluation() throws CoreException {
IViewPart viewPart = page.showView(IPageLayout.ID_PROJECT_EXPLORER);
ISelectionProvider selectionProvider = viewPart.getSite().getSelectionProvider();
IWorkbenchWindow workbenchWindow = EditorTestHelper.getActiveWorkbenchWindow();

// Test item should be visible when selecting a single project
selectionProvider.setSelection(new StructuredSelection(projects.get(0)));
Menu menu = computeShowInMenu(workbenchWindow);

assertNotNull(getContributionItemById(menu, TEST_ITEM_ID));

// Test item should be hidden when selecting multiple projects
selectionProvider.setSelection(new StructuredSelection(projects));
menu = computeShowInMenu(workbenchWindow);

assertNull(getContributionItemById(menu, TEST_ITEM_ID));
}

@Test
void testVisibleWhenEvaluationForShowInSystemExplorer() throws CoreException {
IViewPart viewPart = page.showView(IPageLayout.ID_PROJECT_EXPLORER);
ISelectionProvider selectionProvider = viewPart.getSite().getSelectionProvider();
IWorkbenchWindow workbenchWindow = EditorTestHelper.getActiveWorkbenchWindow();

// "Show in System Explorer" should be visible when selecting a single project
selectionProvider.setSelection(new StructuredSelection(projects.get(0)));
Menu menu = computeShowInMenu(workbenchWindow);

assertNotNull(getContributionItemById(menu, ShowInSystemExplorerHandler.ID));

// "Show in System Explorer" should be hidden when selecting multiple projects
selectionProvider.setSelection(new StructuredSelection(projects));
menu = computeShowInMenu(workbenchWindow);

assertNull(getContributionItemById(menu, ShowInSystemExplorerHandler.ID));
}

private static Menu computeShowInMenu(IWorkbenchWindow workbenchWindow) {
IContributionItem contributionItem = ContributionItemFactory.VIEWS_SHOW_IN.create(workbenchWindow);
Menu menu = new Menu(workbenchWindow.getShell());
contributionItem.fill(menu, 0);
return menu;
}

private static ContributionItem getContributionItemById(Menu menu, String id) {
for (MenuItem item : menu.getItems()) {
if (item.getData() instanceof ContributionItem contributionItem && contributionItem.getId().equals(id)) {
return contributionItem;
}
}
return null;
}
}
18 changes: 18 additions & 0 deletions tests/org.eclipse.ui.tests/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3911,6 +3911,24 @@
style="push">
</command>
</menuContribution>
<menuContribution
allPopups="false"
locationURI="popup:org.eclipse.ui.menus.showInMenu">
<command
commandId="org.eclipse.ui.tests.menus.showInMenuTestItem"
label="Show In Menu Test Item"
style="push">
<visibleWhen
checkEnabled="false">
<with
variable="selection">
<count
value="1">
</count>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.contexts">
Expand Down
Loading