@@ -135,4 +135,32 @@ describe('runtime-dom: v-on directive', () => {
135135 handler ( event , 'value' , true )
136136 expect ( fn ) . toBeCalledWith ( event , 'value' , true )
137137 } )
138+
139+ it ( 'withKeys cache wrapped listener separately for different modifiers' , ( ) => {
140+ const el1 = document . createElement ( 'button' )
141+ const el2 = document . createElement ( 'button' )
142+ const fn = vi . fn ( )
143+ const handler1 = withKeys ( fn , [ 'a' ] )
144+ const handler2 = withKeys ( fn , [ 'b' ] )
145+ expect ( handler1 === handler2 ) . toBe ( false )
146+ patchEvent ( el1 , 'onKeyup' , null , handler1 , null )
147+ patchEvent ( el2 , 'onKeyup' , null , handler2 , null )
148+ triggerEvent ( el1 , 'keyup' , e => ( e . key = 'a' ) )
149+ triggerEvent ( el2 , 'keyup' , e => ( e . key = 'b' ) )
150+ expect ( fn ) . toBeCalledTimes ( 2 )
151+ } )
152+
153+ it ( 'withModifiers cache wrapped listener separately for different modifiers' , ( ) => {
154+ const el1 = document . createElement ( 'button' )
155+ const el2 = document . createElement ( 'button' )
156+ const fn = vi . fn ( )
157+ const handler1 = withModifiers ( fn , [ 'ctrl' ] )
158+ const handler2 = withModifiers ( fn , [ 'shift' ] )
159+ expect ( handler1 === handler2 ) . toBe ( false )
160+ patchEvent ( el1 , 'onClick' , null , handler1 , null )
161+ patchEvent ( el2 , 'onClick' , null , handler2 , null )
162+ triggerEvent ( el1 , 'click' , e => ( e . ctrlKey = true ) )
163+ triggerEvent ( el2 , 'click' , e => ( e . shiftKey = true ) )
164+ expect ( fn ) . toBeCalledTimes ( 2 )
165+ } )
138166} )
0 commit comments