blob: b79a460c21c43ecd3a4705fa7de16b6a7949fa9e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2012 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.debug.tests.launching;
import java.util.Arrays;
import java.util.HashSet;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchDelegate;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.debug.core.sourcelookup.ISourcePathComputer;
import org.eclipse.jdt.debug.testplugin.AlternateDelegate;
import org.eclipse.jdt.debug.testplugin.launching.TestLaunchDelegate1;
import org.eclipse.jdt.debug.testplugin.launching.TestLaunchDelegate2;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
/**
* Tests for launch delegates
*/
public class LaunchDelegateTests extends AbstractDebugTest {
/**
* Constructor
* @param name
*/
public LaunchDelegateTests(String name) {
super(name);
}
/**
* Ensures a launch delegate can provide a launch object for
* a launch.
* @throws CoreException
*/
public void testProvideLaunch() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType configurationType = manager.getLaunchConfigurationType("org.eclipse.jdt.debug.tests.testConfigType"); //$NON-NLS-1$
assertNotNull("Missing test launch config type", configurationType); //$NON-NLS-1$
ILaunchConfigurationWorkingCopy workingCopy = configurationType.newInstance(null, "provide-launch-object"); //$NON-NLS-1$
// delegate will throw exception if test fails
ILaunch launch = workingCopy.launch(ILaunchManager.DEBUG_MODE, null);
manager.removeLaunch(launch);
}
/**
* Tests that a delegate extension can provide the source path computer.
*/
public void testSourcePathComputerExtension() {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType configurationType = manager.getLaunchConfigurationType("org.eclipse.jdt.debug.tests.testConfigType"); //$NON-NLS-1$
assertNotNull("Missing test launch config type", configurationType); //$NON-NLS-1$
ISourcePathComputer sourcePathComputer = configurationType.getSourcePathComputer();
assertEquals("Wrong source path computer", "org.eclipse.jdt.debug.tests.testSourcePathComputer", sourcePathComputer.getId()); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Tests that a delegate extension can provide the source locator.
*/
public void testSourceLocatorExtension() {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType configurationType = manager.getLaunchConfigurationType("org.eclipse.jdt.debug.tests.testConfigType"); //$NON-NLS-1$
assertNotNull("Missing test launch config type", configurationType); //$NON-NLS-1$
String sourceLocatorId = configurationType.getSourceLocatorId();
assertEquals("Wrong source locater id", "org.eclipse.jdt.debug.tests.testSourceLocator", sourceLocatorId); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Test launch delegate for mixed launch mode.
* @throws CoreException
*/
public void testMixedModeDelegate() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
HashSet<String> modes = new HashSet<>();
modes.add("alternate"); //$NON-NLS-1$
modes.add(ILaunchManager.DEBUG_MODE);
assertTrue("Should support mixed mode (alternate/debug)", type.supportsModeCombination(modes)); //$NON-NLS-1$
ILaunchDelegate[] delegates = type.getDelegates(modes);
assertTrue("missing delegate", delegates.length > 0); //$NON-NLS-1$
assertEquals("Wrong number of delegates", 1, delegates.length); //$NON-NLS-1$
assertTrue("Wrong delegate", delegates[0].getDelegate() instanceof AlternateDelegate); //$NON-NLS-1$
}
/**
* Tests if the java launch delegate was found as one of the delegates for debug mode.
* @throws CoreException
*/
public void testSingleDebugModeDelegate() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
HashSet<String> modes = new HashSet<>();
modes.add(ILaunchManager.DEBUG_MODE);
assertTrue("Should support mode (debug)", type.supportsModeCombination(modes)); //$NON-NLS-1$
ILaunchDelegate[] delegates = type.getDelegates(modes);
assertTrue("missing delegate", delegates.length > 0); //$NON-NLS-1$
boolean found = false;
for(int i = 0; i < delegates.length; i++) {
if(delegates[i].getDelegate().getClass().getName().endsWith("JavaLaunchDelegate")) { //$NON-NLS-1$
found = true;
break;
}
}
assertTrue("The java launch delegate was not one of the returned delegates", found); //$NON-NLS-1$
}
/**
* Tests correct delegate is found for alternate mode.
* @throws CoreException
*/
public void testSingleAlternateModeDelegate() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
HashSet<String> modes = new HashSet<>();
modes.add("alternate"); //$NON-NLS-1$
assertTrue("Should support mode (alternate)", type.supportsModeCombination(modes)); //$NON-NLS-1$
ILaunchDelegate[] delegates = type.getDelegates(modes);
assertTrue("missing delegate", delegates.length > 0); //$NON-NLS-1$
assertEquals("Wrong number of delegates", 1, delegates.length); //$NON-NLS-1$
assertTrue("Wrong delegate", delegates[0].getDelegate() instanceof AlternateDelegate); //$NON-NLS-1$
}
/**
* Checks that the delegate definition is collecting and parsing mode combination information properly from both the delegate
* contribution and from modeCombination child elements
* @throws CoreException
*/
public void testMultipleModeSingleDelegate() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
String[][] modesavail = {{"alternate"}, {"debug", "alternate"}, {"debug", "alternate2"}}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
HashSet<String> modes = null;
for(int i = 0; i < modesavail.length; i++) {
modes = new HashSet<>(Arrays.asList(modesavail[i]));
assertTrue("Should support modes "+modes.toString(), type.supportsModeCombination(modes)); //$NON-NLS-1$
ILaunchDelegate[] delegates = type.getDelegates(modes);
assertTrue("missing delegate", delegates.length > 0); //$NON-NLS-1$
assertEquals("Wrong number of delegates", 1, delegates.length); //$NON-NLS-1$
assertTrue("Wrong delegate", delegates[0].getDelegate() instanceof AlternateDelegate); //$NON-NLS-1$
}
}
/**
* Checks that all applicable delegates are found for given types and mode combinations
* @throws CoreException
*/
public void testSingleModeMultipleDelegates() throws CoreException {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
HashSet<String> modes = new HashSet<>();
modes.add("alternate2"); //$NON-NLS-1$
assertTrue("Should support mode 'alternate2'", type.supportsModeCombination(modes)); //$NON-NLS-1$
ILaunchDelegate[] delegates = type.getDelegates(modes);
assertTrue("missing delegate", delegates.length > 0); //$NON-NLS-1$
assertEquals("Wrong number of delegates, should be 2 only "+delegates.length+" found", 2, delegates.length); //$NON-NLS-1$ //$NON-NLS-2$
HashSet<Class<? extends ILaunchConfigurationDelegate>> dels = new HashSet<>();
for(int i = 0; i < delegates.length; i++) {
dels.add(delegates[i].getDelegate().getClass());
}
HashSet<Object> ds = new HashSet<>(Arrays.asList(new Object[] {TestLaunchDelegate1.class, TestLaunchDelegate2.class}));
assertTrue("There must be only TestLaunchDelegate1 and TestLaunchDelegate2 as registered delegates for the mode alternate2 and the local java type", ds.containsAll(dels)); //$NON-NLS-1$
}
/**
* Checks to see the even with a partial match of a mode combination it will indicate that it does not support the specified modes
*/
public void testPartialModeCombination() {
ILaunchManager manager = getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
assertNotNull("Missing java application launch config type", type); //$NON-NLS-1$
HashSet<String> modes = new HashSet<>();
modes.add("alternate2"); //$NON-NLS-1$
modes.add("foo"); //$NON-NLS-1$
assertFalse("Should not support modes: " + modes.toString(), type.supportsModeCombination(modes)); //$NON-NLS-1$
}
}