blob: 405de5e6ad65bff1b7426b57404459ea9d385f8d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 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.ui.test.comp.internal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import junit.framework.Assert;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.platform.discovery.core.api.ISearchFavoritesMasterController;
import org.eclipse.platform.discovery.core.internal.ContextStructuredSelection;
import org.eclipse.platform.discovery.core.internal.IContextStructuredSelection;
import org.eclipse.platform.discovery.ui.api.ISearchFavoritesViewCustomization;
import org.eclipse.platform.discovery.ui.test.comp.internal.fixture.SearchConsoleTestFixture;
import org.eclipse.platform.discovery.ui.test.comp.internal.pageobjects.SearchFavoritesPageObject;
import org.eclipse.platform.discovery.util.api.env.IDiscoveryEnvironment;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.Transfer;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class SearchFavoritesViewTest
{
private static SearchConsoleTestFixture fixture;
private ISearchFavoritesViewCustomization viewCustomization;
private ITreeContentProvider dragHelperViewerContentProvider;
private ITreeContentProvider favoritesContentProvider;
private ILabelProvider labelProvider;
private Object favoritesItemSource;
private Object firstFavoriteItem;
private Object secondFavoriteItem;
private Object favoritesGroup;
private SearchFavoritesPageObject searchFavorites;
private IDiscoveryEnvironment environment;
@BeforeClass
public static void initFixture()
{
fixture = new SearchConsoleTestFixture();
}
@Before
public void setUp()
{
favoritesItemSource = new String("favoritesItemSource");
firstFavoriteItem = new String("firstFavoriteItem");
secondFavoriteItem = new String("secondFavoriteItem");
favoritesGroup = new String("favoritesGroup");
setupContentProvider();
setupLabelProvider();
setupViewCustomization();
environment = fixture.environment;
searchFavorites = new SearchFavoritesPageObject(viewCustomization, dragHelperViewerContentProvider, environment);
searchFavorites.open();
}
@After
public void tearDown()
{
searchFavorites.close();
}
private void setupLabelProvider()
{
labelProvider = Mockito.mock(ILabelProvider.class);
Mockito.stub(labelProvider.getText(Mockito.any())).toAnswer(new Answer<String>()
{
@Override
public String answer(InvocationOnMock invocation) throws Throwable
{
return invocation.getArguments()[0].toString();
}
});
}
private void setupContentProvider()
{
favoritesContentProvider = Mockito.mock(ITreeContentProvider.class);
Mockito.stub(favoritesContentProvider.getChildren(Mockito.any())).toReturn(new Object[0]);
Mockito.stub(favoritesContentProvider.getParent(Mockito.any())).toReturn(null);
Mockito.stub(favoritesContentProvider.hasChildren(Mockito.any())).toReturn(false);
dragHelperViewerContentProvider = Mockito.mock(ITreeContentProvider.class);
Mockito.stub(dragHelperViewerContentProvider.getChildren(Mockito.any())).toReturn(new Object[0]);
Mockito.stub(dragHelperViewerContentProvider.getParent(Mockito.any())).toReturn(null);
Mockito.stub(dragHelperViewerContentProvider.hasChildren(Mockito.any())).toReturn(false);
Mockito.stub(dragHelperViewerContentProvider.getElements(Mockito.any())).toReturn(new Object[] { firstFavoriteItem, secondFavoriteItem });
}
private void setupViewCustomization()
{
viewCustomization = Mockito.mock(ISearchFavoritesViewCustomization.class);
Mockito.stub(viewCustomization.getContentProvider()).toReturn(favoritesContentProvider);
Mockito.stub(viewCustomization.getLabelProvider()).toReturn(labelProvider);
Mockito.stub(viewCustomization.itemGroup(Mockito.any())).toReturn(favoritesGroup);
Mockito.stub(viewCustomization.itemsFor(Mockito.any())).toAnswer(new Answer<Set<Object>>()
{
@Override
public Set<Object> answer(InvocationOnMock invocation) throws Throwable
{
final Object biSrc = invocation.getArguments()[0];
if (biSrc == favoritesItemSource)
{
return new HashSet<Object>(Arrays.asList(new Object[] { firstFavoriteItem, secondFavoriteItem }));
}
return new HashSet<Object>(Arrays.asList(new Object[] { biSrc }));
}
});
}
@Test
public void testViewIsBusyWhenOpened()
{
Assert.assertTrue("Operation is not running", searchFavorites.isOperationRunning());
searchFavorites.completeInitialization();
Assert.assertFalse("Operation is still running", searchFavorites.isOperationRunning());
}
@Test
public void testDragToFavorites()
{
searchFavorites.registerController(new FavoritesController());
searchFavorites.dragToFavorites(firstFavoriteItem);
Assert.assertTrue("Grouping item not displayed", searchFavorites.isFavoritesRootItemDisplayed(favoritesGroup));
Assert.assertTrue("First favorite item not displayed", searchFavorites.isFavoritesItemDisplayed(firstFavoriteItem, favoritesGroup));
}
@Test
public void testDragFromFavorites()
{
searchFavorites.registerController(new FavoritesController());
final Set<Object> favoritesToShow = new HashSet<Object>();
favoritesToShow.add(firstFavoriteItem);
searchFavorites.showFavorites(favoritesToShow);
final Collection<Object> droppedObjects = new ArrayList<Object>();
searchFavorites.getDragHelper().addDropSupport(DND.DROP_COPY | DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() }, new DropTargetAdapter()
{
@SuppressWarnings("unchecked")
@Override
public void drop(DropTargetEvent event)
{
if (LocalSelectionTransfer.getTransfer().isSupportedType(event.currentDataType))
{
final IStructuredSelection sel = (IStructuredSelection) LocalSelectionTransfer.getTransfer().getSelection();
final Iterator<Object> it = sel.iterator();
while (it.hasNext())
{
droppedObjects.add(it.next());
}
}
}
});
searchFavorites.dragFromFavorites(favoritesGroup, firstFavoriteItem);
Assert.assertEquals("One dropped item expected", 1, droppedObjects.size());
Assert.assertEquals("Unexpected item dropped", firstFavoriteItem, droppedObjects.iterator().next());
}
private class FavoritesController implements ISearchFavoritesMasterController
{
@Override
public IDiscoveryEnvironment getEnvironment()
{
return environment;
}
@Override
public void deleteItems(Set<Object> data)
{
}
@SuppressWarnings("unchecked")
@Override
public void importData(Object data)
{
Assert.assertTrue(data instanceof IContextStructuredSelection);
final ContextStructuredSelection selection = (ContextStructuredSelection) data;
final Set<Object> affectedObjects = new HashSet<Object>();
affectedObjects.addAll(selection.toList());
searchFavorites.showFavorites(affectedObjects);
}
@Override
public boolean isImportPossible(Object data)
{
return true;
}
}
}