1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 07:05:24 +02:00

launch bar: per target provider and test fixes

- fixed tests and added tests for previous API changes
- fixed unsafe call of provider methods without catching exceptions
- added description of priority attribute in the extension point API
- fixed default return values in DefaultLaunchConfigProvider, in case it
is extended
- removed unused import
- fixed per target provider to support persistance
- added test for per target provider

Change-Id: If08b18b939e86757108a800d1092a62621a8c7d0
This commit is contained in:
Alena Laskavaia 2015-05-27 15:13:00 -04:00
parent 652500b200
commit b46cc02560
13 changed files with 515 additions and 90 deletions

View file

@ -59,21 +59,24 @@
<attribute name="id" type="string" use="required">
<annotation>
<documentation>
Global descriptor type id. I.e. com.example.mytype
</documentation>
</annotation>
</attribute>
<attribute name="priority" type="string" use="required">
<annotation>
<documentation>
Priority of the descriptor, values from 1 to 100.
Lower values represent lower priority.
I.e. descriptor with priority 10 will override
descriptor with priority 5. Priority 0 is reserved for default descriptor.
</documentation>
</annotation>
</attribute>
<attribute name="class" type="string" use="required">
<annotation>
<documentation>
Class that implements ILaunchDescriptorType
</documentation>
<appinfo>
<meta.attribute kind="java" basedOn=":org.eclipse.launchbar.core.ILaunchDescriptorType"/>
@ -93,7 +96,7 @@
<attribute name="descriptorType" type="string" use="required">
<annotation>
<documentation>
Id of the descriptor type defined in descriptorType element (can be from another extension)
</documentation>
<appinfo>
<meta.attribute kind="identifier" basedOn="org.eclipse.launchbar.core.launchBarContributions/descriptorType/@id"/>
@ -103,14 +106,17 @@
<attribute name="priority" type="string" use="required">
<annotation>
<documentation>
Priority of the provider, values from 1 to 100.
Lower values represent lower priority.
I.e. provider with priority 10 will be checked before
provider with priority 5. Priority 0 is reserved for default provider.
</documentation>
</annotation>
</attribute>
<attribute name="class" type="string" use="required">
<annotation>
<documentation>
Class that implements ILaunchConfigurationProvider
</documentation>
<appinfo>
<meta.attribute kind="java" basedOn=":org.eclipse.launchbar.core.ILaunchConfigurationProvider"/>

View file

@ -12,10 +12,17 @@ import org.eclipse.remote.core.IRemoteConnection;
*/
public class DefaultLaunchConfigProvider implements ILaunchConfigurationProvider {
/**
* Only support local connection. Override to support different types of connection.
*/
@Override
public boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
// Only supports Local connection
return target.getConnectionType().getId().equals("org.eclipse.remote.LocalServices"); //$NON-NLS-1$
if (target != null && target.getConnectionType().getId().equals("org.eclipse.remote.LocalServices")) { //$NON-NLS-1$
return true;
} else {
return false;
}
}
@Override
@ -30,6 +37,10 @@ public class DefaultLaunchConfigProvider implements ILaunchConfigurationProvider
return descriptor.getAdapter(ILaunchConfiguration.class);
}
/**
* If you do override this method and return true you would have to make sure you add launch object which matches
* this configuration, otherwise it will not be visible
*/
@Override
public boolean ownsLaunchConfiguration(ILaunchConfiguration configuration) throws CoreException {
// return false so that the config is added as a launch object
@ -38,8 +49,8 @@ public class DefaultLaunchConfigProvider implements ILaunchConfigurationProvider
@Override
public boolean launchConfigurationRemoved(ILaunchConfiguration configuration) throws CoreException {
// catch any left over configs
return true;
// by contract we return true if we own or use to own configuration
return ownsLaunchConfiguration(configuration);
}
@Override
@ -54,13 +65,13 @@ public class DefaultLaunchConfigProvider implements ILaunchConfigurationProvider
@Override
public boolean launchConfigurationAdded(ILaunchConfiguration configuration) throws CoreException {
// catch any left over configs
return true;
// by contract we return true if we own configuration
return ownsLaunchConfiguration(configuration);
}
@Override
public boolean launchConfigurationChanged(ILaunchConfiguration configuration) throws CoreException {
// catch any left over configs
return true;
// by contract we return true if we own configuration
return ownsLaunchConfiguration(configuration);
}
}

