@@ -630,6 +630,58 @@ describe('Tab', () => {
630630 expect ( spyPrevent ) . toHaveBeenCalledTimes ( 2 )
631631 } )
632632
633+ it ( 'if keydown event is Home, handle it' , ( ) => {
634+ fixtureEl . innerHTML = [
635+ '<div class="nav">' ,
636+ ' <span id="tab1" class="nav-link" data-bs-toggle="tab"></span>' ,
637+ ' <span id="tab2" class="nav-link" data-bs-toggle="tab"></span>' ,
638+ ' <span id="tab3" class="nav-link" data-bs-toggle="tab"></span>' ,
639+ '</div>'
640+ ] . join ( '' )
641+
642+ const tabEl1 = fixtureEl . querySelector ( '#tab1' )
643+ const tabEl3 = fixtureEl . querySelector ( '#tab3' )
644+
645+ const tab3 = new Tab ( tabEl3 )
646+ tab3 . show ( )
647+
648+ const spyShown = jasmine . createSpy ( )
649+ tabEl1 . addEventListener ( 'shown.bs.tab' , spyShown )
650+
651+ const keydown = createEvent ( 'keydown' )
652+ keydown . key = 'Home'
653+
654+ tabEl3 . dispatchEvent ( keydown )
655+
656+ expect ( spyShown ) . toHaveBeenCalled ( )
657+ } )
658+
659+ it ( 'if keydown event is End, handle it' , ( ) => {
660+ fixtureEl . innerHTML = [
661+ '<div class="nav">' ,
662+ ' <span id="tab1" class="nav-link" data-bs-toggle="tab"></span>' ,
663+ ' <span id="tab2" class="nav-link" data-bs-toggle="tab"></span>' ,
664+ ' <span id="tab3" class="nav-link" data-bs-toggle="tab"></span>' ,
665+ '</div>'
666+ ] . join ( '' )
667+
668+ const tabEl1 = fixtureEl . querySelector ( '#tab1' )
669+ const tabEl3 = fixtureEl . querySelector ( '#tab3' )
670+
671+ const tab1 = new Tab ( tabEl1 )
672+ tab1 . show ( )
673+
674+ const spyShown = jasmine . createSpy ( )
675+ tabEl3 . addEventListener ( 'shown.bs.tab' , spyShown )
676+
677+ const keydown = createEvent ( 'keydown' )
678+ keydown . key = 'End'
679+
680+ tabEl1 . dispatchEvent ( keydown )
681+
682+ expect ( spyShown ) . toHaveBeenCalled ( )
683+ } )
684+
633685 it ( 'if keydown event is right arrow and next element is disabled' , ( ) => {
634686 fixtureEl . innerHTML = [
635687 '<div class="nav">' ,
@@ -711,6 +763,66 @@ describe('Tab', () => {
711763 expect ( spyFocus2 ) . not . toHaveBeenCalled ( )
712764 expect ( spyFocus1 ) . toHaveBeenCalledTimes ( 1 )
713765 } )
766+
767+ it ( 'if keydown event is Home and first element is disabled' , ( ) => {
768+ fixtureEl . innerHTML = [
769+ '<div class="nav">' ,
770+ ' <span id="tab1" class="nav-link disabled" data-bs-toggle="tab" disabled></span>' ,
771+ ' <span id="tab2" class="nav-link" data-bs-toggle="tab"></span>' ,
772+ ' <span id="tab3" class="nav-link" data-bs-toggle="tab"></span>' ,
773+ '</div>'
774+ ] . join ( '' )
775+
776+ const tabEl1 = fixtureEl . querySelector ( '#tab1' )
777+ const tabEl2 = fixtureEl . querySelector ( '#tab2' )
778+ const tabEl3 = fixtureEl . querySelector ( '#tab3' )
779+ const tab3 = new Tab ( tabEl3 )
780+
781+ tab3 . show ( )
782+
783+ const spyShown1 = jasmine . createSpy ( )
784+ const spyShown2 = jasmine . createSpy ( )
785+ tabEl1 . addEventListener ( 'shown.bs.tab' , spyShown1 )
786+ tabEl2 . addEventListener ( 'shown.bs.tab' , spyShown2 )
787+
788+ const keydown = createEvent ( 'keydown' )
789+ keydown . key = 'Home'
790+
791+ tabEl3 . dispatchEvent ( keydown )
792+
793+ expect ( spyShown1 ) . not . toHaveBeenCalled ( )
794+ expect ( spyShown2 ) . toHaveBeenCalled ( )
795+ } )
796+
797+ it ( 'if keydown event is End and last element is disabled' , ( ) => {
798+ fixtureEl . innerHTML = [
799+ '<div class="nav">' ,
800+ ' <span id="tab1" class="nav-link" data-bs-toggle="tab"></span>' ,
801+ ' <span id="tab2" class="nav-link" data-bs-toggle="tab"></span>' ,
802+ ' <span id="tab3" class="nav-link" data-bs-toggle="tab" disabled></span>' ,
803+ '</div>'
804+ ] . join ( '' )
805+
806+ const tabEl1 = fixtureEl . querySelector ( '#tab1' )
807+ const tabEl2 = fixtureEl . querySelector ( '#tab2' )
808+ const tabEl3 = fixtureEl . querySelector ( '#tab3' )
809+ const tab1 = new Tab ( tabEl1 )
810+
811+ tab1 . show ( )
812+
813+ const spyShown2 = jasmine . createSpy ( )
814+ const spyShown3 = jasmine . createSpy ( )
815+ tabEl2 . addEventListener ( 'shown.bs.tab' , spyShown2 )
816+ tabEl3 . addEventListener ( 'shown.bs.tab' , spyShown3 )
817+
818+ const keydown = createEvent ( 'keydown' )
819+ keydown . key = 'End'
820+
821+ tabEl1 . dispatchEvent ( keydown )
822+
823+ expect ( spyShown3 ) . not . toHaveBeenCalled ( )
824+ expect ( spyShown2 ) . toHaveBeenCalled ( )
825+ } )
714826 } )
715827
716828 describe ( 'jQueryInterface' , ( ) => {
0 commit comments