blob: ce62534550ae61aa28745d771431b5d52c059ca2 [file] [log] [blame]
package org.eclipse.platform.discovery.destprefs.test.unit;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;
import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
import org.eclipse.platform.discovery.testutils.utils.registry.ExtensionRegistryBuilder;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class SearchConfiguratorsFixture {
public final String CATEGORY_1 = "category_one";
public final String CATEGORY_2 = "category_two";
public final String DEST_PROVIDER_CAT1_1 = "destProviderCat1_1";
public final String DEST_PROVIDER_CAT1_2 = "destProviderCat1_2";
public final String DEST_PROVIDER_CAT2 = "destProviderCat2";
public final String CONFIGURATOR_1_1_ID = "configurator_1_1";
public final String CONFIGURATOR_1_2_ID = "configurator_1_2";
public final String CONFIGURATOR_2_ID = "configurator_2";
public final String CONFIGURATOR_1_1_FQNAME = "org.eclipse.platform.discovery.destprefs.configurator_1_1";
public final String CONFIGURATOR_1_2_FQNAME = "org.eclipse.platform.discovery.destprefs.configurator_1_2";
public final String CONFIGURATOR_2_FQNAME = "org.eclipse.platform.discovery.destprefs.configurator_2";
@Mock
public ISearchDestinationConfigurator<ISearchDestination> configurator_1_1;
@Mock
public ISearchDestinationConfigurator<ISearchDestination> configurator_1_2;
@Mock
public ISearchDestinationConfigurator<ISearchDestination> configurator_2;
@Mock
public ISearchProviderConfiguration searchProviderConfiguration;
@Mock
public IDestinationsProvider destprovider1;
@Mock
public ISearchDestination destination1;
public IDestinationCategoryDescription categoryDesc1;
public IDestinationCategoryDescription categoryDesc2;
public void setup(ExtensionRegistryBuilder registryBuilder) {
MockitoAnnotations.initMocks(this);
setupSearchProviderConfiguration();
setupDestProvider();
registryBuilder.addDestinationCategory(CATEGORY_1, CATEGORY_1);
registryBuilder.addDestinationCategory(CATEGORY_2, CATEGORY_2);
registryBuilder
.addDestinationsProvider(DEST_PROVIDER_CAT1_1, CATEGORY_1, null, "someprovider_1_1", destprovider1);
registryBuilder
.addDestinationsProvider(DEST_PROVIDER_CAT1_2, CATEGORY_1, null, "someprovider_1_2", destprovider1);
registryBuilder.addDestinationsProvider(DEST_PROVIDER_CAT2, CATEGORY_2, null, "someprovider2", destprovider1);
try {
registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_1_ID, DEST_PROVIDER_CAT1_1, CONFIGURATOR_1_1_FQNAME, configurator_1_1);
registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_1_2_ID, DEST_PROVIDER_CAT1_2, CONFIGURATOR_1_2_FQNAME, configurator_1_2);
registryBuilder.addSearchDestinationsConfigurator(CONFIGURATOR_2_ID, DEST_PROVIDER_CAT2, CONFIGURATOR_2_FQNAME, configurator_2);
} catch (CoreException e) {
throw new IllegalStateException(e);
}
}
private void setupDestProvider() {
Set<ISearchDestination> destinations = new HashSet<ISearchDestination>();
destinations.add(destination1);
Mockito.when(destprovider1.getSearchDestinations()).thenReturn(destinations);
}
private void setupSearchProviderConfiguration() {
final List<IDestinationCategoryDescription> allDestinationCategories = destinationCategories();
Mockito.stub(searchProviderConfiguration.getDestinationCategories()).toReturn(allDestinationCategories);
Mockito.when(searchProviderConfiguration.getDestinationProvidersForCategory(Mockito.any(IDestinationCategoryDescription.class))).thenAnswer(
new Answer<List<IDestinationsProviderDescription>>() {
@Override
public List<IDestinationsProviderDescription> answer(InvocationOnMock invocation) throws Throwable {
final List<IDestinationsProviderDescription> result = new ArrayList<IDestinationsProviderDescription>();
final IDestinationCategoryDescription category = (IDestinationCategoryDescription) invocation.getArguments()[0];
if (category.getId().equals(CATEGORY_1)) {
result.add(destinationProvider(DEST_PROVIDER_CAT1_1));
result.add(destinationProvider(DEST_PROVIDER_CAT1_2));
} else if (category.getId().equals(CATEGORY_2)) {
result.add(destinationProvider(DEST_PROVIDER_CAT2));
}
return result;
}
});
}
private IDestinationsProviderDescription destinationProvider(final String destProviderId) {
final IDestinationsProviderDescription provider = Mockito.mock(IDestinationsProviderDescription.class);
Mockito.stub(provider.getId()).toReturn(destProviderId);
return provider;
}
private List<IDestinationCategoryDescription> destinationCategories() {
final List<IDestinationCategoryDescription> result = new ArrayList<IDestinationCategoryDescription>();
categoryDesc1 = mockDestinationCategory(CATEGORY_1);
categoryDesc2 = mockDestinationCategory(CATEGORY_2);
result.add(categoryDesc1);
result.add(categoryDesc2);
return result;
}
private IDestinationCategoryDescription mockDestinationCategory(final String categoryId) {
final IDestinationCategoryDescription category = Mockito.mock(IDestinationCategoryDescription.class);
Mockito.stub(category.getId()).toReturn(categoryId);
return category;
}
}