@@ -454,6 +454,83 @@ describe('tabs', () => {
454
454
wrapper . destroy ( )
455
455
} )
456
456
457
+ it ( 'pressing space on tab activates the tab, and tab emits click event' , async ( ) => {
458
+ const App = Vue . extend ( {
459
+ render ( h ) {
460
+ return h ( BTabs , { props : { value : 0 , noKeyNav : true } } , [
461
+ h ( BTab , { props : { title : 'one' } } , 'tab 0' ) ,
462
+ h ( BTab , { props : { title : 'two' } } , 'tab 1' ) ,
463
+ h ( BTab , { props : { title : 'three' } } , 'tab 2' )
464
+ ] )
465
+ }
466
+ } )
467
+ const wrapper = mount ( App )
468
+ expect ( wrapper ) . toBeDefined ( )
469
+
470
+ await waitNT ( wrapper . vm )
471
+ await waitRAF ( )
472
+ const tabs = wrapper . find ( BTabs )
473
+ expect ( tabs ) . toBeDefined ( )
474
+ expect ( tabs . findAll ( BTab ) . length ) . toBe ( 3 )
475
+
476
+ const tab1 = tabs . findAll ( BTab ) . at ( 0 )
477
+ const tab2 = tabs . findAll ( BTab ) . at ( 1 )
478
+ const tab3 = tabs . findAll ( BTab ) . at ( 2 )
479
+
480
+ expect ( wrapper . findAll ( '.nav-link' ) ) . toBeDefined ( )
481
+ expect ( wrapper . findAll ( '.nav-link' ) . length ) . toBe ( 3 )
482
+
483
+ // Expect 1st tab (index 0) to be active
484
+ expect ( tabs . vm . currentTab ) . toBe ( 0 )
485
+ expect ( tab1 . vm . localActive ) . toBe ( true )
486
+ expect ( tab2 . vm . localActive ) . toBe ( false )
487
+ expect ( tab3 . vm . localActive ) . toBe ( false )
488
+
489
+ // Try to set 2nd BTab to be active via space keypress
490
+ expect ( tab2 . emitted ( 'click' ) ) . not . toBeDefined ( )
491
+ wrapper
492
+ . findAll ( '.nav-link' )
493
+ . at ( 1 )
494
+ . trigger ( 'keydown.space' )
495
+ await waitNT ( wrapper . vm )
496
+ await waitRAF ( )
497
+ expect ( tabs . vm . currentTab ) . toBe ( 1 )
498
+ expect ( tab1 . vm . localActive ) . toBe ( false )
499
+ expect ( tab2 . vm . localActive ) . toBe ( true )
500
+ expect ( tab3 . vm . localActive ) . toBe ( false )
501
+ expect ( tab2 . emitted ( 'click' ) ) . toBeDefined ( )
502
+
503
+ // Try to set 3rd BTab to be active via space keypress
504
+ expect ( tab3 . emitted ( 'click' ) ) . not . toBeDefined ( )
505
+ wrapper
506
+ . findAll ( '.nav-link' )
507
+ . at ( 2 )
508
+ . trigger ( 'keydown.space' )
509
+ await waitNT ( wrapper . vm )
510
+ await waitRAF ( )
511
+ expect ( tabs . vm . currentTab ) . toBe ( 2 )
512
+ expect ( tab1 . vm . localActive ) . toBe ( false )
513
+ expect ( tab2 . vm . localActive ) . toBe ( false )
514
+ expect ( tab3 . vm . localActive ) . toBe ( true )
515
+ expect ( tab3 . emitted ( 'click' ) ) . toBeDefined ( )
516
+
517
+ // Try to set 1st BTab to be active via space keypress
518
+ expect ( tab1 . emitted ( 'click' ) ) . not . toBeDefined ( )
519
+ wrapper
520
+ . findAll ( '.nav-link' )
521
+ . at ( 0 )
522
+ . trigger ( 'keydown.space' )
523
+ await waitNT ( wrapper . vm )
524
+ await waitRAF ( )
525
+ expect ( tabs . vm . currentTab ) . toBe ( 0 )
526
+ expect ( tab1 . vm . localActive ) . toBe ( true )
527
+ expect ( tab2 . vm . localActive ) . toBe ( false )
528
+ expect ( tab3 . vm . localActive ) . toBe ( false )
529
+ expect ( tab1 . emitted ( 'click' ) ) . toBeDefined ( )
530
+
531
+ wrapper . destroy ( )
532
+ } )
533
+
457
534
it ( 'key nav works' , async ( ) => {
458
535
const App = Vue . extend ( {
459
536
render ( h ) {
0 commit comments