1
1
import { expect , test , type Page } from '@playwright/test' ;
2
- import { createTestDriver } from './popover.driver' ;
2
+ import { PopoverOpenKeys , createTestDriver } from './popover.driver' ;
3
3
4
4
async function setup ( page : Page , exampleName : string ) {
5
5
await page . goto ( `/headless/popover/${ exampleName } ` ) ;
@@ -184,44 +184,37 @@ test.describe('Mouse Behavior', () => {
184
184
} ) ;
185
185
186
186
test . describe ( 'Keyboard Behavior' , ( ) => {
187
- for ( const key of [ 'Enter' , 'Space' ] ) {
188
- test ( `GIVEN a closed hero popover
189
- WHEN focusing on the button and pressing the '${ key } ' key
190
- THEN the popover should open` , async ( { page } ) => {
187
+ for ( const key of [ 'Enter' , 'Space' ] as PopoverOpenKeys [ ] ) {
188
+ test ( `GIVEN a closed popover
189
+ WHEN focusing on the button and pressing the '${ key } ' key
190
+ THEN the popover should open` , async ( { page } ) => {
191
191
const { driver : d } = await setup ( page , 'hero' ) ;
192
192
await expect ( d . getPopover ( ) ) . toBeHidden ( ) ;
193
193
194
194
await d . getTrigger ( ) . press ( key ) ;
195
-
196
195
await expect ( d . getPopover ( ) ) . toBeVisible ( ) ;
197
196
} ) ;
198
197
199
- test ( `GIVEN a open hero popover
200
- WHEN focusing on the button and pressing the '${ key } ' key
201
- THEN the popover should close` , async ( { page } ) => {
198
+ test ( `GIVEN an open popover
199
+ WHEN focusing on the button and pressing the '${ key } ' key
200
+ THEN the popover should close` , async ( { page } ) => {
202
201
const { driver : d } = await setup ( page , 'hero' ) ;
203
202
204
203
// Open the popover
205
- await d . getTrigger ( ) . press ( key ) ;
204
+ await d . openPopover ( key ) ;
206
205
207
- await expect ( d . getPopover ( ) ) . toBeVisible ( ) ;
208
-
209
- // Close the popover
210
206
await d . getTrigger ( ) . press ( key ) ;
211
-
212
207
await expect ( d . getPopover ( ) ) . toBeHidden ( ) ;
213
208
} ) ;
214
209
}
215
210
216
- test ( `GIVEN a open hero popover
217
- WHEN focusing on the button and pressing the 'Escape' key
218
- THEN the popover should close and the trigger be focused` , async ( { page } ) => {
211
+ test ( `GIVEN an open popover
212
+ WHEN focusing on the button and pressing the 'Escape' key
213
+ THEN the popover should close and the trigger be focused` , async ( { page } ) => {
219
214
const { driver : d } = await setup ( page , 'hero' ) ;
220
215
221
216
// Open the popover
222
- await d . getTrigger ( ) . press ( 'Enter' ) ;
223
-
224
- await expect ( d . getPopover ( ) ) . toBeVisible ( ) ;
217
+ await d . openPopover ( 'Enter' ) ;
225
218
226
219
// Close the popover
227
220
page . keyboard . press ( 'Escape' ) ;
@@ -230,9 +223,9 @@ test.describe('Keyboard Behavior', () => {
230
223
await expect ( d . getTrigger ( ) ) . toBeFocused ( ) ;
231
224
} ) ;
232
225
233
- test ( `GIVEN a programmatic popover with a programmatic trigger
234
- WHEN focusing on the button and pressing the 'o' key
235
- THEN the popover should open ` , async ( { page } ) => {
226
+ test ( `GIVEN a popover
227
+ WHEN focusing on the button and pressing the 'o' key
228
+ THEN the popover should be programmatically opened ` , async ( { page } ) => {
236
229
const { driver : d } = await setup ( page , 'programmatic' ) ;
237
230
238
231
await expect ( d . getPopover ( ) ) . toBeHidden ( ) ;
@@ -249,44 +242,37 @@ test.describe('Keyboard Behavior', () => {
249
242
await expect ( d . getPopover ( ) ) . toBeVisible ( ) ;
250
243
} ) ;
251
244
test ( `GIVEN an open auto popover
252
- WHEN the first trigger open and the focus changes to the second popover
253
- THEN the first popover should close and the second one appear` , async ( { page } ) => {
245
+ WHEN the first trigger opens
246
+ AND the focus changes to the second popover
247
+ THEN the first popover should close and the second one appear` , async ( {
248
+ page,
249
+ } ) => {
254
250
const { driver : d } = await setup ( page , 'auto' ) ;
255
251
256
- const [ firstPopOver , secondPopOver ] = await d . getAllPopovers ( ) ;
257
- const [ firstPopoverTrigger , secondPopoverTrigger ] = await d . getAllTriggers ( ) ;
252
+ const firstPopover = d . getPopover ( ) . nth ( 0 ) ;
253
+ const secondPopover = d . getPopover ( ) . nth ( 1 ) ;
254
+ const firstTrigger = d . getTrigger ( ) . nth ( 0 ) ;
255
+ const secondTrigger = d . getTrigger ( ) . nth ( 1 ) ;
258
256
259
- await expect ( firstPopOver ) . toBeHidden ( ) ;
260
- await expect ( secondPopOver ) . toBeHidden ( ) ;
257
+ await expect ( firstPopover ) . toBeHidden ( ) ;
258
+ await expect ( secondPopover ) . toBeHidden ( ) ;
261
259
262
- await firstPopoverTrigger . press ( 'Enter' ) ;
263
- await expect ( firstPopOver ) . toBeVisible ( ) ;
264
- await firstPopoverTrigger . press ( 'Tab' ) ;
265
- await expect ( secondPopoverTrigger ) . toBeFocused ( ) ;
260
+ await d . openPopover ( 'Enter' , 0 ) ;
261
+ await firstTrigger . press ( 'Tab' ) ;
266
262
267
- await secondPopoverTrigger . press ( 'Enter' ) ;
268
- await expect ( secondPopOver ) . toBeVisible ( ) ;
263
+ await expect ( secondTrigger ) . toBeFocused ( ) ;
264
+ await d . openPopover ( 'Enter' , 1 ) ;
269
265
270
- await expect ( firstPopOver ) . toBeHidden ( ) ;
266
+ await expect ( firstPopover ) . toBeHidden ( ) ;
271
267
} ) ;
272
268
273
269
test ( `GIVEN a pair of manual popovers
274
270
WHEN clicking the first trigger on the page and then clicking the second trigger
275
271
THEN then both popovers should be opened` , async ( { page } ) => {
276
272
const { driver : d } = await setup ( page , 'manual' ) ;
277
273
278
- const [ firstPopOver , secondPopOver ] = await d . getAllPopovers ( ) ;
279
- const [ firstPopoverTrigger , secondPopoverTrigger ] = await d . getAllTriggers ( ) ;
280
-
281
- await expect ( firstPopOver ) . toBeHidden ( ) ;
282
- await expect ( secondPopOver ) . toBeHidden ( ) ;
283
-
284
- await firstPopoverTrigger . press ( 'Enter' ) ;
285
-
286
- await secondPopoverTrigger . press ( 'Enter' ) ;
287
-
288
- await expect ( firstPopOver ) . toBeVisible ( ) ;
289
- await expect ( secondPopOver ) . toBeVisible ( ) ;
274
+ await d . openPopover ( 'click' , 0 ) ;
275
+ await d . openPopover ( 'click' , 1 ) ;
290
276
} ) ;
291
277
292
278
test ( `GIVEN a pair of manual opened popovers
0 commit comments