blob: ed04436bc155edcd430f529e9191989714136995 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 Nokia 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:
* Nokia - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.edc.debugger.tests;
import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
import org.eclipse.cdt.debug.edc.internal.services.dsf.Expressions;
import org.eclipse.cdt.debug.edc.internal.services.dsf.RunControl.ExecutionDMC;
import org.eclipse.cdt.debug.edc.launch.EDCLaunch;
import org.eclipse.cdt.debug.edc.services.EDCServicesTracker;
import org.eclipse.cdt.debug.edc.services.IEDCExecutionDMC;
import org.eclipse.cdt.debug.edc.tests.TestUtils;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
public abstract class SimpleDebuggerTest {
protected DsfSession session;
protected ExecutionDMC threadDMC;
protected IFrameDMContext frame;
protected Expressions expressionsService;
protected EDCLaunch launch;
private EDCServicesTracker edcTracker;
/** Get the id the launch configuation type used by the snapshot, when it
* might not be available at runtime. If non-<code>null</code>, your test should
* check launch != <code>null</code> before continuing.
* @return launchConfigurationType id, or null if the snapshot uses a standard CDT EDC launcher */
protected String getRequiredLaunchConfigurationType() {
return null;
}
/** Get the id (class name) the TCF agent launcher used by the snapshot, when it
* might not be available at runtime. If non-<code>null</code>, your test should
* check launch != <code>null</code> before continuing.
* @return org.eclipse.debug.edc.tcfAgentLauncher id, or null if the snapshot uses a host CDT EDC launcher */
protected String getRequiredTCFAgentLauncher() {
return null;
}
@Before
public void launchAndWaitForSuspendedContext() throws Exception {
String reqdLauncher = getRequiredLaunchConfigurationType();
if (reqdLauncher != null) {
if (!TestUtils.hasLaunchConfiguationType(reqdLauncher)) {
return;
}
}
reqdLauncher = getRequiredTCFAgentLauncher();
if (reqdLauncher != null) {
if (!TestUtils.hasTCFAgentLauncher(reqdLauncher)) {
return;
}
}
TestUtils.showDebugPerspective();
TestUtils.showView("org.eclipse.cdt.debug.edc.TraceView");
launch = TestUtils.createLaunchForAlbum(getAlbumName());
Assert.assertNotNull(launch);
session = TestUtils.waitForSession(launch);
Assert.assertNotNull(session);
edcTracker = new EDCServicesTracker(EDCDebugger.getBundleContext(), session.getId());
IEDCExecutionDMC executionDMC = TestUtils.waitForExecutionDMC(session);
Assert.assertNotNull(executionDMC);
threadDMC = TestUtils.waitForSuspendedThread(session);
Assert.assertNotNull(threadDMC);
frame = TestUtils.waitForStackFrame(session, threadDMC);
}
@After
public void shutdown() {
TestUtils.shutdownDebugSession(launch, session);
session = null;
}
public void openSnapshotAndWaitForSuspendedContext(int index) throws Exception {
launch.getAlbum().openSnapshot(index);
session = TestUtils.waitForSession(launch);
Assert.assertNotNull(session);
edcTracker = new EDCServicesTracker(EDCDebugger.getBundleContext(), session.getId());
IEDCExecutionDMC executionDMC = TestUtils.waitForExecutionDMC(session);
Assert.assertNotNull(executionDMC);
threadDMC = TestUtils.waitForSuspendedThread(session);
Assert.assertNotNull(threadDMC);
frame = TestUtils.waitForStackFrame(session, threadDMC);
}
public EDCServicesTracker getEdcServiceTracker() {
return edcTracker;
}
abstract public String getAlbumName();
public String getExpressionValue(String expression) throws Exception {
return TestUtils.getExpressionValue(session, frame, expression);
}
}