@@ -196,6 +196,26 @@ describe('MatSelectionList without forms', () => {
196
196
expect ( ENTER_EVENT . defaultPrevented ) . toBe ( true ) ;
197
197
} ) ;
198
198
199
+ it ( 'should not be able to toggle an item when pressing a modifier key' , ( ) => {
200
+ const testListItem = listOptions [ 1 ] . nativeElement as HTMLElement ;
201
+ const selectList =
202
+ selectionList . injector . get < MatSelectionList > ( MatSelectionList ) . selectedOptions ;
203
+
204
+ expect ( selectList . selected . length ) . toBe ( 0 ) ;
205
+
206
+ [ ENTER , SPACE ] . forEach ( key => {
207
+ const event = createKeyboardEvent ( 'keydown' , key , testListItem ) ;
208
+ Object . defineProperty ( event , 'ctrlKey' , { get : ( ) => true } ) ;
209
+
210
+ dispatchFakeEvent ( testListItem , 'focus' ) ;
211
+ selectionList . componentInstance . _keydown ( event ) ;
212
+ fixture . detectChanges ( ) ;
213
+ expect ( event . defaultPrevented ) . toBe ( false ) ;
214
+ } ) ;
215
+
216
+ expect ( selectList . selected . length ) . toBe ( 0 ) ;
217
+ } ) ;
218
+
199
219
it ( 'should not be able to toggle a disabled option using SPACE' , ( ) => {
200
220
const testListItem = listOptions [ 1 ] . nativeElement as HTMLElement ;
201
221
const selectionModel = selectionList . componentInstance . selectedOptions ;
@@ -332,6 +352,20 @@ describe('MatSelectionList without forms', () => {
332
352
expect ( event . defaultPrevented ) . toBe ( true ) ;
333
353
} ) ;
334
354
355
+ it ( 'should not change focus when pressing HOME with a modifier key' , ( ) => {
356
+ const manager = selectionList . componentInstance . _keyManager ;
357
+ expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
358
+
359
+ const event = createKeyboardEvent ( 'keydown' , HOME ) ;
360
+ Object . defineProperty ( event , 'shiftKey' , { get : ( ) => true } ) ;
361
+
362
+ dispatchEvent ( selectionList . nativeElement , event ) ;
363
+ fixture . detectChanges ( ) ;
364
+
365
+ expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
366
+ expect ( event . defaultPrevented ) . toBe ( false ) ;
367
+ } ) ;
368
+
335
369
it ( 'should focus the last item when pressing END' , ( ) => {
336
370
const manager = selectionList . componentInstance . _keyManager ;
337
371
expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
@@ -343,6 +377,20 @@ describe('MatSelectionList without forms', () => {
343
377
expect ( event . defaultPrevented ) . toBe ( true ) ;
344
378
} ) ;
345
379
380
+ it ( 'should not change focus when pressing END with a modifier key' , ( ) => {
381
+ const manager = selectionList . componentInstance . _keyManager ;
382
+ expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
383
+
384
+ const event = createKeyboardEvent ( 'keydown' , END ) ;
385
+ Object . defineProperty ( event , 'shiftKey' , { get : ( ) => true } ) ;
386
+
387
+ dispatchEvent ( selectionList . nativeElement , event ) ;
388
+ fixture . detectChanges ( ) ;
389
+
390
+ expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
391
+ expect ( event . defaultPrevented ) . toBe ( false ) ;
392
+ } ) ;
393
+
346
394
it ( 'should select all items using ctrl + a' , ( ) => {
347
395
const event = createKeyboardEvent ( 'keydown' , A , selectionList . nativeElement ) ;
348
396
Object . defineProperty ( event , 'ctrlKey' , { get : ( ) => true } ) ;
0 commit comments