View file

@ -23,7 +23,6 @@ import org.eclipse.remote.core.IRemoteConnection;
* subclasses instead of implementing this directly.
*/
public interface ILaunchConfigurationProvider {
/**
* Does this config provider provide launch configurations for the combination
* of descriptor and target.
@ -33,7 +32,7 @@ public interface ILaunchConfigurationProvider {
*
* @param descriptor
* @param target
* @return
* @return true if target is supported, false otherwise.
*/
boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException;

View file

@ -1,6 +1,9 @@
package org.eclipse.launchbar.core;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
@ -13,30 +16,90 @@ import org.eclipse.remote.core.IRemoteConnectionType;
import org.eclipse.remote.core.IRemoteServicesManager;
public abstract class PerTargetLaunchConfigProvider extends AbstractLaunchConfigProvider {
public static final String ATTR_CONNECTION_TYPE = "connectionType"; //$NON-NLS-1$
public static final String ATTR_CONNECTION_NAME = "connectionName"; //$NON-NLS-1$
public final String ATTR_CONNECTION_TYPE = getConnectionTypeAttribute();
public final String ATTR_CONNECTION_NAME = getConnectionNameAttribute();
private final Map<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>> configMap = new HashMap<>();
private final Collection<ILaunchConfiguration> ownedConfigs = new LinkedHashSet<>();
protected String getConnectionNameAttribute() {
return "org.eclipse.launchbar.core.connectionName";//$NON-NLS-1$
}
protected String getConnectionTypeAttribute() {
return "org.eclipse.launchbar.core.connectionType";//$NON-NLS-1$
}
@Override
public ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target)
throws CoreException {
Map<IRemoteConnection, ILaunchConfiguration> targetMap = configMap.get(descriptor);
if (targetMap != null) {
ILaunchConfiguration config = targetMap.get(target);
if (config != null) {
return config;
}
Map<IRemoteConnection, ILaunchConfiguration> targetMap = getTargetMap(descriptor);
ILaunchConfiguration config = targetMap.get(target);
if (config != null) {
return config;
}
// first search for owned configurations, to see if any match to descriptor
config = findLaunchConfiguration(descriptor, target);
if (config == null) {
config = createLaunchConfiguration(descriptor, target);
launchConfigurationAdded(config);
}
targetMap.put(target, config);
return config;
}
ILaunchConfiguration config = createLaunchConfiguration(descriptor, target);
protected Map<IRemoteConnection, ILaunchConfiguration> getTargetMap(ILaunchDescriptor descriptor) {
Map<IRemoteConnection, ILaunchConfiguration> targetMap = configMap.get(descriptor);
if (targetMap == null) {
targetMap = new HashMap<>();
configMap.put(descriptor, targetMap);
}
targetMap.put(target, config);
return config;
return targetMap;
}
protected ILaunchConfiguration findLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target)
throws CoreException {
for (ILaunchConfiguration configuration : ownedConfigs) {
if (descriptorAndTargetMatchesConfiguration(descriptor, target, configuration)) {
return configuration;
}
}
return null;
}
protected boolean descriptorAndTargetMatchesConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
ILaunchConfiguration configuration) {
if (targetMatchesConfiguration(target, configuration) == false)
return false;
if (descriptorMatchesConfiguration(descriptor, configuration) == false)
return false;
return true;
}
/**
* This method should be overridden to check that configuration does actually represent the descriptor.
* You don't need to check ownership since this method will be only called on owned configurations
*/
protected boolean descriptorMatchesConfiguration(ILaunchDescriptor descriptor, ILaunchConfiguration configuration) {
// we using startsWith instead of equals because new configuration using "generateLaunchConfigurationName" method which
// means only prefix guaranteed to be matching, and the prefix is the descriptor name
return configuration.getName().startsWith(descriptor.getName());
}
protected boolean targetMatchesConfiguration(IRemoteConnection target, ILaunchConfiguration configuration) {
String targetName;
try {
targetName = configuration.getAttribute(ATTR_CONNECTION_NAME, "");
} catch (CoreException e) {
return false;
}
if (target != null && target.getName().equals(targetName)) {
return true;
} else if (target == null && (targetName == null || targetName.isEmpty())) {
return true;
} else {
return false;
}
}
@Override
@ -47,66 +110,104 @@ public abstract class PerTargetLaunchConfigProvider extends AbstractLaunchConfig
workingCopy.setAttribute(ATTR_CONNECTION_NAME, target.getName());
}
public static IRemoteConnection getTarget(ILaunchConfiguration configuration) throws CoreException {
public IRemoteConnection getTarget(ILaunchConfiguration configuration) throws CoreException {
IRemoteServicesManager remoteManager = Activator.getService(IRemoteServicesManager.class);
String connectionTypeId = configuration.getAttribute(ATTR_CONNECTION_TYPE, ""); //$NON-NLS-1$
if (connectionTypeId.isEmpty()) {
return null;
}
IRemoteConnectionType connectionType = remoteManager.getConnectionType(connectionTypeId);
if (connectionType == null) {
return null;
}
String connectionName = configuration.getAttribute(ATTR_CONNECTION_NAME, ""); //$NON-NLS-1$
if (connectionName.isEmpty()) {
return null;
}
return connectionType.getConnection(connectionName);
}
@Override
public boolean ownsLaunchConfiguration(ILaunchConfiguration configuration) throws CoreException {
return ownedConfigs.contains(configuration);
}
public boolean ownsLaunchConfigurationByAttributes(ILaunchConfiguration configuration) {
try {
return super.ownsLaunchConfiguration(configuration);
} catch (CoreException e) {
// will happened if called after LC is deleted
return false;
}
}
@Override
public boolean launchConfigurationRemoved(ILaunchConfiguration configuration) throws CoreException {
for (Entry<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>> descEntry : configMap.entrySet()) {
for (Entry<IRemoteConnection, ILaunchConfiguration> targetEntry : descEntry.getValue().entrySet()) {
if (targetEntry.getValue().equals(configuration)) {
descEntry.getValue().remove(targetEntry.getKey());
if (descEntry.getValue().isEmpty()) {
configMap.remove(descEntry.getKey());
boolean owned = ownsLaunchConfiguration(configuration);
if (owned) {
ownedConfigs.remove(configuration);
for (Entry<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>> descEntry : configMap.entrySet()) {
for (Entry<IRemoteConnection, ILaunchConfiguration> targetEntry : descEntry.getValue().entrySet()) {
if (targetEntry.getValue().equals(configuration)) {
descEntry.getValue().remove(targetEntry.getKey());
if (descEntry.getValue().isEmpty()) {
configMap.remove(descEntry.getKey());
}
return true;
}
return true;
}
}
}
return false;
return owned;
}
@Override
public boolean launchConfigurationAdded(ILaunchConfiguration configuration) throws CoreException {
// TODO re-create map
if (ownsLaunchConfigurationByAttributes(configuration)) {
ownedConfigs.add(configuration);
return true;
}
return false;
}
@Override
public boolean launchConfigurationChanged(ILaunchConfiguration configuration) throws CoreException {
if (ownsLaunchConfigurationByAttributes(configuration)) {
// clear cache, target could have changed
launchConfigurationRemoved(configuration);
ownedConfigs.add(configuration);
return true;
} else if (ownedConfigs.contains(configuration)) {
// user did something that will cause us to loose ownership of this configuration
launchConfigurationRemoved(configuration);
}
return false;
}
@Override
public void launchDescriptorRemoved(ILaunchDescriptor descriptor) throws CoreException {
configMap.remove(descriptor);
Map<IRemoteConnection, ILaunchConfiguration> map = configMap.remove(descriptor);
if (map == null)
return;
for (ILaunchConfiguration config : map.values()) {
ownedConfigs.remove(config);
config.delete(); // remove all auto-configs associated with descriptor
}
}
@Override
public void launchTargetRemoved(IRemoteConnection target) throws CoreException {
for (Entry<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>> descEntry : configMap.entrySet()) {
descEntry.getValue().remove(target);
if (descEntry.getValue().isEmpty()) {
configMap.remove(descEntry.getKey());
for (Iterator<Entry<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>>> iterator = configMap.entrySet()
.iterator(); iterator.hasNext();) {
Entry<ILaunchDescriptor, Map<IRemoteConnection, ILaunchConfiguration>> descEntry = iterator.next();
Map<IRemoteConnection, ILaunchConfiguration> map = descEntry.getValue();
ILaunchConfiguration config = map.remove(target);
if (config != null) {
config.delete(); // remove all auto-configs associated with target
}
if (map.isEmpty()) {
iterator.remove();
}
}
}
}

View file

@ -13,21 +13,44 @@ package org.eclipse.launchbar.core;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.remote.core.IRemoteConnection;
public abstract class ProjectPerTargetLaunchConfigProvider extends PerTargetLaunchConfigProvider {
@Override
public boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
return descriptor.getAdapter(IProject.class) != null;
return (descriptor.getAdapter(IProject.class) != null);
}
@Override
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
protected boolean descriptorMatchesConfiguration(ILaunchDescriptor descriptor, ILaunchConfiguration configuration) {
IProject project = descriptor.getAdapter(IProject.class);
if (project == null || configuration == null)
return false;
return (project.equals(getProject(configuration)));
}
protected IProject getProject(ILaunchConfiguration configuration) {
IResource[] mappedResources = null;
try {
mappedResources = configuration.getMappedResources();
} catch (CoreException e) {
return null;
}
if (mappedResources == null)
return null;
for (IResource resource : mappedResources) {
if (resource instanceof IProject)
return (IProject) resource;
}
return null;
}
@Override
protected void populateLaunchConfiguration(ILaunchDescriptor descriptor, IRemoteConnection target,
ILaunchConfigurationWorkingCopy workingCopy) throws CoreException {
super.populateLaunchConfiguration(descriptor, target, workingCopy);
// Add our project to the mapped resources
IProject project = descriptor.getAdapter(IProject.class);
IResource[] mappedResources = workingCopy.getMappedResources();
@ -40,5 +63,4 @@ public abstract class ProjectPerTargetLaunchConfigProvider extends PerTargetLaun
workingCopy.setMappedResources(newResources);
}
}
}

View file

@ -37,6 +37,7 @@ import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILaunchMode;
import org.eclipse.launchbar.core.ILaunchBarManager;
import org.eclipse.launchbar.core.ILaunchConfigurationProvider;
import org.eclipse.launchbar.core.ILaunchDescriptor;
import org.eclipse.launchbar.core.ILaunchDescriptorType;
import org.eclipse.launchbar.core.ILaunchObjectProvider;
@ -648,8 +649,12 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchConfiguration
boolean supportsTarget(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
String descriptorTypeId = getDescriptorTypeId(descriptor.getType());
for (LaunchConfigProviderInfo provider : configProviders.get(descriptorTypeId)) {
if (provider.getProvider().supports(descriptor, target)) {
return true;
try {
if (provider.getProvider().supports(descriptor, target)) {
return true;
}
} catch (Throwable e) {
Activator.log(e);
}
}
return false;
@ -718,10 +723,19 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchConfiguration
}
String descTypeId = getDescriptorTypeId(descriptor.getType());
for (LaunchConfigProviderInfo provider : configProviders.get(descTypeId)) {
ILaunchConfiguration config = provider.getProvider().getLaunchConfiguration(descriptor, target);
if (config != null) {
return config;
for (LaunchConfigProviderInfo providerInfo : configProviders.get(descTypeId)) {
try {
ILaunchConfigurationProvider provider = providerInfo.getProvider();
// between multiple provider who support this descriptor we need to find one
// that supports this target
if (provider.supports(descriptor, target)) {
ILaunchConfiguration config = provider.getLaunchConfiguration(descriptor, target);
if (config != null) {
return config;
}
}
} catch (Throwable e) {
Activator.log(e);
}
}

View file

@ -27,7 +27,6 @@ import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.PaintEvent;

View file

@ -1,7 +1,7 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Launch Bar Core Tests
Bundle-SymbolicName: org.eclipse.launchbar.core.tests
Bundle-SymbolicName: org.eclipse.launchbar.core.tests;singleton:=true
Bundle-Version: 1.0.0.qualifier
Fragment-Host: org.eclipse.launchbar.core;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7

View file

@ -1,4 +1,5 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
.,\
fragment.xml

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<fragment>
<extension
point="org.eclipse.debug.core.launchConfigurationTypes">
<launchConfigurationType
id="org.eclipse.launchbar.core.tests.lctype1"
modes="run, debug, xxx"
name="Launch Bar Test Launch Configuration"
public="true">
</launchConfigurationType>
</extension>
</fragment>

View file

@ -0,0 +1,259 @@
/*******************************************************************************
* Copyright (c) 2015 QNX Software Systems 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:
* Elena Laskavaia
*******************************************************************************/
package org.eclipse.launchbar.core;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.launchbar.core.internal.Activator;
import org.eclipse.launchbar.core.internal.LaunchBarManager2Test;
import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.remote.core.IRemoteConnectionType;
import org.eclipse.remote.core.IRemoteServicesManager;
import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.JVM)
public class PerTargetLaunchConfigProviderTest {
private IRemoteServicesManager remoteServiceManager;
private IRemoteConnection localTarget;
private String launchName;
private IRemoteConnection otherTarget;
private ILaunchConfigurationType launchConfigType;
private ILaunchDescriptorType descriptorType;
private ILaunchDescriptor descriptor;
private PerTargetLaunchConfigProvider1 provider;
@Before
public void basicSetupOnly() throws CoreException {
remoteServiceManager = spy(Activator.getService(IRemoteServicesManager.class));
localTarget = remoteServiceManager.getLocalConnectionType().getConnections().get(0);
// other mocked remote connections
otherTarget = mock(IRemoteConnection.class);
IRemoteConnectionType rtype = mock(IRemoteConnectionType.class);
doReturn(rtype).when(otherTarget).getConnectionType();
doReturn("otherTargetType").when(rtype).getId();
doReturn("otherTarget").when(otherTarget).getName();
// launch stuff
launchName = "test";
// launch config type
launchConfigType = getLaunchManager().getLaunchConfigurationType("org.eclipse.launchbar.core.tests.lctype1");
// launch descriptor and type
descriptorType = mock(ILaunchDescriptorType.class);
descriptor = mock(ILaunchDescriptor.class);
doReturn(descriptorType).when(descriptor).getType();
doReturn(launchName).when(descriptor).getName();
// configProvider
provider = new PerTargetLaunchConfigProvider1();
}
private ILaunchManager getLaunchManager() {
return DebugPlugin.getDefault().getLaunchManager();
}
@After
public void after() throws CoreException {
ILaunchConfiguration[] launchConfigurations = getLaunchManager().getLaunchConfigurations();
for (ILaunchConfiguration lc : launchConfigurations) {
lc.delete();
}
}
public class PerTargetLaunchConfigProvider1 extends PerTargetLaunchConfigProvider {
@Override
public boolean supports(ILaunchDescriptor descriptor, IRemoteConnection target) throws CoreException {
return true;
}
@Override
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, IRemoteConnection target)
throws CoreException {
return launchConfigType;
}
};
@Test
public void testPopulateLaunchConfiguration() throws CoreException {
ILaunchConfiguration launchConfig = launchConfigType.newInstance(null, launchName).doSave();
ILaunchConfigurationWorkingCopy launchConfigWC = launchConfig.getWorkingCopy();
provider.populateLaunchConfiguration(descriptor, localTarget, launchConfigWC);
//assertEquals(launchConfig.getName(), launchConfigWC.getAttribute(LaunchBarManager2Test.ATTR_ORIGINAL_NAME, ""));
//assertEquals(provider.getClass().getName(), launchConfigWC.getAttribute(LaunchBarManager2Test.ATTR_PROVIDER_CLASS, ""));
assertTrue(provider.ownsLaunchConfigurationByAttributes(launchConfigWC));
}
@Test
public void testOwnsLaunchConfiguration() throws CoreException {
ILaunchConfiguration launchConfig = launchConfigType.newInstance(null, launchName).doSave();
assertFalse(provider.ownsLaunchConfiguration(launchConfig));
ILaunchConfiguration launchConfiguration = provider.getLaunchConfiguration(descriptor, localTarget);
assertTrue(provider.ownsLaunchConfiguration(launchConfiguration));
}
@Test
public void testGetLaunchConfiguration() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, otherTarget);
assertNotNull(launchConfiguration1);
assertNotNull(launchConfiguration2);
assertNotEquals(launchConfiguration1, launchConfiguration2);
}
@Test
public void testGetLaunchConfigurationReuse() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertSame(launchConfiguration1, launchConfiguration2);
}
@Test
public void testGetLaunchConfigurationPersistance() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
// reset provider
provider = new PerTargetLaunchConfigProvider1();
provider.launchConfigurationAdded(launchConfiguration1); // simulate provider initialization on startup
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertEquals(launchConfiguration1, launchConfiguration2);
}
@Test
public void testGetTarget() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
assertSame(localTarget, provider.getTarget(launchConfiguration1));
}
@Test
public void testLaunchConfigurationRemoved() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
provider.launchConfigurationRemoved(launchConfiguration1);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertNotEquals(launchConfiguration1, launchConfiguration2);
}
@Test
public void testLaunchConfigurationChanged_NotReallyChanged() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
provider.launchConfigurationChanged(launchConfiguration1);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertSame(launchConfiguration1, launchConfiguration2);
}
@Test
public void testLaunchConfigurationChanged_Target() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
ILaunchConfigurationWorkingCopy wc = launchConfiguration1.getWorkingCopy();
wc.setAttribute(provider.getConnectionNameAttribute(), otherTarget.getName());
wc.doSave();
provider.launchConfigurationChanged(launchConfiguration1);
//provider.launchConfigurationChanged(lc3);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertNotEquals(launchConfiguration1, launchConfiguration2);
}
@Test
public void testLaunchConfigurationChanged_OrgName() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
ILaunchConfigurationWorkingCopy wc = launchConfiguration1.getWorkingCopy();
wc.setAttribute(LaunchBarManager2Test.ATTR_ORIGINAL_NAME, "bla");
wc.doSave();
provider.launchConfigurationChanged(launchConfiguration1);
// we should have lost ownership
assertFalse(provider.ownsLaunchConfiguration(launchConfiguration1));
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
assertNotEquals(launchConfiguration1, launchConfiguration2);
}
@Test
public void testLaunchDescriptorRemoved() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration1);
provider.launchDescriptorRemoved(descriptor);
assertEquals(0, provider.getTargetMap(descriptor).size());
assertFalse(provider.ownsLaunchConfiguration(launchConfiguration1));
assertFalse(launchConfiguration1.exists());
}
@Test
public void testLaunchDescriptorRemoved2() throws CoreException {
provider.launchDescriptorRemoved(descriptor);
assertEquals(0, provider.getTargetMap(descriptor).size());
}
@Test
public void testLaunchTargetRemoved() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, otherTarget);
assertNotNull(launchConfiguration1);
provider.launchTargetRemoved(otherTarget);
assertEquals(0, provider.getTargetMap(descriptor).size());
assertFalse(launchConfiguration1.exists());
}
@Test
public void testLaunchTargetRemoved2() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, otherTarget);
assertNotNull(launchConfiguration1);
ILaunchConfiguration launchConfiguration2 = provider.getLaunchConfiguration(descriptor, localTarget);
assertNotNull(launchConfiguration2);
provider.launchTargetRemoved(otherTarget);
assertEquals(1, provider.getTargetMap(descriptor).size());
assertFalse(launchConfiguration1.exists());
assertTrue(launchConfiguration2.exists());
}
@Test
public void testLaunchTargetRemoved3() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, otherTarget);
assertNotNull(launchConfiguration1);
provider.launchTargetRemoved(localTarget);
assertEquals(1, provider.getTargetMap(descriptor).size());
}
@Test
public void testLCRemoved() throws CoreException {
ILaunchConfiguration launchConfiguration1 = provider.getLaunchConfiguration(descriptor, otherTarget);
assertNotNull(launchConfiguration1);
assertTrue(provider.ownsLaunchConfiguration(launchConfiguration1));
launchConfiguration1.delete();
assertTrue(provider.ownsLaunchConfiguration(launchConfiguration1));
provider.launchConfigurationRemoved(launchConfiguration1);
assertFalse(provider.ownsLaunchConfiguration(launchConfiguration1));
}
}

