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

Bug 238445

The Register unit tests made calls to createExecutionContext outside the
executor.  This change fixes this and also one register test that didn't do what
it was meant to do.
This commit is contained in:
Marc Khouzam 2008-06-25 17:57:45 +00:00
parent 001600310c
commit 18e02c69ae
3 changed files with 40 additions and 69 deletions

View file

@ -135,6 +135,7 @@ public class GDBProcessesTest extends BaseTestCase {
} }
} }
IMIExecutionDMContext fExecDmc = null;
/* /*
* getThreadData() for multiple threads * getThreadData() for multiple threads
*/ */
@ -151,17 +152,15 @@ public class GDBProcessesTest extends BaseTestCase {
} }
}; };
/*
* Create an execution DMC
*/
final IMIExecutionDMContext dmc = fRunCtrl.createMIExecutionContext(fGdbCtrl.getGDBDMContext(), 1);
/* /*
* getModelData for Execution DMC * Create an execution DMC then getModelData for Execution DMC
*/ */
fRunCtrl.getExecutor().submit(new Runnable() { fRunCtrl.getExecutor().submit(new Runnable() {
public void run() { public void run() {
fRunCtrl.getThreadData(dmc, rm); fExecDmc = fRunCtrl.createMIExecutionContext(fGdbCtrl.getGDBDMContext(), 1);
fRunCtrl.getThreadData(fExecDmc, rm);
} }
}); });
fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER);
@ -169,7 +168,7 @@ public class GDBProcessesTest extends BaseTestCase {
GDBThreadData threadData = rm.getData(); GDBThreadData threadData = rm.getData();
if(threadData == null) if(threadData == null)
fail("Thread data not returned for thread id = " + dmc.getThreadId()); fail("Thread data not returned for thread id = " + fExecDmc.getThreadId());
else{ else{
// Thread id is only a series of numbers // Thread id is only a series of numbers
Pattern pattern = Pattern.compile("\\d*", Pattern.MULTILINE); //$NON-NLS-1$ Pattern pattern = Pattern.compile("\\d*", Pattern.MULTILINE); //$NON-NLS-1$

View file

@ -28,9 +28,6 @@ import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControlDMContext; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControlDMContext;
import org.eclipse.dd.mi.service.IMIExecutionDMContext; import org.eclipse.dd.mi.service.IMIExecutionDMContext;
import org.eclipse.dd.mi.service.MIRunControl;
import org.eclipse.dd.mi.service.MIStack;
import org.eclipse.dd.mi.service.command.events.MIStoppedEvent;
import org.eclipse.dd.tests.gdb.framework.AsyncCompletionWaitor; import org.eclipse.dd.tests.gdb.framework.AsyncCompletionWaitor;
import org.eclipse.dd.tests.gdb.framework.BackgroundRunner; import org.eclipse.dd.tests.gdb.framework.BackgroundRunner;
import org.eclipse.dd.tests.gdb.framework.BaseTestCase; import org.eclipse.dd.tests.gdb.framework.BaseTestCase;
@ -57,6 +54,7 @@ public class MIRegistersTest extends BaseTestCase {
* Name of the executable * Name of the executable
*/ */
private static final String EXEC_NAME = "MultiThread.exe"; private static final String EXEC_NAME = "MultiThread.exe";
private static final String SRC_NAME = "MultiThread.cc";
// Will be used to wait for asynchronous call to complete // Will be used to wait for asynchronous call to complete
//private final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); //private final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor();
@ -64,8 +62,6 @@ public class MIRegistersTest extends BaseTestCase {
private DsfServicesTracker fServicesTracker; private DsfServicesTracker fServicesTracker;
private GDBControlDMContext fGdbControlDmc; private GDBControlDMContext fGdbControlDmc;
private IRegisters fRegService; private IRegisters fRegService;
private MIRunControl fRunControl;
private MIStack fStack;
@Before @Before
public void init() throws Exception { public void init() throws Exception {
@ -78,17 +74,6 @@ public class MIRegistersTest extends BaseTestCase {
fGdbControlDmc = gdbControl.getGDBDMContext(); fGdbControlDmc = gdbControl.getGDBDMContext();
fRegService = fServicesTracker.getService(IRegisters.class); fRegService = fServicesTracker.getService(IRegisters.class);
fRunControl = fServicesTracker.getService(MIRunControl.class);
fStack = fServicesTracker.getService(MIStack.class);
// This is the way to have the entire application run
// final IDMContext<IExecutionDMData> execDMContext = ((MIRunControl)fRunControl).getExecutionDMC();
// fRunControl.getExecutor().submit(new Runnable() {
// public void run() {
// fRunControl.resume(execDMContext, null);
// }
// });
} }
@BeforeClass @BeforeClass
@ -101,8 +86,6 @@ public class MIRegistersTest extends BaseTestCase {
@After @After
public void tearDown() { public void tearDown() {
fRegService = null; fRegService = null;
fRunControl = null;
fStack = null;
} }
/* /*
@ -207,7 +190,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void getRegistersLength() throws Throwable { public void getRegistersLength() throws Throwable {
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
assertTrue("The number of registers should have been " + NUMBER_OF_REGISTERS + assertTrue("The number of registers should have been " + NUMBER_OF_REGISTERS +
@ -218,7 +201,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void getRegisters() throws Throwable { public void getRegisters() throws Throwable {
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
List<String> regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"); List<String> regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7");
@ -256,9 +239,8 @@ public class MIRegistersTest extends BaseTestCase {
} }
} }
//private static String REGISTER_VALUE = "16";
private String getModelDataForRegisterDataValue(IFrameDMContext frameDmc, String format, int regNo) throws Throwable { private String getModelDataForRegisterDataValue(IFrameDMContext frameDmc, String format, int regNo) throws Throwable {
final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); final AsyncCompletionWaitor wait = new AsyncCompletionWaitor();
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
final FormattedValueDMContext valueDmc = fRegService.getFormattedValueContext(regDMCs[regNo], format); final FormattedValueDMContext valueDmc = fRegService.getFormattedValueContext(regDMCs[regNo], format);
@ -268,10 +250,10 @@ public class MIRegistersTest extends BaseTestCase {
@Override @Override
protected void handleCompleted() { protected void handleCompleted() {
if (isSuccess()) { if (isSuccess()) {
fWait.setReturnInfo(getData()); wait.setReturnInfo(getData());
} }
fWait.waitFinished(getStatus()); wait.waitFinished(getStatus());
} }
}; };
@ -281,21 +263,19 @@ public class MIRegistersTest extends BaseTestCase {
} }
}); });
fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); wait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER);
assertTrue(fWait.getMessage(), fWait.isOK()); assertTrue(wait.getMessage(), wait.isOK());
FormattedValueDMData data = (FormattedValueDMData)fWait.getReturnInfo(); FormattedValueDMData data = (FormattedValueDMData)wait.getReturnInfo();
String val = data.getFormattedValue(); return data.getFormattedValue();
fWait.waitReset();
return val;
} }
private static String REGISTER_VALUE = ""; private static String REGISTER_VALUE = "";
@Test @Test
public void getModelDataForRegisterDataValueInDifferentNumberFormats() throws Throwable { public void getModelDataForRegisterDataValueInDifferentNumberFormats() throws Throwable {
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String val = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); String val = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0);
REGISTER_VALUE = val; REGISTER_VALUE = val;
@ -317,21 +297,9 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void compareRegisterForMultipleExecutionContexts() throws Throwable { public void compareRegisterForMultipleExecutionContexts() throws Throwable {
final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); SyncUtil.SyncRunToLine(SRC_NAME, "22");
IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 2);
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String regVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0);
String regVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1);
String regVal2 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 2);
String regVal3 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 3);
String regVal4 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 4);
String regVal5 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 5);
MIStoppedEvent stoppedEvent = SyncUtil.SyncRunToLine(EXEC_NAME + ".cc", "22");
execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 2);
frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String thread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); String thread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0);
String thread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1); String thread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1);
String thread2RegVal2 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 2); String thread2RegVal2 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 2);
@ -340,12 +308,12 @@ public class MIRegistersTest extends BaseTestCase {
String thread2RegVal5 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 5); String thread2RegVal5 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 5);
// Set execution context to 1 // Set execution context to 1
execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0);
// Re-set the execution context to 2 and Fetch from the Cache // Re-set the execution context to 2 and Fetch from the Cache
execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 2); execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 2);
frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String dupliThread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); String dupliThread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0);
String dupliThread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1); String dupliThread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1);
@ -369,15 +337,6 @@ public class MIRegistersTest extends BaseTestCase {
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
final RequestMonitor writeDone =
new RequestMonitor(fRegService.getExecutor(), null) {
@Override
protected void handleCompleted() {
fWait.waitFinished(getStatus());
}
};
fRegService.getExecutor().submit(new Runnable() { fRegService.getExecutor().submit(new Runnable() {
public void run() { public void run() {
fRegService.writeRegister( fRegService.writeRegister(
@ -400,7 +359,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void writeRegisterNaturalFormat() throws Throwable{ public void writeRegisterNaturalFormat() throws Throwable{
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String regValue = "10"; String regValue = "10";
int regIndex = 3; int regIndex = 3;
@ -411,7 +370,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void writeRegisterHEXFormat() throws Throwable{ public void writeRegisterHEXFormat() throws Throwable{
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
String regValue = "0x10"; String regValue = "0x10";
int regIndex = 3; int regIndex = 3;
@ -423,7 +382,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
@Ignore @Ignore
public void writeRegisterBinaryFormat() throws Throwable{ public void writeRegisterBinaryFormat() throws Throwable{
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
//String regValue = "0100101001"; //String regValue = "0100101001";
String regValue = "10"; String regValue = "10";
@ -435,7 +394,7 @@ public class MIRegistersTest extends BaseTestCase {
@Test @Test
public void writeRegisterOctalFormat() throws Throwable{ public void writeRegisterOctalFormat() throws Throwable{
IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1);
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
//String regValue = "10"; //String regValue = "10";
String regValue = "012"; String regValue = "012";

View file

@ -26,12 +26,14 @@ import org.eclipse.dd.dsf.debug.service.IFormattedValues;
import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.dd.dsf.debug.service.IFormattedValues.IFormattedDataDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.IFormattedDataDMContext;
import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext;
import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.dd.dsf.debug.service.IRunControl.StepType; import org.eclipse.dd.dsf.debug.service.IRunControl.StepType;
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext; import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.dd.dsf.service.DsfServicesTracker; import org.eclipse.dd.dsf.service.DsfServicesTracker;
import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl;
import org.eclipse.dd.mi.service.IMIExecutionDMContext;
import org.eclipse.dd.mi.service.MIRunControl; import org.eclipse.dd.mi.service.MIRunControl;
import org.eclipse.dd.mi.service.MIStack; import org.eclipse.dd.mi.service.MIStack;
import org.eclipse.dd.mi.service.command.commands.MIBreakDelete; import org.eclipse.dd.mi.service.command.commands.MIBreakDelete;
@ -311,4 +313,15 @@ public class SyncUtil {
}; };
return fSession.getExecutor().submit(callable).get(); return fSession.getExecutor().submit(callable).get();
} }
public static IMIExecutionDMContext SyncCreateExecutionContext(final IContainerDMContext parentCtx, final int threadId)
throws Throwable {
Callable<IMIExecutionDMContext> callable = new Callable<IMIExecutionDMContext>() {
public IMIExecutionDMContext call() throws Exception {
return fRunControl.createMIExecutionContext(parentCtx, threadId);
}
};
return fSession.getExecutor().submit(callable).get();
}
} }