@@ -5,14 +5,15 @@ async function setup(page: Page, selector: string) {
5
5
6
6
const driver = createTestDriver ( page . getByTestId ( selector ) ) ;
7
7
8
- const { getListbox, getTrigger, getOptions, getValue } = driver ;
8
+ const { getListbox, getTrigger, getOptions, getValue, openListbox } = driver ;
9
9
10
10
return {
11
11
driver,
12
12
getListbox,
13
13
getTrigger,
14
14
getOptions,
15
15
getValue,
16
+ openListbox,
16
17
} ;
17
18
}
18
19
@@ -31,11 +32,9 @@ test.describe('Mouse Behavior', () => {
31
32
test ( `GIVEN a hero select with an open listbox
32
33
WHEN the trigger is clicked
33
34
THEN close the listbox AND aria-expanded should be false` , async ( { page } ) => {
34
- const { getTrigger, getListbox } = await setup ( page , 'select-hero-test' ) ;
35
+ const { getTrigger, getListbox, openListbox } = await setup ( page , 'select-hero-test' ) ;
35
36
36
- await getTrigger ( ) . click ( ) ;
37
- // should be open initially
38
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
37
+ await openListbox ( 'click' ) ;
39
38
40
39
await getTrigger ( ) . click ( ) ;
41
40
await expect ( getListbox ( ) ) . toBeHidden ( ) ;
@@ -45,11 +44,12 @@ test.describe('Mouse Behavior', () => {
45
44
test ( `GIVEN a hero select with an open listbox
46
45
WHEN an option is clicked
47
46
THEN close the listbox AND aria-expanded should be false` , async ( { page } ) => {
48
- const { getTrigger, getListbox, getOptions } = await setup ( page , 'select-hero-test' ) ;
47
+ const { getTrigger, getListbox, getOptions, openListbox } = await setup (
48
+ page ,
49
+ 'select-hero-test' ,
50
+ ) ;
49
51
50
- await getTrigger ( ) . click ( ) ;
51
- // should be open initially
52
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
52
+ await openListbox ( 'click' ) ;
53
53
54
54
const options = await getOptions ( ) ;
55
55
options [ 0 ] . click ( ) ;
@@ -61,11 +61,9 @@ test.describe('Mouse Behavior', () => {
61
61
test ( `GIVEN a hero select with an open listbox
62
62
WHEN the 2nd option is clicked
63
63
THEN the 2nd option should have aria-selected` , async ( { page } ) => {
64
- const { getTrigger , getListbox , getOptions } = await setup ( page , 'select-hero-test' ) ;
64
+ const { getOptions , openListbox } = await setup ( page , 'select-hero-test' ) ;
65
65
66
- await getTrigger ( ) . click ( ) ;
67
- // should be open initially
68
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
66
+ await openListbox ( 'click' ) ;
69
67
70
68
const options = await getOptions ( ) ;
71
69
options [ 1 ] . click ( ) ;
@@ -76,14 +74,9 @@ test.describe('Mouse Behavior', () => {
76
74
test ( `GIVEN a hero select with an open listbox
77
75
WHEN the 3rd option is clicked
78
76
THEN the 3rd option should be the selected value` , async ( { page } ) => {
79
- const { getTrigger, getListbox, getOptions, getValue } = await setup (
80
- page ,
81
- 'select-hero-test' ,
82
- ) ;
77
+ const { getOptions, getValue, openListbox } = await setup ( page , 'select-hero-test' ) ;
83
78
84
- await getTrigger ( ) . click ( ) ;
85
- // should be open initially
86
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
79
+ await openListbox ( 'click' ) ;
87
80
88
81
const options = await getOptions ( ) ;
89
82
await options [ 2 ] . click ( ) ;
@@ -110,11 +103,12 @@ test.describe('Keyboard Behavior', () => {
110
103
test ( `GIVEN a hero select with an open listbox
111
104
WHEN focusing the trigger and hitting enter
112
105
THEN close the listbox AND aria-expanded should be false` , async ( { page } ) => {
113
- const { getTrigger, getListbox } = await setup ( page , 'select-hero-test' ) ;
106
+ const { getTrigger, getListbox, openListbox } = await setup (
107
+ page ,
108
+ 'select-hero-test' ,
109
+ ) ;
114
110
115
- await getTrigger ( ) . click ( ) ;
116
- // should be open initially
117
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
111
+ await openListbox ( 'click' ) ;
118
112
119
113
await getTrigger ( ) . focus ( ) ;
120
114
await getTrigger ( ) . press ( 'Enter' ) ;
@@ -137,12 +131,12 @@ test.describe('Keyboard Behavior', () => {
137
131
test ( `GIVEN a hero select with an open listbox
138
132
WHEN pressing the space key
139
133
THEN close listbox AND aria-expanded should be false` , async ( { page } ) => {
140
- const { getTrigger, getListbox } = await setup ( page , 'select-hero-test' ) ;
134
+ const { getTrigger, getListbox, openListbox } = await setup (
135
+ page ,
136
+ 'select-hero-test' ,
137
+ ) ;
141
138
142
- await getTrigger ( ) . focus ( ) ;
143
- await getTrigger ( ) . press ( 'Space' ) ;
144
- // should be open initially
145
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
139
+ await openListbox ( 'Space' ) ;
146
140
147
141
await getTrigger ( ) . focus ( ) ;
148
142
await getTrigger ( ) . press ( 'Space' ) ;
@@ -164,11 +158,12 @@ test.describe('Keyboard Behavior', () => {
164
158
WHEN pressing the escape key
165
159
THEN the listbox should close
166
160
AND aria-expanded should be false` , async ( { page } ) => {
167
- const { getTrigger, getListbox } = await setup ( page , 'select-hero-test' ) ;
161
+ const { getTrigger, getListbox, openListbox } = await setup (
162
+ page ,
163
+ 'select-hero-test' ,
164
+ ) ;
168
165
169
- await getTrigger ( ) . click ( ) ;
170
- // should be open initially
171
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
166
+ await openListbox ( 'click' ) ;
172
167
173
168
await getTrigger ( ) . focus ( ) ;
174
169
await getTrigger ( ) . press ( 'Escape' ) ;
@@ -249,14 +244,12 @@ test.describe('Keyboard Behavior', () => {
249
244
test ( `GIVEN an open hero select
250
245
WHEN pressing the end key
251
246
THEN the last option should have data-highlighted` , async ( { page } ) => {
252
- const { getTrigger, getListbox , getOptions } = await setup (
247
+ const { getTrigger, getOptions , openListbox } = await setup (
253
248
page ,
254
249
'select-hero-test' ,
255
250
) ;
256
251
257
- await getTrigger ( ) . click ( ) ;
258
- // should be open initially
259
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
252
+ await openListbox ( 'click' ) ;
260
253
261
254
await getTrigger ( ) . focus ( ) ;
262
255
await getTrigger ( ) . press ( 'End' ) ;
@@ -269,14 +262,12 @@ test.describe('Keyboard Behavior', () => {
269
262
test ( `GIVEN an open hero select
270
263
WHEN pressing the home key after the end key
271
264
THEN the first option should have data-highlighted` , async ( { page } ) => {
272
- const { getTrigger, getListbox , getOptions } = await setup (
265
+ const { getTrigger, getOptions , openListbox } = await setup (
273
266
page ,
274
267
'select-hero-test' ,
275
268
) ;
276
269
277
- await getTrigger ( ) . click ( ) ;
278
- // should be open initially
279
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
270
+ await openListbox ( 'click' ) ;
280
271
281
272
// to last index
282
273
await getTrigger ( ) . focus ( ) ;
@@ -293,15 +284,12 @@ test.describe('Keyboard Behavior', () => {
293
284
test ( `GIVEN an open hero select
294
285
WHEN the first option is highlighted and the down arrow key is pressed
295
286
THEN the second option should have data-highlighted` , async ( { page } ) => {
296
- const { getTrigger, getListbox , getOptions } = await setup (
287
+ const { getTrigger, getOptions , openListbox } = await setup (
297
288
page ,
298
289
'select-hero-test' ,
299
290
) ;
300
291
301
- await getTrigger ( ) . focus ( ) ;
302
- await getTrigger ( ) . press ( 'Enter' ) ;
303
- // should be open initially
304
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
292
+ await openListbox ( 'Enter' ) ;
305
293
306
294
// first index highlighted
307
295
const options = await getOptions ( ) ;
@@ -315,15 +303,12 @@ test.describe('Keyboard Behavior', () => {
315
303
test ( `GIVEN an open hero select
316
304
WHEN the third option is highlighted and the up arrow key is pressed
317
305
THEN the second option should have data-highlighted` , async ( { page } ) => {
318
- const { getTrigger, getListbox , getOptions } = await setup (
306
+ const { getTrigger, getOptions , openListbox } = await setup (
319
307
page ,
320
308
'select-hero-test' ,
321
309
) ;
322
310
323
- await getTrigger ( ) . focus ( ) ;
324
- await getTrigger ( ) . press ( 'Enter' ) ;
325
- // should be open initially
326
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
311
+ await openListbox ( 'Enter' ) ;
327
312
328
313
const options = await getOptions ( ) ;
329
314
await expect ( options [ 0 ] ) . toHaveAttribute ( 'data-highlighted' ) ;
@@ -339,15 +324,12 @@ test.describe('Keyboard Behavior', () => {
339
324
THEN the data-highlighted option should not change on re-open` , async ( {
340
325
page,
341
326
} ) => {
342
- const { getTrigger, getListbox, getOptions } = await setup (
327
+ const { getTrigger, getListbox, getOptions, openListbox } = await setup (
343
328
page ,
344
329
'select-hero-test' ,
345
330
) ;
346
331
347
- await getTrigger ( ) . focus ( ) ;
348
- await getTrigger ( ) . press ( 'Enter' ) ;
349
- // should be open initially
350
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
332
+ await openListbox ( 'Enter' ) ;
351
333
352
334
// second option highlighted
353
335
const options = await getOptions ( ) ;
@@ -368,15 +350,12 @@ test.describe('Keyboard Behavior', () => {
368
350
THEN the listbox should be closed and aria-expanded false` , async ( {
369
351
page,
370
352
} ) => {
371
- const { getTrigger, getListbox, getOptions } = await setup (
353
+ const { getTrigger, getListbox, getOptions, openListbox } = await setup (
372
354
page ,
373
355
'select-hero-test' ,
374
356
) ;
375
357
376
- await getTrigger ( ) . focus ( ) ;
377
- await getTrigger ( ) . press ( 'Enter' ) ;
378
- // should be open initially
379
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
358
+ await openListbox ( 'Enter' ) ;
380
359
381
360
const options = await getOptions ( ) ;
382
361
await expect ( options [ 0 ] ) . toHaveAttribute ( 'data-highlighted' ) ;
@@ -390,15 +369,12 @@ test.describe('Keyboard Behavior', () => {
390
369
AND the Enter key is pressed
391
370
THEN option value should be the selected value
392
371
AND should have an aria-selected of true` , async ( { page } ) => {
393
- const { getTrigger, getListbox , getOptions, getValue } = await setup (
372
+ const { getTrigger, getOptions, getValue, openListbox } = await setup (
394
373
page ,
395
374
'select-hero-test' ,
396
375
) ;
397
376
398
- await getTrigger ( ) . focus ( ) ;
399
- await getTrigger ( ) . press ( 'Enter' ) ;
400
- // should be open initially
401
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
377
+ await openListbox ( 'Enter' ) ;
402
378
403
379
const options = await getOptions ( ) ;
404
380
await expect ( options [ 0 ] ) . toHaveAttribute ( 'data-highlighted' ) ;
@@ -416,15 +392,12 @@ test.describe('Keyboard Behavior', () => {
416
392
THEN the listbox should be closed and aria-expanded false` , async ( {
417
393
page,
418
394
} ) => {
419
- const { getTrigger, getListbox, getOptions } = await setup (
395
+ const { getTrigger, getListbox, getOptions, openListbox } = await setup (
420
396
page ,
421
397
'select-hero-test' ,
422
398
) ;
423
399
424
- await getTrigger ( ) . focus ( ) ;
425
- await getTrigger ( ) . press ( 'Space' ) ;
426
- // should be open initially
427
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
400
+ await openListbox ( 'Space' ) ;
428
401
429
402
// second option highlighted
430
403
const options = await getOptions ( ) ;
@@ -440,15 +413,12 @@ test.describe('Disabled', () => {
440
413
test ( `GIVEN an open disabled select with the first option disabled
441
414
WHEN clicking the disabled option
442
415
It should have aria-disabled` , async ( { page } ) => {
443
- const { getTrigger, getListbox , getOptions } = await setup (
416
+ const { getTrigger, getOptions , openListbox } = await setup (
444
417
page ,
445
418
'select-disabled-test' ,
446
419
) ;
447
420
448
- await getTrigger ( ) . focus ( ) ;
449
- await getTrigger ( ) . press ( 'Enter' ) ;
450
- // should be open initially
451
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
421
+ await openListbox ( 'Enter' ) ;
452
422
453
423
await getTrigger ( ) . focus ( ) ;
454
424
await getTrigger ( ) . press ( 'ArrowDown' ) ;
@@ -459,15 +429,12 @@ test.describe('Disabled', () => {
459
429
test ( `GIVEN an open disabled select with the first option disabled
460
430
WHEN clicking the disabled option
461
431
THEN the listbox should stay open` , async ( { page } ) => {
462
- const { getTrigger , getListbox, getOptions } = await setup (
432
+ const { getListbox, getOptions, openListbox } = await setup (
463
433
page ,
464
434
'select-disabled-test' ,
465
435
) ;
466
436
467
- await getTrigger ( ) . focus ( ) ;
468
- await getTrigger ( ) . press ( 'Enter' ) ;
469
- // should be open initially
470
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
437
+ await openListbox ( 'Enter' ) ;
471
438
472
439
const options = await getOptions ( ) ;
473
440
// eslint-disable-next-line playwright/no-force-option
@@ -478,31 +445,22 @@ test.describe('Disabled', () => {
478
445
test ( `GIVEN an open disabled select
479
446
WHEN first option is disabled
480
447
THEN the second option should have data-highlighted` , async ( { page } ) => {
481
- const { getTrigger, getListbox, getOptions } = await setup (
482
- page ,
483
- 'select-disabled-test' ,
484
- ) ;
448
+ const { getOptions, openListbox } = await setup ( page , 'select-disabled-test' ) ;
485
449
486
- await getTrigger ( ) . focus ( ) ;
487
- await getTrigger ( ) . press ( 'ArrowDown' ) ;
488
- // should be open initially
489
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
450
+ await openListbox ( 'ArrowDown' ) ;
490
451
const options = await getOptions ( ) ;
491
452
await expect ( options [ 1 ] ) . toHaveAttribute ( 'data-highlighted' ) ;
492
453
} ) ;
493
454
494
455
test ( `GIVEN an open disabled select
495
456
WHEN the last option is disabled and the end key is pressed
496
457
THEN the second last index should have data-highlighted` , async ( { page } ) => {
497
- const { getTrigger, getListbox , getOptions } = await setup (
458
+ const { getTrigger, getOptions , openListbox } = await setup (
498
459
page ,
499
460
'select-disabled-test' ,
500
461
) ;
501
462
502
- await getTrigger ( ) . focus ( ) ;
503
- await getTrigger ( ) . press ( 'ArrowDown' ) ;
504
- // should be open initially
505
- await expect ( getListbox ( ) ) . toBeVisible ( ) ;
463
+ await openListbox ( 'ArrowDown' ) ;
506
464
await getTrigger ( ) . press ( 'End' ) ;
507
465
const options = await getOptions ( ) ;
508
466
await expect ( options [ options . length - 2 ] ) . toHaveAttribute ( 'data-highlighted' ) ;
0 commit comments