@@ -132,6 +132,7 @@ describe('DropdownMenu', function () {
132
132
133
133
it ( 'renders submenus' , async function ( ) {
134
134
const onAction = jest . fn ( ) ;
135
+ const onOpenChange = jest . fn ( ) ;
135
136
136
137
render (
137
138
< DropdownMenu
@@ -154,10 +155,12 @@ describe('DropdownMenu', function () {
154
155
} ,
155
156
] }
156
157
triggerLabel = "Menu"
158
+ onOpenChange = { onOpenChange }
157
159
/>
158
160
) ;
159
161
160
162
await userEvent . click ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) ;
163
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 1 ) ;
161
164
162
165
// Sub item won't be visible until we hover over its parent
163
166
expect (
@@ -190,26 +193,31 @@ describe('DropdownMenu', function () {
190
193
expect ( onAction ) . toHaveBeenCalled ( ) ;
191
194
192
195
// Entire menu system is closed
196
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 2 ) ;
193
197
expect ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) . toHaveAttribute (
194
198
'aria-expanded' ,
195
199
'false'
196
200
) ;
197
201
198
202
// Pressing Esc closes the entire menu system
199
203
await userEvent . click ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) ;
204
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 3 ) ;
200
205
await userEvent . hover ( screen . getByRole ( 'menuitemradio' , { name : 'Item' } ) ) ;
201
206
await userEvent . hover ( screen . getByRole ( 'menuitemradio' , { name : 'Sub Item' } ) ) ;
202
207
await userEvent . keyboard ( '{Escape}' ) ;
208
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 4 ) ;
203
209
expect ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) . toHaveAttribute (
204
210
'aria-expanded' ,
205
211
'false'
206
212
) ;
207
213
208
214
// Clicking outside closes the entire menu system
209
215
await userEvent . click ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) ;
216
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 5 ) ;
210
217
await userEvent . hover ( screen . getByRole ( 'menuitemradio' , { name : 'Item' } ) ) ;
211
218
await userEvent . hover ( screen . getByRole ( 'menuitemradio' , { name : 'Sub Item' } ) ) ;
212
219
await userEvent . click ( document . body ) ;
220
+ expect ( onOpenChange ) . toHaveBeenCalledTimes ( 6 ) ;
213
221
expect ( screen . getByRole ( 'button' , { name : 'Menu' } ) ) . toHaveAttribute (
214
222
'aria-expanded' ,
215
223
'false'
0 commit comments