/******************************************************************************* * Copyright (c) 2007, 2012 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.jdt.debug.tests.launching; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager; import org.eclipse.debug.internal.ui.launchConfigurations.LaunchGroupExtension; import org.eclipse.debug.internal.ui.launchConfigurations.LaunchShortcutExtension; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.ILaunchGroup; import org.eclipse.jdt.debug.tests.AbstractDebugTest; /** * This class tests all the public methods of the launch configuration manager * @since 3.4 */ public class LaunchConfigurationManagerTests extends AbstractDebugTest { private LaunchConfigurationManager fLCM = DebugUIPlugin.getDefault().getLaunchConfigurationManager(); public LaunchConfigurationManagerTests(String name) { super(name); } /** * Asserts that the given array of shortcut identifiers appear in the given list of {@link LaunchShortcutExtension}s * * @param ids the shortcut identifiers * @param shortcuts the complete list of shortcuts of type {@link LaunchShortcutExtension} */ void assertShortcuts(String[] ids, List<LaunchShortcutExtension> shortcuts) { for (int i = 0; i < ids.length; i++) { boolean found = false; for (Iterator<LaunchShortcutExtension> iter = shortcuts.iterator(); iter.hasNext();) { LaunchShortcutExtension ext = iter.next(); if(ids[i].equals(ext.getId())) { found = true; break; } } assertTrue("the launch shortcut "+ids[i]+" was not found", found); } } /** * Asserts that the given list of {@link ILaunchConfigurationType} identifiers all appear in the given list of {@link ILaunchConfigurationType} identifiers * @param ids the list of {@link ILaunchConfigurationType} identifiers * @param types the list of {@link ILaunchConfigurationType} identifiers to look it */ void assertTypes(String[] ids, String[] types) { for (int i = 0; i < ids.length; i++) { boolean found = false; for (int j = 0; j < types.length; j++) { if(ids[i].equals(types[j])) { found = true; break; } } assertTrue("the launch configuration type "+ids[i]+" was not found", found); } } /** * tests that the singleton object returned is always the same */ public void testSingleton() { assertNotNull("The launch configuration manager cannot be null", fLCM); assertEquals("The retruned instance of the manager should always be the same", fLCM, DebugUIPlugin.getDefault().getLaunchConfigurationManager()); } /** * tests that shortcut extensions are loaded properly by the manager */ public void testGetLaunchShortcuts() { assertNotNull("The launch configuration manager cannot be null", fLCM); List<LaunchShortcutExtension> list = fLCM.getLaunchShortcuts(); assertTrue("The listing of shortcuts cannot be empty", list.size() > 2); } /** * tests that the java shortcut is found for a resource with a main method */ public void testGetJavaLaunchShortcutsForSpecificResource() { assertNotNull("The launch configuration manager cannot be null", fLCM); IResource resource = getResource("ThrowsNPE.java"); assertNotNull("The resource ThrowsNPE must exist", resource); List<LaunchShortcutExtension> list = fLCM.getLaunchShortcuts(resource); assertShortcuts(new String[] {"org.eclipse.jdt.debug.ui.localJavaShortcut"}, list); } /** * tests that the applet shortcut is found for a resource that extends applet */ public void testGetAppletLaunchShortcutsForSpecificResource() { assertNotNull("The launch configuration manager cannot be null", fLCM); IResource resource = getResource("AppletImpl.java"); assertNotNull("The resource AppletImpl must exist", resource); List<LaunchShortcutExtension> list = fLCM.getLaunchShortcuts(resource); assertShortcuts(new String[] {"org.eclipse.jdt.debug.ui.javaAppletShortcut"}, list); } /** * test that the correct shortcuts are returned for a resource which is an applet and has a main method */ public void testGetLaunchShortcutsForSpecificResource() { assertNotNull("The launch configuration manager cannot be null", fLCM); IResource resource = getResource("RunnableAppletImpl.java"); assertNotNull("The resource RunnableAppletImpl must exist", resource); List<LaunchShortcutExtension> list = fLCM.getLaunchShortcuts(resource); assertShortcuts(new String[] {"org.eclipse.jdt.debug.ui.localJavaShortcut", "org.eclipse.jdt.debug.ui.javaAppletShortcut"}, list); } /** * tests that shortcuts for given categories are returned, in this case the 'testing' category */ public void testGetLaunchShortcutsForCategory() { assertNotNull("The launch configuration manager cannot be null", fLCM); List<LaunchShortcutExtension> list = fLCM.getLaunchShortcuts("testing"); assertTrue("there should be the testing shortcut", list.size() == 1); } /** * tests that a specific launch group can be found given its id */ public void testGetLaunchGroupForId() { assertNotNull("The launch configuration manager cannot be null", fLCM); LaunchGroupExtension ext = fLCM.getLaunchGroup("org.eclipse.debug.ui.launchGroup.run"); assertNotNull("the run launch group should exist", ext); } /** * tests that a launch group exists for a given configuration and mode, * in this case we are testing that a group exists for a java application config * in debug mode */ public void testGetLaunchGroupForConfigurationAndMode() { assertNotNull("The launch configuration manager cannot be null", fLCM); ILaunchConfiguration configuration = getLaunchConfiguration("ThrowsNPE"); assertNotNull("the ThrowsNPE configuration should exist", configuration); ILaunchGroup group = DebugUITools.getLaunchGroup(configuration, "debug"); assertNotNull("the launch group for a java app config in debug mode should exist", group); } /** * tests that all of the launch groups can be acquired, there should be at least 3 of * them (run, debug, profile) */ public void testGetAllLaunchGroups() { assertNotNull("The launch configuration manager cannot be null", fLCM); ILaunchGroup[] groups = fLCM.getLaunchGroups(); assertNotNull("the listing of launch groups cannot be null", groups); assertTrue("there shoulod be at least 3 launch groups", groups.length > 2); } /** * tests that the default launch group for run mode is the launch group * contributed by debug */ public void testGetDefaultLaunchGroupForRunMode() { assertNotNull("The launch configuration manager cannot be null", fLCM); ILaunchGroup group = fLCM.getDefaultLaunchGroup("run"); assertNotNull("the default launch group cannot be null", group); assertTrue("the default launch group for run mode should be the debug contribution", group.getIdentifier().equals("org.eclipse.debug.ui.launchGroup.run")); } /** * tests that the default launch group for debug mode is the launch group * contributed by debug */ public void testGetDefaultLaunchGroupForDebugMode() { assertNotNull("The launch configuration manager cannot be null", fLCM); ILaunchGroup group = fLCM.getDefaultLaunchGroup("debug"); assertNotNull("the default launch group cannot be null", group); assertTrue("the default launch group for debug mode should be the debug contribution", group.getIdentifier().equals("org.eclipse.debug.ui.launchGroup.debug")); } /** * tests that the correct corresponding launch config types are found for a given resource, * in this test the applet and local java types should be found */ public void testGetApplicableLaunchConfigurationTypes() { assertNotNull("The launch configuration manager cannot be null", fLCM); IResource resource = getResource("RunnableAppletImpl.java"); assertNotNull("The resource RunnableAppletImpl must exist", resource); String[] types = fLCM.getApplicableConfigurationTypes(resource); assertTypes(new String[] {"org.eclipse.jdt.launching.localJavaApplication", "org.eclipse.jdt.launching.javaApplet"}, types); } /** * tests that configuration applicable to specific resources can be found */ public void testGetApplicableLaunchConfigurationsForResource() { assertNotNull("The launch configuration manager cannot be null", fLCM); IResource resource = getResource("RunnableAppletImpl.java"); assertNotNull("The resource RunnableAppletImpl must exist", resource); String[] list = fLCM.getApplicableConfigurationTypes(resource); assertNotNull("the listing cannot be null", list); assertTrue("there should be at least one configuration for this resource", list.length > 0); } /** * Tests that a launch group does not exist for a given configuration and mode that it does not support. * In this case we are testing that a group does not exist for a java application config * in profile mode */ public void testGetLaunchGroupForConfigurationAndUnsupportedMode() { assertNotNull("The launch configuration manager cannot be null", fLCM); ILaunchConfiguration configuration = getLaunchConfiguration("ThrowsNPE"); assertNotNull("the ThrowsNPE configuration should exist", configuration); ILaunchGroup group = DebugUITools.getLaunchGroup(configuration, ILaunchManager.PROFILE_MODE); assertNull("the launch group for a java app config in profile mode should *not* exist", group); } }