1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Small enhancement to get the containerDmc in the unit tests

This commit is contained in:
Marc Khouzam 2010-04-29 14:21:47 +00:00
parent b231775082
commit 39668b20a5
3 changed files with 22 additions and 33 deletions

View file

@ -21,12 +21,11 @@ import junit.framework.Assert;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Query; import org.eclipse.cdt.dsf.concurrent.Query;
import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor; import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.IDMContext; import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IExpressions;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext; import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext;
import org.eclipse.cdt.dsf.debug.service.IExpressions;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.IFormattedDataDMContext; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.IFormattedDataDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses; import org.eclipse.cdt.dsf.debug.service.IProcesses;
@ -36,7 +35,6 @@ import org.eclipse.cdt.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType; import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext; import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService; import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
import org.eclipse.cdt.dsf.mi.service.IMICommandControl; import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext; import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
import org.eclipse.cdt.dsf.mi.service.IMIProcesses; import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
@ -73,7 +71,6 @@ public class SyncUtil {
private static IContainerDMContext fGdbContainerDmc; private static IContainerDMContext fGdbContainerDmc;
private static IBreakpointsTargetDMContext fBreakpointsDmc; private static IBreakpointsTargetDMContext fBreakpointsDmc;
private static IProcesses fProcessesService; private static IProcesses fProcessesService;
private static IGDBControl fGDBCtrl;
public static final int WAIT_FOREVER = ServiceEventWaitor.WAIT_FOREVER; public static final int WAIT_FOREVER = ServiceEventWaitor.WAIT_FOREVER;
@ -96,7 +93,6 @@ public class SyncUtil {
fStack = tracker.getService(MIStack.class); fStack = tracker.getService(MIStack.class);
fExpressions = tracker.getService(IExpressions.class); fExpressions = tracker.getService(IExpressions.class);
fProcessesService = tracker.getService(IProcesses.class); fProcessesService = tracker.getService(IProcesses.class);
fGDBCtrl = tracker.getService(IGDBControl.class);
fCommandFactory = tracker.getService(IMICommandControl.class).getCommandFactory(); fCommandFactory = tracker.getService(IMICommandControl.class).getCommandFactory();
@ -529,7 +525,7 @@ public class SyncUtil {
} }
/** /**
* Utility method to return the process DM context. This can be used only by * Utility method to return the container DM context. This can be used only by
* tests that deal with a single heavyweight process. If more than one * tests that deal with a single heavyweight process. If more than one
* process is available, this method will fail. * process is available, this method will fail.
* *
@ -540,14 +536,16 @@ public class SyncUtil {
* @throws InterruptedException * @throws InterruptedException
*/ */
@ThreadSafeAndProhibitedFromDsfExecutor("fSession.getExecutor()") @ThreadSafeAndProhibitedFromDsfExecutor("fSession.getExecutor()")
public static IProcessDMContext getProcessContext() throws InterruptedException { public static IContainerDMContext getContainerContext() throws InterruptedException {
assert !fProcessesService.getExecutor().isInExecutorThread(); assert !fProcessesService.getExecutor().isInExecutorThread();
final AsyncCompletionWaitor waitor = new AsyncCompletionWaitor(); final AsyncCompletionWaitor waitor = new AsyncCompletionWaitor();
fProcessesService.getExecutor().submit(new Runnable() { fProcessesService.getExecutor().submit(new Runnable() {
public void run() { public void run() {
fProcessesService.getProcessesBeingDebugged(fGDBCtrl.getContext(), new DataRequestMonitor<IDMContext[]>(fProcessesService.getExecutor(), null) { fProcessesService.getProcessesBeingDebugged(
fCommandControl.getContext(),
new DataRequestMonitor<IDMContext[]>(fProcessesService.getExecutor(), null) {
@Override @Override
protected void handleCompleted() { protected void handleCompleted() {
if (isSuccess()) { if (isSuccess()) {
@ -555,9 +553,11 @@ public class SyncUtil {
Assert.assertNotNull("invalid return value from service", contexts); Assert.assertNotNull("invalid return value from service", contexts);
Assert.assertEquals("unexpected number of processes", contexts.length, 1); Assert.assertEquals("unexpected number of processes", contexts.length, 1);
IDMContext context = contexts[0]; IDMContext context = contexts[0];
IProcessDMContext processContext = DMContexts.getAncestorOfType(context, IProcessDMContext.class); Assert.assertNotNull("unexpected process context type ", context);
Assert.assertNotNull("unexpected process context type ", processContext); waitor.setReturnInfo(context);
waitor.setReturnInfo(processContext); waitor.waitFinished();
} else {
waitor.waitFinished(getStatus());
} }
} }
@ -565,11 +565,9 @@ public class SyncUtil {
} }
}); });
waitor.waitUntilDone(TestsPlugin.massageTimeout(2000)); waitor.waitUntilDone(TestsPlugin.massageTimeout(2000));
Assert.assertTrue(waitor.getMessage(), waitor.isOK()); Assert.assertTrue(waitor.getMessage(), waitor.isOK());
return (IProcessDMContext) waitor.getReturnInfo(); return (IContainerDMContext)waitor.getReturnInfo();
} }
} }

View file

@ -20,6 +20,7 @@ import java.util.regex.Pattern;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext; import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMContext; import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMData; import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMData;
@ -107,7 +108,7 @@ public class GDBProcessesTest extends BaseTestCase {
* Ask the service to get model data for the process. * Ask the service to get model data for the process.
* There is only one process in case of GDB back end. * There is only one process in case of GDB back end.
*/ */
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IProcessDMContext processContext = DMContexts.getAncestorOfType(SyncUtil.getContainerContext(), IProcessDMContext.class);
fSession.getExecutor().submit(new Runnable() { fSession.getExecutor().submit(new Runnable() {
public void run() { public void run() {
fProcService.getExecutionData(processContext, rm); fProcService.getExecutionData(processContext, rm);
@ -146,7 +147,7 @@ public class GDBProcessesTest extends BaseTestCase {
}; };
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IProcessDMContext processContext = DMContexts.getAncestorOfType(SyncUtil.getContainerContext(), IProcessDMContext.class);
fProcService.getExecutor().submit(new Runnable() { fProcService.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IThreadDMContext threadDmc = fProcService.createThreadContext(processContext, THREAD_ID); IThreadDMContext threadDmc = fProcService.createThreadContext(processContext, THREAD_ID);

View file

@ -36,7 +36,6 @@ import org.eclipse.cdt.dsf.debug.service.IRunControl.StateChangeReason;
import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType; import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType;
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl; import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext; import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
import org.eclipse.cdt.dsf.mi.service.IMIProcessDMContext;
import org.eclipse.cdt.dsf.mi.service.IMIProcesses; import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
import org.eclipse.cdt.dsf.mi.service.IMIRunControl; import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
import org.eclipse.cdt.dsf.mi.service.MIProcesses; import org.eclipse.cdt.dsf.mi.service.MIProcesses;
@ -80,7 +79,6 @@ public class MIRunControlTest extends BaseTestCase {
private IGDBControl fGDBCtrl; private IGDBControl fGDBCtrl;
private IMIRunControl fRunCtrl; private IMIRunControl fRunCtrl;
private IMIProcesses fProcService;
private IContainerDMContext fContainerDmc; private IContainerDMContext fContainerDmc;
private IExecutionDMContext fThreadExecDmc; private IExecutionDMContext fThreadExecDmc;
@ -109,7 +107,6 @@ public class MIRunControlTest extends BaseTestCase {
fThreadExecDmc = procService.createExecutionContext(fContainerDmc, threadDmc, "1"); fThreadExecDmc = procService.createExecutionContext(fContainerDmc, threadDmc, "1");
fRunCtrl = fServicesTracker.getService(IMIRunControl.class); fRunCtrl = fServicesTracker.getService(IMIRunControl.class);
fProcService = fServicesTracker.getService(IMIProcesses.class);
} }
@ -190,14 +187,13 @@ public class MIRunControlTest extends BaseTestCase {
} }
}; };
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
/* /*
* Test getExecutionContexts() when only one thread exist. * Test getExecutionContexts() when only one thread exist.
*/ */
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
fRunCtrl.getExecutionContexts(containerDmc, rm); fRunCtrl.getExecutionContexts(containerDmc, rm);
} }
}); });
@ -278,14 +274,13 @@ public class MIRunControlTest extends BaseTestCase {
Assert.assertEquals("Thread created event is for wrong thread id", sProgramIsCygwin ? 3 : 2, ((IMIExecutionDMContext)startedEvent.getDMContext()).getThreadId()); Assert.assertEquals("Thread created event is for wrong thread id", sProgramIsCygwin ? 3 : 2, ((IMIExecutionDMContext)startedEvent.getDMContext()).getThreadId());
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
/* /*
* Test getExecutionContexts for a valid container DMC * Test getExecutionContexts for a valid container DMC
*/ */
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
fRunCtrl.getExecutionContexts(containerDmc, rmExecutionCtxts); fRunCtrl.getExecutionContexts(containerDmc, rmExecutionCtxts);
} }
}); });
@ -336,14 +331,13 @@ public class MIRunControlTest extends BaseTestCase {
} }
}; };
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
/* /*
* Call getModelData for Execution DMC * Call getModelData for Execution DMC
*/ */
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
fRunCtrl.getExecutionData(((MIRunControl)fRunCtrl).createMIExecutionContext(containerDmc, 1), rm); fRunCtrl.getExecutionData(((MIRunControl)fRunCtrl).createMIExecutionContext(containerDmc, 1), rm);
} }
}); });
@ -570,11 +564,10 @@ public class MIRunControlTest extends BaseTestCase {
getGDBLaunch().getSession(), getGDBLaunch().getSession(),
IResumedDMEvent.class); IResumedDMEvent.class);
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
fRunCtrl.resume(containerDmc, rm); fRunCtrl.resume(containerDmc, rm);
} }
}); });
@ -593,7 +586,6 @@ public class MIRunControlTest extends BaseTestCase {
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc)); wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc));
wait.waitFinished(); wait.waitFinished();
} }
@ -641,11 +633,10 @@ public class MIRunControlTest extends BaseTestCase {
wait.waitReset(); wait.waitReset();
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc)); wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc));
wait.waitFinished(); wait.waitFinished();
} }
@ -687,11 +678,10 @@ public class MIRunControlTest extends BaseTestCase {
return; return;
} }
final IProcessDMContext processContext = SyncUtil.getProcessContext(); final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
IContainerDMContext containerDmc = fProcService.createContainerContext(processContext, ((IMIProcessDMContext)processContext).getProcId());
wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc)); wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc));
wait.waitFinished(); wait.waitFinished();
} }