Skip to content

Commit cef50ac

Browse files
committed
refresh timer management tests in debug tracker
Signed-off-by: Jens Reinecke <[email protected]>
1 parent a9f436f commit cef50ac

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

src/debug-session/gdbtarget-debug-tracker.test.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,4 +247,79 @@ describe('GDBTargetDebugTracker', () => {
247247

248248
});
249249

250+
describe('refresh timer management', () => {
251+
let adapterFactory: vscode.DebugAdapterTrackerFactory|undefined;
252+
let gdbSession: GDBTargetDebugSession|undefined = undefined;
253+
let tracker: vscode.DebugAdapterTracker|undefined|null = undefined;
254+
255+
beforeEach(async () => {
256+
adapterFactory = undefined;
257+
gdbSession = undefined;
258+
tracker = undefined;
259+
(vscode.debug.registerDebugAdapterTrackerFactory as jest.Mock).mockImplementation((_debugType: string, factory: vscode.DebugAdapterTrackerFactory): vscode.Disposable => {
260+
adapterFactory = factory;
261+
return { dispose: jest.fn() };
262+
});
263+
debugTracker.activate(contextMock);
264+
265+
debugTracker.onWillStartSession(session => gdbSession = session);
266+
tracker = await adapterFactory!.createDebugAdapterTracker(debugSessionFactory(debugConfigurationFactory()));
267+
tracker!.onWillStartSession!();
268+
// Enable refresh timer
269+
gdbSession!.refreshTimer.enabled = true;
270+
});
271+
272+
const sendContinueEvent = () => {
273+
// Send continued event
274+
const continuedEvent: DebugProtocol.ContinuedEvent = {
275+
event: 'continued',
276+
type: 'event',
277+
seq: 1,
278+
body: {
279+
threadId: 1
280+
}
281+
};
282+
tracker!.onDidSendMessage!(continuedEvent);
283+
};
284+
285+
const sendStoppedEvent = () => {
286+
// Send stopped event
287+
const stoppedEvent: DebugProtocol.StoppedEvent = {
288+
event: 'stopped',
289+
type: 'event',
290+
seq: 1,
291+
body: {
292+
reason: 'step'
293+
}
294+
};
295+
tracker!.onDidSendMessage!(stoppedEvent);
296+
};
297+
298+
it.each([
299+
{ eventName: 'stopped', eventData: { event: 'stopped', type: 'event', seq: 1, body: { reason: 'step' } } },
300+
{ eventName: 'terminated', eventData: { event: 'terminated', type: 'event', seq: 1, body: { } } }, // Does't pass optional 'restart' property
301+
{ eventName: 'exited', eventData: { event: 'exited', type: 'event', seq: 1, body: { exitCode: 0 } } },
302+
])('starts refresh timer on session continued event, and stops on $eventName event', async ({ eventData }) => {
303+
expect(gdbSession).toBeDefined();
304+
sendContinueEvent();
305+
expect(gdbSession!.refreshTimer.isRunning).toBe(true);
306+
// Send event supposed to stop the timer
307+
tracker!.onDidSendMessage!(eventData);
308+
expect(gdbSession!.refreshTimer.isRunning).toBe(false);
309+
});
310+
311+
it.each([
312+
{ requestName: 'next', requestArguments: { command: 'next', type: 'request', seq: 1, arguments: { threadId: 1 } } },
313+
{ requestName: 'stepIn', requestArguments: { command: 'stepIn', type: 'request', seq: 1, arguments: { threadId: 1 } } },
314+
{ requestName: 'stepOut', requestArguments: { command: 'stepOut', type: 'request', seq: 1, arguments: { threadId: 1 } } },
315+
])('starts refresh timer on $requestName request, and stops on stoppedEvent', async ({ requestArguments }) => {
316+
expect(gdbSession).toBeDefined();
317+
tracker!.onWillReceiveMessage!(requestArguments);
318+
expect(gdbSession!.refreshTimer.isRunning).toBe(true);
319+
// Send event supposed to stop the timer
320+
sendStoppedEvent();
321+
expect(gdbSession!.refreshTimer.isRunning).toBe(false);
322+
});
323+
});
324+
250325
});

0 commit comments

Comments
 (0)