blob: 7d0766ef45fd5950487413d6c24ffc6e1924124c [file] [log] [blame]
package org.eclipse.platform.discovery.destprefs.test.unit;
import static org.eclipse.platform.discovery.testutils.utils.matchers.Matchers.arrayEqualsWithoutOrder;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.same;
import static org.mockito.Mockito.verify;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.platform.discovery.destprefs.internal.DestinationsManager;
import org.eclipse.platform.discovery.destprefs.internal.IPreferenceDialogCreator;
import org.eclipse.platform.discovery.destprefs.internal.xpparser.ISearchDestinationsConfiguratorDescription;
import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.SearchProviderConfigurationFactory;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
import org.eclipse.platform.discovery.runtime.internal.xp.impl.AbstractExtensionPointParser;
import org.eclipse.platform.discovery.testutils.utils.registry.ExtensionRegistryBuilder;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class DestinationsManagerTest {
private static final String PREFPAGE_ID = "prefpage_id";
private static final String DEST_CATEGORY_ID = "category";
private DestinationsManager destinationsManager;
@Mock
private AbstractExtensionPointParser<ISearchDestinationsConfiguratorDescription> destConfigurator;
@Mock
private IPreferenceDialogCreator preferenceDialogCreator;
@Mock
private Shell shell;
private ExtensionRegistryBuilder registryBuilder;
private ISearchProviderConfiguration searchConfig;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
registryBuilder = new ExtensionRegistryBuilder();
}
@Test
public void noPreferencePages() {
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
destinationsManager.manageDestinations(shell, null);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
}
@Test
public void onePreferencePageNoSelection() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
destinationsManager.manageDestinations(shell, null);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID, PREFPAGE_ID)));
}
@Test
public void onePreferencePageAndDestCategorySelected() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
destinationsManager.manageDestinations(shell, category);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID, PREFPAGE_ID)));
}
@Test
public void oneDestinationNoPreferencePageAndDestCategorySelected() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
destinationsManager.manageDestinations(shell, category);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
}
@Test
public void oneConfiguratorNoSelection() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
destinationsManager.manageDestinations(shell, null);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
}
@Test
public void oneConfiguratorAndDestCategorySelected() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, null, "foo", null);
registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
destinationsManager.manageDestinations(shell, category);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID)));
}
@Test
public void configuratorTakesPrecedenceOverPrefPage() {
registryBuilder.addDestinationCategory(DEST_CATEGORY_ID, DEST_CATEGORY_ID);
registryBuilder.addDestinationsProvider("destprovider", DEST_CATEGORY_ID, PREFPAGE_ID, "foo", null);
registryBuilder.addSearchDestinationsConfigurator("configurator", "destprovider", "bar", null);
IExtensionRegistry registry = registryBuilder.getRegistry();
init(registry);
IDestinationCategoryDescription category = getCategory(DEST_CATEGORY_ID);
destinationsManager.manageDestinations(shell, category);
verify(preferenceDialogCreator).openPreferenceDialog(same(shell), eq(DestinationsManager.GENERIC_PREFPAGE_ID), argThat(arrayEqualsWithoutOrder(DestinationsManager.GENERIC_PREFPAGE_ID,PREFPAGE_ID)));
}
private IDestinationCategoryDescription getCategory(String destCategoryId) {
for(IDestinationCategoryDescription desc: searchConfig.getDestinationCategories()) {
if(desc.getId().equals(destCategoryId)) {
return desc;
}
}
fail("dest category not found:"+destCategoryId);return null;
}
private void init(IExtensionRegistry registry) {
searchConfig = new SearchProviderConfigurationFactory().getSearchProviderConfiguration(registry);
destinationsManager = new DestinationsManager(new SearchDestinationsConfiguratorXPParser(registry), preferenceDialogCreator, searchConfig);
}
}