@@ -85,6 +85,64 @@ describe('popover', () => {
8585 await nextUpdate ( popover ) ;
8686 expect ( overlay . restoreFocusNode ) . to . eql ( target ) ;
8787 } ) ;
88+
89+ it ( 'should restore focus when target is set on already opened popover' , async ( ) => {
90+ // Focus target before opening
91+ target . focus ( ) ;
92+
93+ // Open popover
94+ popover . renderer = ( root ) => {
95+ if ( ! root . firstChild ) {
96+ const input = document . createElement ( 'input' ) ;
97+ root . appendChild ( input ) ;
98+ }
99+ } ;
100+ popover . opened = true ;
101+ await oneEvent ( overlay , 'vaadin-overlay-open' ) ;
102+
103+ // Set target
104+ popover . target = target ;
105+ await nextUpdate ( popover ) ;
106+
107+ popover . querySelector ( 'input' ) . focus ( ) ;
108+
109+ // Close popover
110+ popover . opened = false ;
111+ await nextRender ( ) ;
112+
113+ expect ( document . activeElement ) . to . equal ( target ) ;
114+ } ) ;
115+
116+ it ( 'should not restore focus when target is cleared on already opened popover' , async ( ) => {
117+ // Focus target before opening
118+ target . focus ( ) ;
119+
120+ // Open popover
121+ popover . renderer = ( root ) => {
122+ if ( ! root . firstChild ) {
123+ const input = document . createElement ( 'input' ) ;
124+ root . appendChild ( input ) ;
125+ }
126+ } ;
127+ popover . opened = true ;
128+ await oneEvent ( overlay , 'vaadin-overlay-open' ) ;
129+
130+ // Set target
131+ popover . target = target ;
132+ await nextUpdate ( popover ) ;
133+
134+ popover . querySelector ( 'input' ) . focus ( ) ;
135+
136+ // Clear target
137+ popover . target = null ;
138+ await nextUpdate ( popover ) ;
139+
140+ // Close popover
141+ popover . opened = false ;
142+ await nextRender ( ) ;
143+
144+ expect ( document . activeElement ) . to . not . equal ( target ) ;
145+ } ) ;
88146 } ) ;
89147
90148 describe ( 'for' , ( ) => {
0 commit comments