@@ -82,4 +82,84 @@ describe('v-b-modal directive', () => {
8282
8383 wrapper . destroy ( )
8484 } )
85+
86+ it ( 'works on non-buttons using keydown space' , async ( ) => {
87+ const localVue = new CreateLocalVue ( )
88+ const spy = jest . fn ( )
89+
90+ const App = localVue . extend ( {
91+ directives : {
92+ bModal : VBModal
93+ } ,
94+ data ( ) {
95+ return {
96+ text : 'span'
97+ }
98+ } ,
99+ mounted ( ) {
100+ this . $root . $on ( EVENT_SHOW , spy )
101+ } ,
102+ beforeDestroy ( ) {
103+ this . $root . $off ( EVENT_SHOW , spy )
104+ } ,
105+ template : '<span tabindex="0" v-b-modal.test>{{ text }}</span>'
106+ } )
107+ const wrapper = mount ( App , {
108+ localVue : localVue
109+ } )
110+
111+ expect ( wrapper . isVueInstance ( ) ) . toBe ( true )
112+ expect ( wrapper . is ( 'span' ) ) . toBe ( true )
113+ expect ( spy ) . not . toHaveBeenCalled ( )
114+ expect ( wrapper . find ( 'span' ) . attributes ( 'role' ) ) . toBe ( 'button' )
115+ expect ( wrapper . find ( 'span' ) . text ( ) ) . toBe ( 'span' )
116+
117+ const $span = wrapper . find ( 'span' )
118+ $span . trigger ( 'keydown.space' )
119+ expect ( spy ) . toHaveBeenCalledTimes ( 1 )
120+ expect ( spy ) . toBeCalledWith ( 'test' , $span . element )
121+ expect ( wrapper . find ( 'span' ) . attributes ( 'role' ) ) . toBe ( 'button' )
122+
123+ wrapper . destroy ( )
124+ } )
125+
126+ it ( 'works on non-buttons using keydown enter' , async ( ) => {
127+ const localVue = new CreateLocalVue ( )
128+ const spy = jest . fn ( )
129+
130+ const App = localVue . extend ( {
131+ directives : {
132+ bModal : VBModal
133+ } ,
134+ data ( ) {
135+ return {
136+ text : 'span'
137+ }
138+ } ,
139+ mounted ( ) {
140+ this . $root . $on ( EVENT_SHOW , spy )
141+ } ,
142+ beforeDestroy ( ) {
143+ this . $root . $off ( EVENT_SHOW , spy )
144+ } ,
145+ template : '<span tabindex="0" v-b-modal.test>{{ text }}</span>'
146+ } )
147+ const wrapper = mount ( App , {
148+ localVue : localVue
149+ } )
150+
151+ expect ( wrapper . isVueInstance ( ) ) . toBe ( true )
152+ expect ( wrapper . is ( 'span' ) ) . toBe ( true )
153+ expect ( spy ) . not . toHaveBeenCalled ( )
154+ expect ( wrapper . find ( 'span' ) . attributes ( 'role' ) ) . toBe ( 'button' )
155+ expect ( wrapper . find ( 'span' ) . text ( ) ) . toBe ( 'span' )
156+
157+ const $span = wrapper . find ( 'span' )
158+ $span . trigger ( 'keydown.enter' )
159+ expect ( spy ) . toHaveBeenCalledTimes ( 1 )
160+ expect ( spy ) . toBeCalledWith ( 'test' , $span . element )
161+ expect ( wrapper . find ( 'span' ) . attributes ( 'role' ) ) . toBe ( 'button' )
162+
163+ wrapper . destroy ( )
164+ } )
85165} )
0 commit comments