@@ -85,6 +85,7 @@ function createMockVSCode(options: {
8585 let capturedPlaceholder = '' ;
8686 let capturedTitle = '' ;
8787 let capturedButtons : unknown [ ] = [ ] ;
88+ let capturedIgnoreFocusOut = false ;
8889 const showWarningMessageCalls : string [ ] = [ ] ;
8990
9091 return {
@@ -131,6 +132,8 @@ function createMockVSCode(options: {
131132 set activeItems ( _value : T [ ] ) {
132133 // Capture but don't need to track for tests
133134 } ,
135+ get ignoreFocusOut ( ) { return capturedIgnoreFocusOut ; } ,
136+ set ignoreFocusOut ( value : boolean ) { capturedIgnoreFocusOut = value ; } ,
134137 matchOnDescription : false ,
135138 matchOnDetail : false ,
136139 get selectedItems ( ) : T [ ] {
@@ -198,6 +201,7 @@ function createMockVSCode(options: {
198201 _getCapturedPlaceholder : ( ) => capturedPlaceholder ,
199202 _getCapturedTitle : ( ) => capturedTitle ,
200203 _getCapturedButtons : ( ) => capturedButtons ,
204+ _getCapturedIgnoreFocusOut : ( ) => capturedIgnoreFocusOut ,
201205 _getShowWarningMessageCalls : ( ) => showWarningMessageCalls ,
202206 } ;
203207}
@@ -233,6 +237,20 @@ describe('showIdentityQuickPick E2E Test Suite', function () {
233237 } ) ;
234238 } ) ;
235239
240+ describe ( 'Focus Retention' , ( ) => {
241+ it ( 'should set ignoreFocusOut to prevent dismissal on focus change' , async ( ) => {
242+ const mockVSCode = createMockVSCode ( {
243+ identities : [ TEST_IDENTITIES . work ] ,
244+ selectedIdentity : TEST_IDENTITIES . work ,
245+ } ) ;
246+ _setMockVSCode ( mockVSCode as never ) ;
247+
248+ await showIdentityQuickPick ( ) ;
249+
250+ assert . strictEqual ( mockVSCode . _getCapturedIgnoreFocusOut ( ) , true , 'Select profile QuickPick should have ignoreFocusOut=true' ) ;
251+ } ) ;
252+ } ) ;
253+
236254 describe ( 'Item Generation' , ( ) => {
237255 it ( 'should create items with correct labels' , async ( ) => {
238256 const mockVSCode = createMockVSCode ( {
@@ -461,6 +479,7 @@ function createManageMockVSCode(options: {
461479 let capturedTitle = '' ;
462480 let capturedButtons : unknown [ ] = [ ] ;
463481 let capturedActiveItems : CapturedManageQuickPickItem [ ] = [ ] ;
482+ let capturedIgnoreFocusOut = false ;
464483
465484 return {
466485 workspace : {
@@ -503,6 +522,8 @@ function createManageMockVSCode(options: {
503522 get activeItems ( ) : T [ ] {
504523 return capturedActiveItems as unknown as T [ ] ;
505524 } ,
525+ get ignoreFocusOut ( ) { return capturedIgnoreFocusOut ; } ,
526+ set ignoreFocusOut ( value : boolean ) { capturedIgnoreFocusOut = value ; } ,
506527 matchOnDescription : false ,
507528 matchOnDetail : false ,
508529 get selectedItems ( ) : T [ ] {
@@ -604,6 +625,7 @@ function createManageMockVSCode(options: {
604625 _getCapturedTitle : ( ) => capturedTitle ,
605626 _getCapturedButtons : ( ) => capturedButtons ,
606627 _getCapturedActiveItems : ( ) => capturedActiveItems ,
628+ _getCapturedIgnoreFocusOut : ( ) => capturedIgnoreFocusOut ,
607629 } ;
608630}
609631
@@ -618,6 +640,20 @@ describe('showManageIdentitiesQuickPick E2E Test Suite', function () {
618640 _resetCache ( ) ;
619641 } ) ;
620642
643+ describe ( 'Focus Retention' , ( ) => {
644+ it ( 'should set ignoreFocusOut to prevent dismissal on focus change' , async ( ) => {
645+ const mockVSCode = createManageMockVSCode ( {
646+ identities : [ TEST_IDENTITIES . work ] ,
647+ triggerAction : 'hide' ,
648+ } ) ;
649+ _setMockVSCode ( mockVSCode as never ) ;
650+
651+ await showManageIdentitiesQuickPick ( [ TEST_IDENTITIES . work ] ) ;
652+
653+ assert . strictEqual ( mockVSCode . _getCapturedIgnoreFocusOut ( ) , true , 'Manage profiles QuickPick should have ignoreFocusOut=true' ) ;
654+ } ) ;
655+ } ) ;
656+
621657 describe ( 'Basic UI' , ( ) => {
622658 it ( 'should display items correctly' , async ( ) => {
623659 const mockVSCode = createManageMockVSCode ( {
0 commit comments