/******************************************************************************* * 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())); } }