@@ -196,6 +196,26 @@ describe('MatSelectionList without forms', () => {
196196 expect ( ENTER_EVENT . defaultPrevented ) . toBe ( true ) ;
197197 } ) ;
198198
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+
199219 it ( 'should not be able to toggle a disabled option using SPACE' , ( ) => {
200220 const testListItem = listOptions [ 1 ] . nativeElement as HTMLElement ;
201221 const selectionModel = selectionList . componentInstance . selectedOptions ;
@@ -332,6 +352,20 @@ describe('MatSelectionList without forms', () => {
332352 expect ( event . defaultPrevented ) . toBe ( true ) ;
333353 } ) ;
334354
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+
335369 it ( 'should focus the last item when pressing END' , ( ) => {
336370 const manager = selectionList . componentInstance . _keyManager ;
337371 expect ( manager . activeItemIndex ) . toBe ( - 1 ) ;
@@ -343,6 +377,20 @@ describe('MatSelectionList without forms', () => {
343377 expect ( event . defaultPrevented ) . toBe ( true ) ;
344378 } ) ;
345379
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+
346394 it ( 'should select all items using ctrl + a' , ( ) => {
347395 const event = createKeyboardEvent ( 'keydown' , A , selectionList . nativeElement ) ;
348396 Object . defineProperty ( event , 'ctrlKey' , { get : ( ) => true } ) ;
0 commit comments