@@ -116,7 +116,10 @@ describe('Tabs', () => {
116
116
} ) ;
117
117
118
118
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} ) ;
120
123
let tab = getAllByRole ( 'tab' ) [ 0 ] ;
121
124
122
125
expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
@@ -125,10 +128,35 @@ describe('Tabs', () => {
125
128
await user . hover ( tab ) ;
126
129
expect ( tab ) . toHaveAttribute ( 'data-hovered' , 'true' ) ;
127
130
expect ( tab ) . toHaveClass ( 'hover' ) ;
131
+ expect ( onHoverStart ) . toHaveBeenCalledTimes ( 1 ) ;
132
+ expect ( onHoverChange ) . toHaveBeenCalledTimes ( 1 ) ;
128
133
129
134
await user . unhover ( tab ) ;
130
135
expect ( tab ) . not . toHaveAttribute ( 'data-hovered' ) ;
131
136
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 ( ) ;
132
160
} ) ;
133
161
134
162
it ( 'should support focus ring' , async ( ) => {
0 commit comments