@@ -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