blob: cbdc7ecfd0f0e07f26b7268d9e41d9e414c1bc93 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* 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:
* Red Hat initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.profiling.provider.tests;
import static org.junit.Assert.*;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.ILaunch;
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.debug.core.Launch;
import org.eclipse.linuxtools.internal.profiling.launch.provider.ProviderProfileConstants;
import org.eclipse.linuxtools.internal.profiling.launch.provider.launch.ProviderLaunchConfigurationDelegate;
import org.eclipse.linuxtools.internal.profiling.launch.provider.launch.ProviderLaunchShortcut;
import org.eclipse.linuxtools.profiling.tests.AbstractTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.FrameworkUtil;
public class LaunchTest extends AbstractTest {
private static final String BIN_NAME = "fibTest"; //$NON-NLS-1$
private static final String BIN_PATH = "Debug/" + BIN_NAME; //$NON-NLS-1$
private static final String STUB_ID = "org.eclipse.linuxtools.profiling.stub"; //$NON-NLS-1$
private static final String LAUNCH_SHORT_EXTPT = "org.eclipse.debug.ui.launchShortcuts"; //$NON-NLS-1$
ProviderLaunchShortcut shortcut;
String launchConfigTypeId;
@Before
public void setUp() throws Exception {
proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()),
BIN_NAME);
// Set up the shortcut and launch config ID passed in through
// IExecutableExtension
IExtensionPoint extPoint = Platform.getExtensionRegistry()
.getExtensionPoint(LAUNCH_SHORT_EXTPT);
IConfigurationElement[] configs = extPoint.getConfigurationElements();
for (IConfigurationElement cfg : configs) {
if (cfg.getAttribute("id").equals(STUB_ID)) { //$NON-NLS-1$
shortcut = (ProviderLaunchShortcut) cfg
.createExecutableExtension("class"); //$NON-NLS-1$
launchConfigTypeId = cfg.getChildren("class")[0].getChildren("parameter")[1].getAttribute("value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
}
@After
public void tearDown() {
try {
deleteProject(proj);
} catch (CoreException e) {
fail(e.getMessage());
}
}
@Test
public void testIExecutableExtension() {
IExtensionPoint extPoint = Platform.getExtensionRegistry()
.getExtensionPoint(LAUNCH_SHORT_EXTPT);
assertNotNull(extPoint);
IConfigurationElement[] configs = extPoint.getConfigurationElements();
assertTrue(configs.length > 0);
for (IConfigurationElement cfg : configs) {
if (cfg.getAttribute("id").equals(STUB_ID)) { //$NON-NLS-1$
try {
assertTrue(cfg.createExecutableExtension("class") instanceof ProviderLaunchShortcut); //$NON-NLS-1$
} catch (CoreException e) {
fail(e.getMessage());
}
assertEquals(cfg.getChildren("class").length, 1); //$NON-NLS-1$
IConfigurationElement elem = cfg.getChildren("class")[0]; //$NON-NLS-1$
for (int i = 0; i < 2; i++) {
assertNotNull(elem.getChildren("parameter")[i].getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertNotNull(elem.getChildren("parameter")[i].getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
}
@Test
public void testShortCut() throws CModelException {
shortcut.launch(proj.getBinaryContainer().getBinaries()[0],
ILaunchManager.PROFILE_MODE);
}
@Test
public void testDefaultProfileShortcutSettings() throws CModelException {
testShortCut();
try {
for (ILaunchConfiguration config : getLaunchManager()
.getLaunchConfigurations()) {
if (config
.getAttribute(
ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
"").equals(BIN_PATH)) { //$NON-NLS-1$
if (config.getAttribute("foo", "").equals("bar")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return;
}
}
}
} catch (CoreException e) {
fail(e.getMessage());
}
fail();
}
@Test
public void testDelegate() throws CoreException {
ILaunchConfiguration config = createConfiguration(proj.getProject());
ProviderLaunchConfigurationDelegate delegate = new ProviderLaunchConfigurationDelegate();
ILaunch launch = new Launch(config, ILaunchManager.PROFILE_MODE, null);
ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy();
setProfileAttributes(wc);
delegate.launch(wc, ILaunchManager.PROFILE_MODE, launch, null);
}
@Test
public void testNoDefaultProfileShortcutSettings() throws CoreException {
testDelegate();
for (ILaunchConfiguration config : getLaunchManager()
.getLaunchConfigurations()) {
if (config
.getAttribute(
ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
"").equals(BIN_PATH)) { //$NON-NLS-1$
assertNotSame("bar", config.getAttribute("foo", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
}
@Override
protected ILaunchConfigurationType getLaunchConfigType() {
return getLaunchManager()
.getLaunchConfigurationType(launchConfigTypeId);
}
@Override
protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) {
// A delegate launch will have this property set, otherwise a shortcut
// launch will be assumed
// This is the provider with the highest priority
wc.setAttribute(ProviderProfileConstants.PROVIDER_CONFIG_ATT,
"org.eclipse.linuxtools.profiling.provider.stubby1"); //$NON-NLS-1$
// Make each configuration unique
wc.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME,
String.valueOf(System.currentTimeMillis()));
}
}