mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
Added test for interrupt
This commit is contained in:
parent
ae33c729a7
commit
1ee7bff8d5
1 changed files with 63 additions and 0 deletions
|
@ -688,4 +688,67 @@ public class MIRunControlTest extends BaseTestCase {
|
||||||
|
|
||||||
wait.waitReset();
|
wait.waitReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that interrupting a running target works
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void interruptRunningTarget() throws Throwable {
|
||||||
|
final AsyncCompletionWaitor wait = new AsyncCompletionWaitor();
|
||||||
|
|
||||||
|
ServiceEventWaitor<ISuspendedDMEvent> suspendedEventWaitor = new ServiceEventWaitor<ISuspendedDMEvent>(
|
||||||
|
getGDBLaunch().getSession(),
|
||||||
|
ISuspendedDMEvent.class);
|
||||||
|
|
||||||
|
|
||||||
|
// Resume the target
|
||||||
|
fRunCtrl.getExecutor().submit(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
fRunCtrl.resume(fThreadExecDmc,
|
||||||
|
new RequestMonitor(fRunCtrl.getExecutor(), null) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
wait.waitFinished(getStatus());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wait.waitUntilDone(TestsPlugin.massageTimeout(1000));
|
||||||
|
Assert.assertTrue(wait.getMessage(), wait.isOK());
|
||||||
|
wait.waitReset();
|
||||||
|
|
||||||
|
// The program takes five seconds to run. There's five iterations of a
|
||||||
|
// loop that has a one second sleep in it. Wait a second then attempt to
|
||||||
|
// interrupt the target
|
||||||
|
Thread.sleep(1000);
|
||||||
|
fRunCtrl.getExecutor().submit(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
fRunCtrl.suspend(fThreadExecDmc,
|
||||||
|
new RequestMonitor(fRunCtrl.getExecutor(), null) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
wait.waitFinished(getStatus());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wait.waitUntilDone(TestsPlugin.massageTimeout(1000));
|
||||||
|
Assert.assertTrue(wait.getMessage(), wait.isOK());
|
||||||
|
wait.waitReset();
|
||||||
|
|
||||||
|
// Wait up to 2 seconds for the target to suspend. Should happen immediately.
|
||||||
|
suspendedEventWaitor.waitForEvent(TestsPlugin.massageTimeout(2000));
|
||||||
|
|
||||||
|
// Double check that the target is in the suspended state
|
||||||
|
final IContainerDMContext containerDmc = SyncUtil.getContainerContext();
|
||||||
|
fRunCtrl.getExecutor().submit(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
wait.setReturnInfo(fRunCtrl.isSuspended(containerDmc));
|
||||||
|
wait.waitFinished();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
wait.waitUntilDone(TestsPlugin.massageTimeout(2000));
|
||||||
|
Assert.assertTrue("Target is running. It should have been suspended", (Boolean)wait.getReturnInfo());
|
||||||
|
wait.waitReset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue