@@ -425,6 +425,45 @@ test('deferred teardown is skipped when user quickly switches back to sessions',
425425 assert . strictEqual ( teardownCount , 0 ) ;
426426} ) ;
427427
428+ test ( 'switchMainTab can preserve rendered sessions when leaving and returning to the browser tab' , ( ) => {
429+ const calls = {
430+ teardown : 0 ,
431+ prepare : 0 ,
432+ loadSessions : 0
433+ } ;
434+ const vm = {
435+ mainTab : 'sessions' ,
436+ configMode : 'codex' ,
437+ sessionsLoadedOnce : true ,
438+ preserveSessionRenderOnTabLeave : true ,
439+ sessionListRenderEnabled : true ,
440+ sessionPreviewRenderEnabled : true ,
441+ scheduleSessionTabDeferredTeardown ( ) {
442+ calls . teardown += 1 ;
443+ } ,
444+ teardownSessionTabRender ( ) {
445+ calls . teardown += 1 ;
446+ } ,
447+ prepareSessionTabRender ( ) {
448+ calls . prepare += 1 ;
449+ } ,
450+ loadSessions ( ) {
451+ calls . loadSessions += 1 ;
452+ } ,
453+ refreshClaudeModelContext ( ) { }
454+ } ;
455+
456+ switchMainTab . call ( vm , 'usage' ) ;
457+ assert . strictEqual ( vm . mainTab , 'usage' ) ;
458+ assert . strictEqual ( vm . sessionListRenderEnabled , true ) ;
459+ assert . strictEqual ( vm . sessionPreviewRenderEnabled , true ) ;
460+ assert . deepStrictEqual ( calls , { teardown : 0 , prepare : 0 , loadSessions : 0 } ) ;
461+
462+ switchMainTab . call ( vm , 'sessions' ) ;
463+ assert . strictEqual ( vm . mainTab , 'sessions' ) ;
464+ assert . deepStrictEqual ( calls , { teardown : 0 , prepare : 0 , loadSessions : 0 } ) ;
465+ } ) ;
466+
428467test ( 'loadSessions replays the latest pending request after an in-flight list refresh completes' , async ( ) => {
429468 const apiCalls = [ ] ;
430469 let resolveFirstRequest = null ;
0 commit comments