Skip to content

Commit e665855

Browse files
authored
Triggering an update on changing the active stack (#793)
1 parent 90a1887 commit e665855

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

src/views/component-viewer/component-viewer-main.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ export class ComponentViewer {
103103
const onStackTraceDisposable = tracker.onStackTrace(async (session) => {
104104
await this.handleOnStackTrace(session.session);
105105
});
106+
const onDidChangeActiveStackItemDisposable = tracker.onDidChangeActiveStackItem(async (session) => {
107+
await this.handleOnStackTrace(session.session);
108+
});
106109
const onWillStartSessionDisposable = tracker.onWillStartSession(async (session) => {
107110
await this.handleOnWillStartSession(session);
108111
});
@@ -112,6 +115,7 @@ export class ComponentViewer {
112115
onConnectedDisposable,
113116
onDidChangeActiveDebugSessionDisposable,
114117
onStackTraceDisposable,
118+
onDidChangeActiveStackItemDisposable,
115119
onWillStartSessionDisposable
116120
);
117121
}
@@ -120,6 +124,7 @@ export class ComponentViewer {
120124
// Clear active session if it is NOT the one being stopped
121125
if (this._activeSession?.session.id !== session.session.id) {
122126
this._activeSession = undefined;
127+
return;
123128
}
124129
// Update component viewer instance(s)
125130
this.schedulePendingUpdate('stackTrace');

src/views/component-viewer/test/unit/component-viewer-main.test.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,14 @@ type TrackerCallbacks = {
8686
onConnected: (cb: (session: Session) => Promise<void>) => { dispose: jest.Mock };
8787
onDidChangeActiveDebugSession: (cb: (session: Session | undefined) => Promise<void>) => { dispose: jest.Mock };
8888
onStackTrace: (cb: (session: { session: Session }) => Promise<void>) => { dispose: jest.Mock };
89+
onDidChangeActiveStackItem: (cb: (session: { session: Session }) => Promise<void>) => { dispose: jest.Mock };
8990
onWillStartSession: (cb: (session: Session) => Promise<void>) => { dispose: jest.Mock };
9091
callbacks: Partial<{
9192
willStop: (session: Session) => Promise<void>;
9293
connected: (session: Session) => Promise<void>;
9394
activeSession: (session: Session | undefined) => Promise<void>;
9495
stackTrace: (session: { session: Session }) => Promise<void>;
96+
activeStackItem: (session: { session: Session }) => Promise<void>;
9597
willStart: (session: Session) => Promise<void>;
9698
}>;
9799
};
@@ -127,6 +129,10 @@ describe('ComponentViewer', () => {
127129
callbacks.stackTrace = cb;
128130
return { dispose: jest.fn() };
129131
},
132+
onDidChangeActiveStackItem: (cb) => {
133+
callbacks.activeStackItem = cb;
134+
return { dispose: jest.fn() };
135+
},
130136
onWillStartSession: (cb) => {
131137
callbacks.willStart = cb;
132138
return { dispose: jest.fn() };
@@ -151,7 +157,23 @@ describe('ComponentViewer', () => {
151157
controller.activate(tracker as unknown as GDBTargetDebugTracker);
152158

153159
expect(registerTreeDataProvider).toHaveBeenCalledWith('cmsis-debugger.componentViewer', expect.any(Object));
154-
expect(context.subscriptions.length).toBe(6);
160+
expect(context.subscriptions.length).toBe(7);
161+
});
162+
163+
it('triggers an update when active stack item changes', async () => {
164+
const context = makeContext();
165+
const tracker = makeTracker();
166+
const controller = new ComponentViewer(context as unknown as ExtensionContext);
167+
controller.activate(tracker as unknown as GDBTargetDebugTracker);
168+
169+
const session = makeSession('s1', ['a.scvd']);
170+
(controller as unknown as { _activeSession?: Session })._activeSession = session;
171+
172+
const schedulePendingUpdate = jest.spyOn(controller as unknown as { schedulePendingUpdate: (reason: fifoUpdateReason) => void }, 'schedulePendingUpdate');
173+
174+
await tracker.callbacks.activeStackItem?.({ session });
175+
176+
expect(schedulePendingUpdate).toHaveBeenCalledWith('stackTrace');
155177
});
156178

157179
it('skips reading scvd files when session or cbuild-run is missing', async () => {

0 commit comments

Comments
 (0)