@@ -78,33 +78,24 @@ test('keep focus when click on menu', async () => {
7878  expect ( renderFn ) . lastCalledWith ( {  focused : false  } ) 
7979} ) 
8080
81- test ( 'restore  focus after calling blur on inner component ' ,  async  ( )  =>  { 
81+ test ( 'remove  focus and state  after calling blur' ,  async  ( )  =>  { 
8282  const  page  =  await  bootstrap ( ) 
83-   const  renderFn  =  jest . fn ( ) 
84-   const  onChangeFn  =  jest . fn ( ) 
85-   await  page . exposeFunction ( 'renderFn' ,  renderFn ) 
86-   await  page . exposeFunction ( 'onChangeFn' ,  onChangeFn ) 
8783
8884  await  page . evaluate ( ( )  =>  { 
8985    const  React  =  window . React 
90-     const  FocusManager  =  window . ReactPowerPlug . FocusManager 
86+     const  {   FocusManager }   =  window . ReactPowerPlug 
9187
9288    const  App  =  ( )  =>  ( 
93-       < FocusManager   onChange = { window . onChangeFn } > 
89+       < FocusManager > 
9490        { ( {  focused,  blur,  bind } )  =>  { 
95-           window . renderFn ( {  focused  } ) 
96-           const  stopPropagation  =  e   =>   e . stopPropagation ( ) 
91+           window . blurFocusManager   =   blur 
92+           const  style  =  {   width :  100 ,   height :  100   } 
9793          return  ( 
9894            < > 
99-               < div  id = "outer"  style = { {  width : 100 ,  height : 100  } }  { ...bind } > 
100-                 < div 
101-                   id = "inner" 
102-                   style = { {  width : 50 ,  height : 50  } } 
103-                   onClick = { blur } 
104-                   tabIndex = { - 1 } 
105-                   onFocus = { stopPropagation } 
106-                 /> 
107-               </ div > 
95+               < div  id = "result" > { focused  ? 'focused'  : 'blured' } </ div > 
96+               < div  id = "item1"  style = { style }  { ...bind }  /> 
97+               < div  id = "item2"  style = { style }  { ...bind }  onClick = { blur }  /> 
98+               < div  id = "item3"  style = { style }  tabIndex = { - 1 }  /> 
10899            </ > 
109100          ) 
110101        } } 
@@ -114,14 +105,32 @@ test('restore focus after calling blur on inner component', async () => {
114105    window . render ( < App  /> ) 
115106  } ) 
116107
117-   expect ( renderFn ) . lastCalledWith ( {  focused : false  } ) 
118-   await  page . click ( '#outer' ) 
119-   expect ( renderFn ) . lastCalledWith ( {  focused : true  } ) 
120-   expect ( onChangeFn ) . lastCalledWith ( true ) 
121-   await  page . click ( '#inner' ) 
122-   expect ( renderFn ) . lastCalledWith ( {  focused : false  } ) 
123-   expect ( onChangeFn ) . lastCalledWith ( false ) 
124-   await  page . click ( '#outer' ) 
125-   expect ( renderFn ) . lastCalledWith ( {  focused : true  } ) 
126-   expect ( onChangeFn ) . lastCalledWith ( true ) 
108+   const  getTextContent  =  node  =>  node . textContent 
109+   const  isActiveElement  =  node  =>  node  ===  document . activeElement 
110+ 
111+   expect ( await  page . $eval ( '#result' ,  getTextContent ) ) . toEqual ( 'blured' ) 
112+ 
113+   // focused on click 
114+   await  page . click ( '#item1' ) 
115+   expect ( await  page . $eval ( '#result' ,  getTextContent ) ) . toEqual ( 'focused' ) 
116+   expect ( await  page . $eval ( '#item1' ,  isActiveElement ) ) . toEqual ( true ) 
117+   expect ( await  page . $eval ( '#item2' ,  isActiveElement ) ) . toEqual ( false ) 
118+ 
119+   // blured on blur() 
120+   await  page . evaluate ( ( )  =>  window . blurFocusManager ( ) ) 
121+   expect ( await  page . $eval ( '#result' ,  getTextContent ) ) . toEqual ( 'blured' ) 
122+   expect ( await  page . $eval ( '#item1' ,  isActiveElement ) ) . toEqual ( false ) 
123+   expect ( await  page . $eval ( '#item2' ,  isActiveElement ) ) . toEqual ( false ) 
124+ 
125+   // focused and immediately blured on click with blur() in it 
126+   await  page . click ( '#item2' ) 
127+   expect ( await  page . $eval ( '#result' ,  getTextContent ) ) . toEqual ( 'blured' ) 
128+   expect ( await  page . $eval ( '#item1' ,  isActiveElement ) ) . toEqual ( false ) 
129+   expect ( await  page . $eval ( '#item2' ,  isActiveElement ) ) . toEqual ( false ) 
130+ 
131+   // keep focus not registered in manager after blur() 
132+   await  page . click ( '#item3' ) 
133+   expect ( await  page . $eval ( '#item3' ,  isActiveElement ) ) . toEqual ( true ) 
134+   await  page . evaluate ( ( )  =>  window . blurFocusManager ( ) ) 
135+   expect ( await  page . $eval ( '#item3' ,  isActiveElement ) ) . toEqual ( true ) 
127136} ) 
0 commit comments