blob: 38c78ab3918ec2fd1cc0c3c2d715be1040ab22e2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 SAP AG, Walldorf.
* 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.platform.discovery.integration.internal.plugin;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.platform.discovery.core.api.IContributedAction;
import org.eclipse.platform.discovery.core.api.ISearchConsoleSlaveController;
import org.eclipse.platform.discovery.core.api.ISearchFavoritesMasterController;
import org.eclipse.platform.discovery.core.api.ISearchFavoritesSlaveController;
import org.eclipse.platform.discovery.core.internal.IDiscoveryView;
import org.eclipse.platform.discovery.core.internal.ISearchConsoleView;
import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleController;
import org.eclipse.platform.discovery.core.internal.console.ISearchConsoleControllerOutputView;
import org.eclipse.platform.discovery.core.internal.favorites.IPersistenceUtil;
import org.eclipse.platform.discovery.core.internal.favorites.ISearchFavoritesControllerOutputView;
import org.eclipse.platform.discovery.core.internal.favorites.SearchFavoritesPersistenceUtil;
import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
import org.eclipse.platform.discovery.runtime.api.persistence.DestinationItemPair;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.persistence.MementoContentManagerException;
import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
import org.eclipse.platform.discovery.ui.api.IMasterDiscoveryView;
import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
import org.eclipse.platform.discovery.ui.api.IViewUiContext;
import org.eclipse.platform.discovery.ui.api.impl.DefaultSessionIds;
import org.eclipse.platform.discovery.ui.internal.view.ICustomizableView;
import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
import org.eclipse.platform.discovery.util.api.longop.ILongOperationRunner;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.WorkbenchException;
import org.jmock.core.Constraint;
public class DiscoveryIntegrationPluginTest extends MockObjectTestCase
{
private Mock<IWorkbenchPartReference> wbPartReference;
private Mock<ISearchConsoleView> consoleView;
private Mock<ISearchConsoleControllerOutputView> consoleViewOutputController;
private Mock<ISearchConsoleController> consoleController;
private TestedIntegrationPlugin plugin;
private Mock<ISlaveControllersConfiguration> slaveControllersConfig;
private Mock<ISearchConsoleSlaveController> slaveController;
private Mock<IContributedAction> contributedAction;
private Mock<IViewCustomizationConfiguration> viewCustomizationsConfig;
private Mock<ICustomizableView> customizableView;
private Mock<ISearchConsoleCustomization> searchConsoleViewCustomization;
private Mock<IMasterDiscoveryView> masterView;
private Mock<ILongOperationRunner> operationRunner;
private Mock<ISearchFavoritesControllerOutputView> favoritesControllerView;
private Mock<ISearchFavoritesMasterController> searchFavoritesController;
private Mock<IDiscoveryView<ISearchFavoritesControllerOutputView, ISearchFavoritesMasterController>> searchFavoritesView;
private Mock<ISearchFavoritesSlaveController> searchFavoritesSlaveController;
private Mock<ISearchFavoritesViewCustomization> searchFavoritesViewCustomization;
@Override
protected void setUp() throws Exception
{
wbPartReference = mock(IWorkbenchPartReference.class);
consoleViewOutputController = mock(ISearchConsoleControllerOutputView.class);
consoleView = mock(ISearchConsoleView.class);
consoleView.stubs().method("getControllerView").will(returnValue(consoleViewOutputController.proxy()));
consoleController = mock(ISearchConsoleController.class);
contributedAction = mock(IContributedAction.class);
customizableView = mock(ICustomizableView.class);
masterView = mock(IMasterDiscoveryView.class);
operationRunner = mock(ILongOperationRunner.class);
searchFavoritesView = mock(IDiscoveryView.class);
favoritesControllerView = mock(ISearchFavoritesControllerOutputView.class);
searchFavoritesView.stubs().method("getControllerView").will(returnValue(favoritesControllerView.proxy()));
searchFavoritesController = mock(ISearchFavoritesMasterController.class);
setupSlaveControllers();
setupViewCustomizations();
plugin = new TestedIntegrationPlugin();
}
private void setupSlaveControllers()
{
slaveController = mock(ISearchConsoleSlaveController.class);
slaveController.stubs().method("createActions").will(returnValue(new HashSet<IContributedAction>(Arrays.asList(new IContributedAction[] { contributedAction.proxy() }))));
searchFavoritesSlaveController = mock(ISearchFavoritesSlaveController.class);
searchFavoritesSlaveController.stubs().method("createActions").will(returnValue(new HashSet<IContributedAction>(Arrays.asList(new IContributedAction[] { contributedAction.proxy() }))));
slaveControllersConfig = mock(ISlaveControllersConfiguration.class);
slaveControllersConfig.expects(atMostOnce()).method("availableSearchConsoleSlaveControllers").will(returnValue(Arrays.asList(new ISearchConsoleSlaveController[] { slaveController.proxy() })));
slaveControllersConfig.expects(atMostOnce()).method("availableSearchFavoritesSlaveControllers").will(returnValue(Arrays.asList(new ISearchFavoritesSlaveController[] { searchFavoritesSlaveController.proxy() })));
}
private void setupViewCustomizations()
{
searchConsoleViewCustomization = mock(ISearchConsoleCustomization.class);
searchFavoritesViewCustomization = mock(ISearchFavoritesViewCustomization.class);
viewCustomizationsConfig = mock(IViewCustomizationConfiguration.class);
viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchConsoleCustomizations").will(returnValue(Arrays.asList(new ISearchConsoleCustomization[]{searchConsoleViewCustomization.proxy()})));
viewCustomizationsConfig.expects(atMostOnce()).method("availableSearchFavoritesCustomizations").will(returnValue((Arrays.asList(new ISearchFavoritesViewCustomization[]{searchFavoritesViewCustomization.proxy()}))));
}
public void testPartOpenedInternalWithUnknownView()
{
wbPartReference.stubs().method("getId").will(returnValue("myid"));
plugin.partOpenedInternal(wbPartReference.proxy());
}
public void testSearchConsoleOpened()
{
wbPartReference.stubs().method("getId").will(returnValue(DiscoveryIntegrationPlugin.SEARCH_CONSOLE_VIEW_ID));
wbPartReference.expects(once()).method("getPart").with(eq(false)).will(returnValue(mock(IWorkbenchPart.class).proxy()));
customizableView.expects(once()).method("registerAction").with(eq(contributedAction.proxy()));
consoleView.expects(once()).method("getProgressMonitor").will(returnValue(mock(IProgressMonitor.class).proxy()));
consoleView.expects(once()).method("setEnvironment").with(isA(IDiscoveryEnvironment.class));
consoleView.expects(once()).method("setDefaultSessionId").with(eq(DefaultSessionIds.mainSearchSessionId));
consoleView.expects(once()).method("initializationCompleted");
consoleView.expects(once()).method("registerController").with(same(consoleController.proxy()));
customizableView.expects(once()).method("registerViewCustomization").with(eq(searchConsoleViewCustomization.proxy()));
customizableView.expects(once()).method("setUiContext").with(isA(IViewUiContext.class));
slaveController.expects(once()).method("setMasterController").with(eq(consoleController.proxy()));
searchConsoleViewCustomization.expects(once()).method("setMasterView").with(eq(masterView.proxy()));
consoleView.expects(once()).method("setDestinationsManager");
plugin.partOpenedInternal(wbPartReference.proxy());
}
public void testSearchFavoritesOpened()
{
searchFavoritesView.expects(once()).method("setEnvironment").with(isA(IDiscoveryEnvironment.class));
searchFavoritesView.expects(once()).method("registerController").with(same(searchFavoritesController.proxy()));
searchFavoritesView.expects(once()).method("initializationCompleted");
wbPartReference.stubs().method("getId").will(returnValue(DiscoveryIntegrationPlugin.SEARCH_FAVORITES_VIEW_ID));
wbPartReference.expects(once()).method("getPart").with(eq(false)).will(returnValue(mock(IWorkbenchPart.class).proxy()));
customizableView.expects(once()).method("registerAction").with(eq(contributedAction.proxy()));
searchFavoritesView.expects(once()).method("getProgressMonitor").will(returnValue(mock(IProgressMonitor.class).proxy()));
customizableView.expects(once()).method("registerViewCustomization").with(eq(searchFavoritesViewCustomization.proxy()));
customizableView.expects(once()).method("setUiContext").with(isA(IViewUiContext.class));
searchFavoritesSlaveController.expects(once()).method("setMasterController").with(eq(searchFavoritesController.proxy()));
searchFavoritesViewCustomization.expects(once()).method("setMasterView").with(eq(masterView.proxy()));
plugin.partOpenedInternal(wbPartReference.proxy());
}
public void testCreateFavoritesPersistenceUtilFavoritesViewNotOpened()
{
assertTrue("Unexpected util instance", plugin.createFavoritesPersistenceUtil() instanceof SearchFavoritesPersistenceUtil);
}
public void testCreateFavoritesPersistenceUtilFavoritesViewOpened() throws WorkbenchException, IOException, MementoContentManagerException
{
testSearchFavoritesOpened();
final IPersistenceUtil util = plugin.createFavoritesPersistenceUtil();
final Set<DestinationItemPair> pairs = new HashSet<DestinationItemPair>();
final Mock<ISearchDestination> searchDestination = mock(ISearchDestination.class);
final Object item = new Object();
pairs.add(new DestinationItemPair(searchDestination.proxy(), item));
searchFavoritesController.expects(once()).method("importData").with(arrayWithSingleElementContraint(pairs.iterator().next()));
util.addItems(pairs, operationRunner.proxy());
final Set<Object> itemsToDelete = new HashSet<Object>(Arrays.asList(new Object[]{item}));
searchFavoritesController.expects(once()).method("deleteItems").with(eq(itemsToDelete));
util.deleteItems(itemsToDelete, operationRunner.proxy());
}
private Constraint arrayWithSingleElementContraint(final Object element)
{
return new Constraint()
{
@Override
public StringBuffer describeTo(StringBuffer buffer)
{
return buffer;
}
@Override
public boolean eval(Object o)
{
if(!(o instanceof Object[]))
{
return false;
}
final Object[] arr = (Object[])o;
return arr.length == 1 && arr[0].equals(element);
}
};
}
private class TestedIntegrationPlugin extends DiscoveryIntegrationPlugin
{
@Override
protected ISearchConsoleController createSearchConsoleController(final ISearchConsoleControllerOutputView view, final ISearchProviderConfiguration searchProviderConfig, IDiscoveryEnvironment environment)
{
assertTrue("Unexpected console view", view == consoleViewOutputController.proxy());
return consoleController.proxy();
}
@Override
protected ISearchFavoritesMasterController createSearchFavoritesController(final ISearchFavoritesControllerOutputView view, final IDiscoveryEnvironment env)
{
assertTrue("Unexpected console view", view == favoritesControllerView.proxy());
return searchFavoritesController.proxy();
}
@Override
protected ISearchConsoleView getBusinessViewFromPart(IWorkbenchPart part)
{
return consoleView.proxy();
}
@Override
protected IDiscoveryView<ISearchFavoritesControllerOutputView, ISearchFavoritesMasterController> getSearchFavoritesViewFromPart(IWorkbenchPart part)
{
return searchFavoritesView.proxy();
}
@Override
protected ISlaveControllersConfiguration slaveControllersConfig()
{
return slaveControllersConfig.proxy();
}
@Override
protected IViewCustomizationConfiguration viewCustomizationsConfig()
{
return viewCustomizationsConfig.proxy();
}
@Override
protected ICustomizableView getCustomizableViewFromPart(IWorkbenchPart part)
{
return customizableView.proxy();
}
@Override
protected IMasterDiscoveryView getMasterViewFromPart(IWorkbenchPart wbPart)
{
return masterView.proxy();
}
@Override
protected ILongOperationRunner longOperationRunner(IProgressMonitor monitor)
{
return operationRunner.proxy();
}
@Override
protected void partOpenedInternal(IWorkbenchPartReference partRef)
{
super.partOpenedInternal(partRef);
}
}
}