diff options
Diffstat (limited to 'dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/debug/vm/launch/VMTestBase.java')
-rw-r--r-- | dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/debug/vm/launch/VMTestBase.java | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/debug/vm/launch/VMTestBase.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/debug/vm/launch/VMTestBase.java new file mode 100644 index 00000000000..8bb546446fc --- /dev/null +++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/debug/vm/launch/VMTestBase.java @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2007 Ericsson 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: + * Ericsson - Initial Implementation + *******************************************************************************/ +package org.eclipse.cdt.tests.dsf.debug.vm.launch; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.cdt.dsf.debug.service.IRunControl.IStartedDMEvent; +import org.eclipse.cdt.dsf.service.DsfSession; +import org.eclipse.cdt.dsf.service.DsfSession.SessionStartedListener; +import org.eclipse.cdt.examples.dsf.pda.PDAPlugin; +import org.eclipse.cdt.examples.dsf.pda.launch.PDALaunch; +import org.eclipse.cdt.tests.dsf.ServiceEventWaitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.DebugPlugin; +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.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.jface.dialogs.MessageDialogWithToggle; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; + +/** + * This is the base class for the GDB/MI Unit tests. + * It provides the @Before and @After methods which setup + * and teardown the launch, for each test. + * If these methods are overwridden by a subclass, the new method + * must call super.baseSetup or super.baseTeardown itself, if this + * code is to be run. + */ +public class VMTestBase { + + private PDALaunch fLaunch; + public PDALaunch getPDALaunch() { return fLaunch; } + + @BeforeClass + public static void baseBeforeClassMethod() { + DebugUIPlugin.getDefault().getPreferenceStore().setValue( + IInternalDebugUIConstants.PREF_SWITCH_TO_PERSPECTIVE, MessageDialogWithToggle.NEVER); + DebugUIPlugin.getDefault().getPreferenceStore().setValue( + IInternalDebugUIConstants.PREF_SWITCH_PERSPECTIVE_ON_SUSPEND, MessageDialogWithToggle.NEVER); + } + + @Before + public void baseBeforeMethod() throws Exception { + Map<String, Object> attrs = new HashMap<String, Object>(); + + initLaunchAttributes(attrs); + + System.out.println("===================================================================="); + System.out.println("Launching test application: " + attrs.get(PDAPlugin.ATTR_PDA_PROGRAM)); + System.out.println("===================================================================="); + + ILaunchManager launchMgr = DebugPlugin.getDefault().getLaunchManager(); + ILaunchConfigurationType lcType = launchMgr.getLaunchConfigurationType("org.eclipse.cdt.examples.dsf.pda.launchType"); + assert lcType != null; + + ILaunchConfigurationWorkingCopy lcWorkingCopy = lcType.newInstance( + null, + launchMgr.generateUniqueLaunchConfigurationNameFrom("Test Launch")); //$NON-NLS-1$ + assert lcWorkingCopy != null; + lcWorkingCopy.setAttributes(attrs); + + final ILaunchConfiguration lc = lcWorkingCopy.doSave(); + assert lc != null; + + final ServiceEventWaitor<?> eventWaitor[] = new ServiceEventWaitor<?>[1]; + + SessionStartedListener newSessionListener = new SessionStartedListener() { + public void sessionStarted(DsfSession session) { + eventWaitor[0] = new ServiceEventWaitor<IStartedDMEvent>(session, IStartedDMEvent.class); + } + }; + + DsfSession.addSessionStartedListener(newSessionListener); + try { + fLaunch = (PDALaunch)lc.launch(ILaunchManager.DEBUG_MODE, new NullProgressMonitor()); + Assert.assertNotNull(fLaunch); + Assert.assertNotNull(eventWaitor[0]); + Assert.assertSame(fLaunch.getSession(), eventWaitor[0].getSession()); + eventWaitor[0].waitForEvent(60000); + } finally { + DsfSession.removeSessionStartedListener(newSessionListener); + if (eventWaitor[0] != null) { + eventWaitor[0].dispose(); + } + } + } + + protected void initLaunchAttributes(Map<String, Object> attrs) { + attrs.put(PDAPlugin.ATTR_PDA_PROGRAM, getProgramPath()); + } + + protected String getProgramPath() { + File programFile = PDAPlugin.getFileInPlugin(new Path("samples/example.pda")); + return programFile.getPath(); + } + + protected ILaunch getLaunch() { + return fLaunch; + } + + @After + public void baseAfterMethod() throws Exception { + if (fLaunch != null) { + fLaunch.terminate(); + fLaunch = null; + } + + } + +} |