@@ -135,4 +135,32 @@ describe('runtime-dom: v-on directive', () => {
135
135
handler ( event , 'value' , true )
136
136
expect ( fn ) . toBeCalledWith ( event , 'value' , true )
137
137
} )
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
+ } )
138
166
} )
0 commit comments