@@ -116,7 +116,10 @@ describe('Tabs', () => {
116116 } ) ;
117117
118118 it ( 'should support hover' , async ( ) => {
119- let { getAllByRole} = renderTabs ( { } , { } , { className : ( { isHovered} ) => isHovered ? 'hover' : '' } ) ;
119+ let onHoverStart = jest . fn ( ) ;
120+ let onHoverChange = jest . fn ( ) ;
121+ let onHoverEnd = jest . fn ( ) ;
122+ let { getAllByRole} = renderTabs ( { } , { } , { className : ( { isHovered} ) => isHovered ? 'hover' : '' , onHoverStart, onHoverChange, onHoverEnd} ) ;
120123 let tab = getAllByRole ( 'tab' ) [ 0 ] ;
121124
122125 expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
@@ -125,10 +128,35 @@ describe('Tabs', () => {
125128 await user . hover ( tab ) ;
126129 expect ( tab ) . toHaveAttribute ( 'data-hovered' , 'true' ) ;
127130 expect ( tab ) . toHaveClass ( 'hover' ) ;
131+ expect ( onHoverStart ) . toHaveBeenCalledTimes ( 1 ) ;
132+ expect ( onHoverChange ) . toHaveBeenCalledTimes ( 1 ) ;
128133
129134 await user . unhover ( tab ) ;
130135 expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
131136 expect ( tab ) . not . toHaveClass ( 'hover' ) ;
137+ expect ( onHoverEnd ) . toHaveBeenCalledTimes ( 1 ) ;
138+ expect ( onHoverChange ) . toHaveBeenCalledTimes ( 2 ) ;
139+ } ) ;
140+
141+ it ( 'should not show hover state when item is not interactive' , async ( ) => {
142+ let onHoverStart = jest . fn ( ) ;
143+ let onHoverChange = jest . fn ( ) ;
144+ let onHoverEnd = jest . fn ( ) ;
145+ let { getAllByRole} = renderTabs ( { disabledKeys : [ 'a' , 'b' , 'c' ] } , { } , { className : ( { isHovered} ) => isHovered ? 'hover' : '' , onHoverStart, onHoverChange, onHoverEnd} ) ;
146+ let tab = getAllByRole ( 'tab' ) [ 0 ] ;
147+
148+ expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
149+ expect ( tab ) . not . toHaveClass ( 'hover' ) ;
150+ expect ( onHoverStart ) . not . toHaveBeenCalled ( ) ;
151+ expect ( onHoverChange ) . not . toHaveBeenCalled ( ) ;
152+ expect ( onHoverEnd ) . not . toHaveBeenCalled ( ) ;
153+
154+ await user . hover ( tab ) ;
155+ expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
156+ expect ( tab ) . not . toHaveClass ( 'hover' ) ;
157+ expect ( onHoverStart ) . not . toHaveBeenCalled ( ) ;
158+ expect ( onHoverChange ) . not . toHaveBeenCalled ( ) ;
159+ expect ( onHoverEnd ) . not . toHaveBeenCalled ( ) ;
132160 } ) ;
133161
134162 it ( 'should support focus ring' , async ( ) => {
0 commit comments