| /******************************************************************************* |
| * Copyright (c) 2008, 2015 Oakland Software Incorporated and others. |
| * 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: |
| * Francis Upton IV, Oakland Software Incorporated - initial API and implementation |
| * Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 457870 |
| *******************************************************************************/ |
| package org.eclipse.ui.tests.navigator; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.jface.util.IPropertyChangeListener; |
| import org.eclipse.jface.util.PropertyChangeEvent; |
| import org.eclipse.jface.viewers.ViewerFilter; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.TreeItem; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.IWorkingSet; |
| import org.eclipse.ui.IWorkingSetManager; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.ResourceWorkingSetFilter; |
| import org.eclipse.ui.actions.WorkingSetFilterActionGroup; |
| import org.eclipse.ui.internal.AggregateWorkingSet; |
| import org.eclipse.ui.internal.WorkingSet; |
| import org.eclipse.ui.internal.navigator.resources.actions.WorkingSetActionProvider; |
| import org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorMessages; |
| import org.eclipse.ui.internal.navigator.workingsets.WorkingSetsContentProvider; |
| import org.eclipse.ui.navigator.IExtensionStateModel; |
| import org.eclipse.ui.navigator.INavigatorContentExtension; |
| import org.eclipse.ui.navigator.resources.ProjectExplorer; |
| import org.eclipse.ui.tests.harness.util.DisplayHelper; |
| import org.junit.Test; |
| |
| public class WorkingSetTest extends NavigatorTestBase { |
| |
| private static final boolean SLEEP_LONG = false; |
| private static final IWorkingSet[] NO_WORKINGSET = {}; |
| |
| |
| |
| public WorkingSetTest() { |
| _navigatorInstanceId = ProjectExplorer.VIEW_ID; |
| } |
| |
| |
| // Bug 157877 when using empty window working set, it should show all |
| @Test |
| public void testEmptyWindowWorkingSet() throws Exception { |
| // This test should be run first with an no working set in the workbench |
| // Thus we enforce the fact that there's no Working Set, as we cant |
| // order test |
| PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setWorkingSets(NO_WORKINGSET); |
| |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper |
| .getActionProvider(_contentService, _actionService, WorkingSetActionProvider.class); |
| |
| IWorkingSet workingSet = PlatformUI.getWorkbench().getActiveWorkbenchWindow() |
| .getActivePage().getAggregateWorkingSet(); |
| |
| // Set the filter to window working set (which should be empty) |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, |
| WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, workingSet); |
| l.propertyChange(event); |
| |
| TreeItem[] items = _viewer.getTree().getItems(); |
| assertTrue("There should be some items.", items.length > 0); |
| assertEquals(null, _commonNavigator.getWorkingSetLabel()); |
| } |
| |
| // Bug 212389 projects are not shown when they are not in the working |
| // but their children are |
| @Test |
| public void testMissingProjectsInWorkingSet() throws Exception { |
| |
| IFile f1 = _p1.getFile("f1"); |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| |
| IWorkingSet workingSet = new WorkingSet("ws1", "ws1", new IAdaptable[] { f1 }); |
| |
| AggregateWorkingSet agWorkingSet = new AggregateWorkingSet("AgWs", "Ag Working Set", |
| new IWorkingSet[] { workingSet }); |
| |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| agWorkingSet); |
| l.propertyChange(event); |
| |
| DisplayHelper.runEventLoop(Display.getCurrent(), 100); |
| |
| // DisplayHelper.sleep(Display.getCurrent(), 10000000); |
| |
| TreeItem[] items = _viewer.getTree().getItems(); |
| // The bug is here where the first item is a IFile, not the enclosing |
| // project |
| assertTrue("First item needs to be project", items[0].getData().equals(_p1)); |
| assertEquals("ws1", _commonNavigator.getWorkingSetLabel()); |
| } |
| |
| // bug 220090 test that working sets are shown when selected locally (not |
| // using the window working set) |
| @Test |
| public void testTopLevelWorkingSet() throws Exception { |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| |
| IExtensionStateModel extensionStateModel = _contentService |
| .findStateModel(WorkingSetsContentProvider.EXTENSION_ID); |
| |
| extensionStateModel.setBooleanProperty(WorkingSetsContentProvider.SHOW_TOP_LEVEL_WORKING_SETS, true); |
| |
| IWorkingSet workingSet = new WorkingSet("ws1", "ws1", new IAdaptable[] { _p1 }); |
| |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| workingSet); |
| l.propertyChange(event); |
| |
| // DisplayHelper.sleep(Display.getCurrent(), 10000000); |
| |
| _viewer.expandAll(); |
| |
| TreeItem[] items = _viewer.getTree().getItems(); |
| // The bug is here where the first item is a IFile, not the enclosing |
| // project |
| assertTrue("First item needs to be working set", items[0].getData().equals(workingSet)); |
| assertEquals("ws1", _commonNavigator.getWorkingSetLabel()); |
| |
| // bug 268250 [CommonNavigator] Project labels missing in Project |
| // Explorer when working sets are top level elements |
| TreeItem projectItem = items[0].getItem(0); |
| assertEquals("p1", projectItem.getText()); |
| |
| } |
| |
| // bug 244174 test property to switch back and forth between working sets |
| // as top level and not |
| @Test |
| public void testTopLevelChange() throws Exception { |
| |
| IExtensionStateModel extensionStateModel = _contentService |
| .findStateModel(WorkingSetsContentProvider.EXTENSION_ID); |
| |
| // Force the content provider to be loaded so that it responds to the |
| // working set events |
| INavigatorContentExtension ce = _contentService |
| .getContentExtensionById(WorkingSetsContentProvider.EXTENSION_ID); |
| ce.getContentProvider(); |
| |
| IWorkingSet workingSet = new WorkingSet("ws1", "ws1", new IAdaptable[] { _p1 }); |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| workingSet); |
| l.propertyChange(event); |
| |
| IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| IWorkbenchPage activePage = activeWindow.getActivePage(); |
| IWorkingSet[] activeWorkingSets = activePage.getWorkingSets(); |
| activePage.setWorkingSets(new IWorkingSet[] { workingSet }); |
| |
| extensionStateModel.setBooleanProperty(WorkingSetsContentProvider.SHOW_TOP_LEVEL_WORKING_SETS, true); |
| refreshViewer(); |
| |
| TreeItem[] items = _viewer.getTree().getItems(); |
| |
| assertTrue("First item needs to be working set", items[0].getData().equals(workingSet)); |
| |
| extensionStateModel.setBooleanProperty(WorkingSetsContentProvider.SHOW_TOP_LEVEL_WORKING_SETS, false); |
| refreshViewer(); |
| |
| items = _viewer.getTree().getItems(); |
| assertTrue("First item needs to be project", items[0].getData().equals(_p1)); |
| |
| extensionStateModel.setBooleanProperty(WorkingSetsContentProvider.SHOW_TOP_LEVEL_WORKING_SETS, true); |
| refreshViewer(); |
| |
| items = _viewer.getTree().getItems(); |
| assertTrue("First item needs to be working set", items[0].getData().equals(workingSet)); |
| |
| // Restore active working sets |
| activePage.setWorkingSets(activeWorkingSets); |
| } |
| |
| @Test |
| public void testMultipleWorkingSets() throws Exception { |
| |
| // Force the content provider to be loaded so that it responds to the |
| // working set events |
| INavigatorContentExtension ce = _contentService |
| .getContentExtensionById(WorkingSetsContentProvider.EXTENSION_ID); |
| ce.getContentProvider(); |
| |
| IWorkingSet workingSet1 = new WorkingSet("ws1", "ws1", new IAdaptable[] { _p1 }); |
| IWorkingSet workingSet2 = new WorkingSet("ws2", "ws2", new IAdaptable[] { _p1 }); |
| |
| AggregateWorkingSet agWorkingSet = new AggregateWorkingSet("AgWs", "Ag Working Set", new IWorkingSet[] { |
| workingSet1, workingSet2 }); |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| agWorkingSet); |
| l.propertyChange(event); |
| |
| assertEquals(WorkbenchNavigatorMessages.WorkingSetActionProvider_multipleWorkingSets, |
| _commonNavigator.getWorkingSetLabel()); |
| } |
| |
| // bug 262096 [CommonNavigator] Changing *any* filter breaks working sets |
| // filter |
| @Test |
| public void testWorkingSetFilter() throws Exception { |
| |
| _contentService.bindExtensions(new String[] { COMMON_NAVIGATOR_RESOURCE_EXT }, false); |
| _contentService.getActivationService().activateExtensions(new String[] { COMMON_NAVIGATOR_RESOURCE_EXT }, true); |
| |
| IWorkingSet workingSet = new WorkingSet("ws1", "ws1", new IAdaptable[] { _p1 }); |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| workingSet); |
| l.propertyChange(event); |
| |
| ViewerFilter vf[]; |
| vf = _viewer.getFilters(); |
| boolean found = false; |
| for (int i = 0; i < vf.length; i++) { |
| if (vf[i] instanceof ResourceWorkingSetFilter) |
| found = true; |
| } |
| assertTrue(found); |
| |
| _contentService.getFilterService().activateFilterIdsAndUpdateViewer( |
| new String[] { TEST_FILTER_P1, TEST_FILTER_P2 }); |
| |
| vf = _viewer.getFilters(); |
| found = false; |
| for (int i = 0; i < vf.length; i++) { |
| if (vf[i] instanceof ResourceWorkingSetFilter) |
| found = true; |
| } |
| assertTrue("Working set filter is gone, oh my!", found); |
| } |
| |
| // Bug 224703 - Project explorer doesn't show recreated working set |
| // (this test does not show the problem since it was in the |
| // WorkingSetSelectionDialog, but still it's nice to have) |
| @Test |
| public void testDeletedAndRecreated() throws Exception { |
| |
| INavigatorContentExtension ce = _contentService |
| .getContentExtensionById(WorkingSetsContentProvider.EXTENSION_ID); |
| ce.getContentProvider(); |
| |
| IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager(); |
| |
| IWorkingSet ws1 = workingSetManager.createWorkingSet("ws1", new IAdaptable[] { _p1 }); |
| workingSetManager.addWorkingSet(ws1); |
| IWorkingSet ws2 = workingSetManager.createWorkingSet("ws2", new IAdaptable[] { _p2 }); |
| workingSetManager.addWorkingSet(ws2); |
| |
| WorkingSetActionProvider provider = (WorkingSetActionProvider) TestAccessHelper.getActionProvider( |
| _contentService, _actionService, WorkingSetActionProvider.class); |
| |
| IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| IWorkbenchPage activePage = activeWindow.getActivePage(); |
| activePage.setWorkingSets(new IWorkingSet[] { ws1, ws2 }); |
| |
| IPropertyChangeListener l = provider.getFilterChangeListener(); |
| PropertyChangeEvent event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, |
| ws2); |
| l.propertyChange(event); |
| |
| DisplayHelper.runEventLoop(Display.getCurrent(), 100); |
| |
| TreeItem[] items = _viewer.getTree().getItems(); |
| assertTrue(items[0].getData().equals(_p2)); |
| |
| l = provider.getFilterChangeListener(); |
| event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, ws1); |
| l.propertyChange(event); |
| DisplayHelper.runEventLoop(Display.getCurrent(), 100); |
| items = _viewer.getTree().getItems(); |
| assertTrue(items[0].getData().equals(_p1)); |
| |
| workingSetManager.removeWorkingSet(ws2); |
| |
| ws2 = workingSetManager.createWorkingSet("ws2", new IAdaptable[] { _p2 }); |
| workingSetManager.addWorkingSet(ws2); |
| |
| l = provider.getFilterChangeListener(); |
| event = new PropertyChangeEvent(this, WorkingSetFilterActionGroup.CHANGE_WORKING_SET, null, ws2); |
| l.propertyChange(event); |
| DisplayHelper.runEventLoop(Display.getCurrent(), 100); |
| items = _viewer.getTree().getItems(); |
| assertTrue(items[0].getData().equals(_p2)); |
| |
| if (SLEEP_LONG) |
| DisplayHelper.sleep(Display.getCurrent(), 10000000); |
| |
| } |
| |
| } |