blob: 18fd0d651dee64b57c4c264e7fe85433e0a76e9e [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005, 2008 IBM Corporation 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.tests.runtime.emf.ui;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.common.core.service.IProvider;
import org.eclipse.gmf.runtime.common.core.service.IProviderPolicy;
import org.eclipse.gmf.runtime.common.core.service.ProviderPriority;
import org.eclipse.gmf.runtime.common.core.service.Service;
import org.eclipse.gmf.runtime.emf.type.core.ElementType;
import org.eclipse.gmf.runtime.emf.type.core.edithelper.IEditHelper;
import org.eclipse.gmf.runtime.emf.ui.services.modelingassistant.ModelingAssistantProvider;
import org.eclipse.gmf.runtime.emf.ui.services.modelingassistant.ModelingAssistantService;
import org.eclipse.gmf.tests.runtime.common.core.internal.util.TestingConfigurationElement;
/**
* Tests for the Modeling Assistant Service.
*
* @author cmahoney
*
*/
public class ModelingAssistantServiceTests
extends TestCase {
/**
* Override to make some methods and classes available.
*/
protected static class MyModelingAssistantService
extends ModelingAssistantService {
/**
* Override to allow passing in of the provider, instead of initializing
* via the <code>ConfigurationElement</code>.
*/
protected static class ProviderDescriptor
extends ModelingAssistantService.ProviderDescriptor {
public boolean areActivitiesEnabled = true;
protected ProviderDescriptor(IProvider provider) {
super(new TestingConfigurationElement());
this.provider = provider;
provider.addProviderChangeListener(this);
}
public IProvider getProvider() {
return provider;
}
protected IProviderPolicy getPolicy() {
return null;
}
public boolean provides(IOperation operation) {
return areActivitiesEnabled;
}
public void setActivitiesEnabled(boolean b) {
areActivitiesEnabled = b;
}
}
protected MyModelingAssistantService() {
super();
}
protected void addModelingAssistantProvider(ProviderPriority priority,
ProviderDescriptor provider) {
super.addProvider(priority, provider);
}
protected void removeModelingAssistantProvider(
Service.ProviderDescriptor provider) {
super.removeProvider(provider);
}
}
/**
* A concrete element type class.
*/
public static class MyElementType
extends ElementType {
public MyElementType(String id) {
super(id, null, id);
}
public IEditHelper getEditHelper() {
return null;
}
}
/**
* A dummy modeling assistant provider that takes the list of types to be
* returned.
*/
public class MyModelingAssistantProvider
extends ModelingAssistantProvider {
private List types;
public MyModelingAssistantProvider(List types) {
super();
this.types = types;
}
public List getTypesForPopupBar(IAdaptable host) {
return types;
}
}
private static boolean shouldBeContributed = false;
public static boolean myStaticMethod() {
return shouldBeContributed;
}
public static class MyModelingAssistantProviderViaXML
extends ModelingAssistantProvider {
public List getTypesForPopupBar(IAdaptable host) {
if (host.getAdapter(MyElementType.class) != null) {
return Collections.singletonList(new MyElementType("TYPE1")); //$NON-NLS-1$
} else {
return Collections.EMPTY_LIST;
}
}
}
private MyModelingAssistantService modelingAssistantService = null;
public ModelingAssistantServiceTests(String name) {
super(name);
}
public static void main(String[] args) {
TestRunner.run(suite());
}
public static Test suite() {
return new TestSuite(ModelingAssistantServiceTests.class);
}
protected void setUp()
throws Exception {
super.setUp();
setModelingAssistantService(new MyModelingAssistantService());
}
public MyModelingAssistantService getModelingAssistantService() {
return modelingAssistantService;
}
public void setModelingAssistantService(MyModelingAssistantService service) {
modelingAssistantService = service;
}
/**
* Tests that the UI contributions made by a provider affected by a
* capability will be shown/hidden as the capability is enabled/disabled.
*
* @throws Exception
*/
public void testCapabilityFiltering()
throws Exception {
// set up provider1
MyElementType TYPE1 = new MyElementType("TYPE1"); //$NON-NLS-1$
MyModelingAssistantService.ProviderDescriptor provider1Descriptor = new MyModelingAssistantService.ProviderDescriptor(
new MyModelingAssistantProvider(Collections.singletonList(TYPE1)));
getModelingAssistantService().addModelingAssistantProvider(
ProviderPriority.LOW, provider1Descriptor);
// set up provider2
MyElementType TYPE2 = new MyElementType("TYPE2"); //$NON-NLS-1$
MyModelingAssistantService.ProviderDescriptor provider2Descriptor = new MyModelingAssistantService.ProviderDescriptor(
new MyModelingAssistantProvider(Collections.singletonList(TYPE2)));
getModelingAssistantService().addModelingAssistantProvider(
ProviderPriority.HIGH, provider2Descriptor);
// test service
List allTypes = getModelingAssistantService()
.getTypesForPopupBar(null);
assertEquals(2, allTypes.size());
provider1Descriptor.setActivitiesEnabled(false);
assertEquals(1, getModelingAssistantService()
.getTypesForPopupBar(null).size());
provider1Descriptor.setActivitiesEnabled(true);
List allTypesAgain = getModelingAssistantService()
.getTypesForPopupBar(null);
assertEquals(2, allTypesAgain.size());
assertTrue(Arrays.equals(allTypes.toArray(), allTypesAgain.toArray()));
}
/**
* Tests the ability of a client to use a static method to assist in
* identifying the editor in the extension point XML.This test uses the
* modeling assistant extension point defined in the XML for this plugin.
*
* @throws Exception
*/
//public void testStaticMethodInExtension()
// throws Exception {
// shouldBeContributed = true;
// assertTrue(!ModelingAssistantService.getInstance().getTypesForPopupBar(
// new MyElementType("TYPE1")).isEmpty());
// shouldBeContributed = false;
// assertTrue(ModelingAssistantService.getInstance().getTypesForPopupBar(
// new MyElementType("TYPE1")).isEmpty());
//}
}