blob: 354c66a992b5284685afb6122b8fc568c70b7bd2 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}