@@ -12,7 +12,7 @@ import {
12
12
reflects ,
13
13
renders ,
14
14
} from "../../tests/commonTests" ;
15
- import { GlobalTestProps , getFocusedElementProp } from "../../tests/utils" ;
15
+ import { GlobalTestProps , getFocusedElementProp , isElementFocused , skipAnimations } from "../../tests/utils" ;
16
16
17
17
describe ( "calcite-dropdown" , ( ) => {
18
18
const simpleDropdownHTML = html `
@@ -1232,5 +1232,118 @@ describe("calcite-dropdown", () => {
1232
1232
}
1233
1233
) ;
1234
1234
} ) ;
1235
+
1236
+ describe ( "keyboard navigation" , ( ) => {
1237
+ it ( "supports navigating through items with arrow keys" , async ( ) => {
1238
+ const page = await newE2EPage ( ) ;
1239
+ await page . setContent ( html `
1240
+ < calcite-dropdown >
1241
+ < calcite-button slot ="trigger "> Open</ calcite-button >
1242
+ < calcite-dropdown-group selection-mode ="single ">
1243
+ < calcite-dropdown-item id ="item-1 " selected > 1</ calcite-dropdown-item >
1244
+ < calcite-dropdown-item id ="item-2 "> 2</ calcite-dropdown-item >
1245
+ < calcite-dropdown-item id ="item-3 "> 3</ calcite-dropdown-item >
1246
+ </ calcite-dropdown-group >
1247
+ </ calcite-dropdown >
1248
+ ` ) ;
1249
+ await skipAnimations ( page ) ;
1250
+
1251
+ const dropdown = await page . find ( "calcite-dropdown" ) ;
1252
+ await dropdown . callMethod ( "setFocus" ) ;
1253
+ await page . waitForChanges ( ) ;
1254
+
1255
+ await page . keyboard . press ( "Enter" ) ;
1256
+ await page . waitForChanges ( ) ;
1257
+
1258
+ expect ( await isElementFocused ( page , "#item-1" ) ) . toBe ( true ) ;
1259
+
1260
+ await page . keyboard . press ( "ArrowDown" ) ;
1261
+ await page . waitForChanges ( ) ;
1262
+
1263
+ expect ( await isElementFocused ( page , "#item-2" ) ) . toBe ( true ) ;
1264
+
1265
+ await page . keyboard . press ( "ArrowDown" ) ;
1266
+ await page . waitForChanges ( ) ;
1267
+
1268
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1269
+
1270
+ await page . keyboard . press ( "ArrowDown" ) ;
1271
+ await page . waitForChanges ( ) ;
1272
+
1273
+ expect ( await isElementFocused ( page , "#item-1" ) ) . toBe ( true ) ;
1274
+
1275
+ await page . keyboard . press ( "ArrowUp" ) ;
1276
+ await page . waitForChanges ( ) ;
1277
+
1278
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1279
+
1280
+ await page . keyboard . press ( "ArrowUp" ) ;
1281
+ await page . waitForChanges ( ) ;
1282
+
1283
+ expect ( await isElementFocused ( page , "#item-2" ) ) . toBe ( true ) ;
1284
+
1285
+ await page . keyboard . press ( "ArrowUp" ) ;
1286
+ await page . waitForChanges ( ) ;
1287
+
1288
+ expect ( await isElementFocused ( page , "#item-1" ) ) . toBe ( true ) ;
1289
+
1290
+ await page . keyboard . press ( "ArrowUp" ) ;
1291
+ await page . waitForChanges ( ) ;
1292
+
1293
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1294
+ } ) ;
1295
+
1296
+ it ( "skips disabled and hidden items when navigating with arrow keys" , async ( ) => {
1297
+ const page = await newE2EPage ( ) ;
1298
+ await page . setContent ( html `
1299
+ < calcite-dropdown >
1300
+ < calcite-button slot ="trigger "> Open</ calcite-button >
1301
+ < calcite-dropdown-group selection-mode ="single ">
1302
+ < calcite-dropdown-item id ="item-1 " disabled > 1</ calcite-dropdown-item >
1303
+ < calcite-dropdown-item id ="item-1.5 " disabled > 1.5</ calcite-dropdown-item >
1304
+ < calcite-dropdown-item id ="item-2 " selected > 2</ calcite-dropdown-item >
1305
+ < calcite-dropdown-item id ="item-2.5 " hidden > 2.5</ calcite-dropdown-item >
1306
+ < calcite-dropdown-item id ="item-3 "> 3</ calcite-dropdown-item >
1307
+ < calcite-dropdown-item id ="item-4 " hidden > 4</ calcite-dropdown-item >
1308
+ </ calcite-dropdown-group >
1309
+ </ calcite-dropdown >
1310
+ ` ) ;
1311
+ await skipAnimations ( page ) ;
1312
+
1313
+ const dropdown = await page . find ( "calcite-dropdown" ) ;
1314
+ await dropdown . callMethod ( "setFocus" ) ;
1315
+ await page . waitForChanges ( ) ;
1316
+
1317
+ await page . keyboard . press ( "Enter" ) ;
1318
+ await page . waitForChanges ( ) ;
1319
+
1320
+ expect ( await isElementFocused ( page , "#item-2" ) ) . toBe ( true ) ;
1321
+
1322
+ await page . keyboard . press ( "ArrowDown" ) ;
1323
+ await page . waitForChanges ( ) ;
1324
+
1325
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1326
+
1327
+ await page . keyboard . press ( "ArrowDown" ) ;
1328
+ await page . waitForChanges ( ) ;
1329
+
1330
+ expect ( await isElementFocused ( page , "#item-2" ) ) . toBe ( true ) ;
1331
+
1332
+ await page . keyboard . press ( "ArrowUp" ) ;
1333
+ await page . waitForChanges ( ) ;
1334
+
1335
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1336
+
1337
+ await page . keyboard . press ( "ArrowUp" ) ;
1338
+ await page . waitForChanges ( ) ;
1339
+
1340
+ expect ( await isElementFocused ( page , "#item-2" ) ) . toBe ( true ) ;
1341
+
1342
+ await page . keyboard . press ( "ArrowUp" ) ;
1343
+ await page . waitForChanges ( ) ;
1344
+
1345
+ expect ( await isElementFocused ( page , "#item-3" ) ) . toBe ( true ) ;
1346
+ } ) ;
1347
+ } ) ;
1235
1348
} ) ;
1236
1349
} ) ;
0 commit comments