View file

@ -16,6 +16,7 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
@ -45,7 +46,6 @@ import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
@ -66,7 +66,7 @@ import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@SuppressWarnings({"restriction", "nls"})
@SuppressWarnings({ "restriction", "nls" })
@FixMethodOrder(MethodSorters.JVM)
public class LaunchBarManager2Test {
private LaunchBarManager manager;
@ -121,14 +121,16 @@ public class LaunchBarManager2Test {
basicSetup();
}
protected void mockProviderElement(String descriptorTypeId, int priority, ILaunchConfigurationProvider provider) throws CoreException {
protected void mockProviderElement(String descriptorTypeId, int priority, ILaunchConfigurationProvider provider)
throws CoreException {
IConfigurationElement element = mockElementAndAdd("configProvider");
doReturn(descriptorTypeId).when(element).getAttribute("descriptorType");
doReturn(Integer.toString(priority)).when(element).getAttribute("priority");
doReturn(provider).when(element).createExecutableExtension("class");
}
protected ILaunchConfigurationProvider mockProviderElement(String descriptorTypeId, int priority, ILaunchDescriptor descriptor, IRemoteConnection target,
protected ILaunchConfigurationProvider mockProviderElement(String descriptorTypeId, int priority, ILaunchDescriptor descriptor,
IRemoteConnection target,
ILaunchConfiguration config, Object launchObj) throws CoreException {
ILaunchConfigurationProvider provider = mock(ILaunchConfigurationProvider.class);
mockProviderElement(descriptorTypeId, priority, provider);
@ -139,7 +141,8 @@ public class LaunchBarManager2Test {
return provider;
}
protected IConfigurationElement mockDescriptorTypeElement(String descriptorTypeId, int priority, ILaunchDescriptorType descriptorType)
protected IConfigurationElement mockDescriptorTypeElement(String descriptorTypeId, int priority,
ILaunchDescriptorType descriptorType)
throws CoreException {
IConfigurationElement element = mockElementAndAdd("descriptorType");
doReturn(descriptorTypeId).when(element).getAttribute("id");
@ -171,7 +174,8 @@ public class LaunchBarManager2Test {
ILaunchConfiguration lc = mock(ILaunchConfiguration.class);
doReturn(string).when(lc).getName();
doReturn(lctype2).when(lc).getType();
doReturn("").when(lc).getAttribute(eq(ORIGINAL_NAME), eq(""));
doReturn("").when(lc).getAttribute(eq(ATTR_ORIGINAL_NAME), eq(""));
doReturn("").when(lc).getAttribute(eq(ATTR_PROVIDER_CLASS), eq(""));
return lc;
}
@ -280,9 +284,7 @@ public class LaunchBarManager2Test {
doReturn(descriptor).when(descriptorType).getDescriptor(launchObject);
// configProvider
provider = mockProviderElement(descriptorTypeId, 10, descriptor, otherTarget, launchConfig, launchObject);
mockLaunchObjectOnDescriptor(launchObject);
// default descriptor
String defaultDescTypeId = "defaultDescType";
mockDescriptorTypeElement(defaultDescTypeId, 0, new DefaultLaunchDescriptorType());
@ -543,9 +545,9 @@ public class LaunchBarManager2Test {
return "pbtype";
}
}
public static final String ATTR_ORIGINAL_NAME = org.eclipse.launchbar.core.internal.Activator.PLUGIN_ID + ".originalName"; //$NON-NLS-1$
public static final String ATTR_PROVIDER_CLASS = org.eclipse.launchbar.core.internal.Activator.PLUGIN_ID + ".providerClass"; //$NON-NLS-1$
String ORIGINAL_NAME = org.eclipse.launchbar.core.internal.Activator.PLUGIN_ID + ".originalName";
String PROJECT_CONFIG = org.eclipse.launchbar.core.internal.Activator.PLUGIN_ID + ".projectConfig";
protected void projectMappingSetup() throws CoreException {
descriptorType = new ProjectBasedLaunchDescriptorType();
descriptorTypeId = ((ProjectBasedLaunchDescriptorType) descriptorType).getId();
@ -555,8 +557,7 @@ public class LaunchBarManager2Test {
mockDescriptorTypeElement(descriptorTypeId, 10, descriptorType);
//lc = provider.createLaunchConfiguration(lman, descType.getDescriptor(aaa));
mockLCProject(launchConfig, aaa);
mockLCAttribute(launchConfig, ORIGINAL_NAME, aaa.getName());
mockLCAttribute(launchConfig, PROJECT_CONFIG, true);
mockLCAttribute(launchConfig, ATTR_ORIGINAL_NAME, aaa.getName());
assertEquals(0, manager.getLaunchDescriptors().length);
provider = new ProjectPerTargetLaunchConfigProvider() {
@Override
@ -571,6 +572,7 @@ public class LaunchBarManager2Test {
}
};
mockProviderElement(descriptorTypeId, 10, provider);
mockLCAttribute(launchConfig, ATTR_PROVIDER_CLASS, provider.getClass().getName());
init();
}
@ -793,7 +795,7 @@ public class LaunchBarManager2Test {
@Test
public void testGetActiveLaunchModeFromDescActive() throws CoreException {
globalmodes.clear();
ILaunchMode mode = mockLaunchModes(launchConfigType, "foo","run")[0];
ILaunchMode mode = mockLaunchModes(launchConfigType, "foo", "run")[0];
manager.launchObjectAdded(launchObject);
manager.setActiveLaunchDescriptor(descriptor);
manager.setActiveLaunchMode(mode);
@ -902,30 +904,26 @@ public class LaunchBarManager2Test {
public void testLaunchConfigurationAddedBad() throws CoreException {
doThrow(new NullPointerException()).when(provider).ownsLaunchConfiguration(any(ILaunchConfiguration.class));
manager.launchConfigurationAdded(launchConfig);
verify(provider).launchConfigurationAdded(launchConfig);
verify(provider).ownsLaunchConfiguration(launchConfig);
}
@Test
public void testLaunchConfigurationRemoved_fails() throws CoreException {
manager.launchConfigurationRemoved(launchConfig);
try {
verify(provider).launchConfigurationRemoved(launchConfig);
fail();
} catch (Throwable e) {
// temp fail test
}
public void testLaunchConfigurationChanged() throws CoreException {
manager.launchConfigurationChanged(launchConfig);
verify(provider).launchConfigurationChanged(launchConfig);
}
@Test
public void testLaunchConfigurationRemovedBad_fails() throws CoreException {
doThrow(new NullPointerException()).when(provider).launchConfigurationRemoved(any(ILaunchConfiguration.class));
public void testLaunchConfigurationRemoved() throws CoreException {
manager.launchConfigurationRemoved(launchConfig);
try {
verify(provider).launchConfigurationRemoved(launchConfig);
fail();
} catch (Throwable e) {
// temp fail test
}
verify(provider).launchConfigurationRemoved(launchConfig);
}
@Test
public void testLaunchConfigurationRemovedBad() throws CoreException {
doThrow(new NullPointerException()).when(provider).launchConfigurationRemoved(any(ILaunchConfiguration.class));
manager.launchConfigurationRemoved(launchConfig);
verify(provider).launchConfigurationRemoved(launchConfig);
}
}

View file

@ -3,6 +3,7 @@ package org.eclipse.launchbar.core.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
@ -33,7 +34,6 @@ import org.mockito.stubbing.Answer;
@SuppressWarnings("nls")
public class LaunchBarManagerTest {
@Test
public void startupTest() throws Exception {
// Make sure the manager starts up and defaults everything to null
@ -55,6 +55,7 @@ public class LaunchBarManagerTest {
String launchConfigName = "launchConfig";
doReturn(launchConfigName).when(launchConfig).getName();
doReturn(launchConfigName).when(launchConfig).getAttribute(eq("org.eclipse.launchbar.core.originalName"), anyString());
doReturn("").when(launchConfig).getAttribute(eq("org.eclipse.launchbar.core.providerClass"), anyString());
doReturn(true).when(launchConfigType).isPublic();
doReturn(launchConfigType).when(launchConfig).getType();
doReturn("launchConfigType").when(launchConfigType).getIdentifier();