@@ -283,14 +283,19 @@ export class UnitTestElement implements TestElement {
283283 name : string ,
284284 clientX ?: number ,
285285 clientY ?: number ,
286+ offsetX ?: number ,
287+ offsetY ?: number ,
286288 button ?: number ,
287289 ) {
288290 // The latest versions of all browsers we support have the new `PointerEvent` API.
289291 // Though since we capture the two most recent versions of these browsers, we also
290292 // need to support Safari 12 at time of writing. Safari 12 does not have support for this,
291293 // so we need to conditionally create and dispatch these events based on feature detection.
292294 if ( typeof PointerEvent !== 'undefined' && PointerEvent ) {
293- dispatchPointerEvent ( this . element , name , clientX , clientY , { isPrimary : true , button} ) ;
295+ dispatchPointerEvent ( this . element , name , clientX , clientY , offsetX , offsetY , {
296+ isPrimary : true ,
297+ button,
298+ } ) ;
294299 }
295300 }
296301
@@ -305,6 +310,8 @@ export class UnitTestElement implements TestElement {
305310 ) {
306311 let clientX : number | undefined = undefined ;
307312 let clientY : number | undefined = undefined ;
313+ let offsetX : number | undefined = undefined ;
314+ let offsetY : number | undefined = undefined ;
308315 let modifiers : ModifierKeys = { } ;
309316
310317 if ( args . length && typeof args [ args . length - 1 ] === 'object' ) {
@@ -313,23 +320,57 @@ export class UnitTestElement implements TestElement {
313320
314321 if ( args . length ) {
315322 const { left, top, width, height} = await this . getDimensions ( ) ;
316- const relativeX = args [ 0 ] === 'center' ? width / 2 : ( args [ 0 ] as number ) ;
317- const relativeY = args [ 0 ] === 'center' ? height / 2 : ( args [ 1 ] as number ) ;
323+ offsetX = args [ 0 ] === 'center' ? width / 2 : ( args [ 0 ] as number ) ;
324+ offsetY = args [ 0 ] === 'center' ? height / 2 : ( args [ 1 ] as number ) ;
318325
319326 // Round the computed click position as decimal pixels are not
320327 // supported by mouse events and could lead to unexpected results.
321- clientX = Math . round ( left + relativeX ) ;
322- clientY = Math . round ( top + relativeY ) ;
328+ clientX = Math . round ( left + offsetX ) ;
329+ clientY = Math . round ( top + offsetY ) ;
323330 }
324331
325- this . _dispatchPointerEventIfSupported ( 'pointerdown' , clientX , clientY , button ) ;
326- dispatchMouseEvent ( this . element , 'mousedown' , clientX , clientY , button , modifiers ) ;
327- this . _dispatchPointerEventIfSupported ( 'pointerup' , clientX , clientY , button ) ;
328- dispatchMouseEvent ( this . element , 'mouseup' , clientX , clientY , button , modifiers ) ;
332+ this . _dispatchPointerEventIfSupported (
333+ 'pointerdown' ,
334+ clientX ,
335+ clientY ,
336+ offsetX ,
337+ offsetY ,
338+ button ,
339+ ) ;
340+ dispatchMouseEvent (
341+ this . element ,
342+ 'mousedown' ,
343+ clientX ,
344+ clientY ,
345+ offsetX ,
346+ offsetY ,
347+ button ,
348+ modifiers ,
349+ ) ;
350+ this . _dispatchPointerEventIfSupported ( 'pointerup' , clientX , clientY , offsetX , offsetY , button ) ;
351+ dispatchMouseEvent (
352+ this . element ,
353+ 'mouseup' ,
354+ clientX ,
355+ clientY ,
356+ offsetX ,
357+ offsetY ,
358+ button ,
359+ modifiers ,
360+ ) ;
329361
330362 // If a primary event name is specified, emit it after the mouse event sequence.
331363 if ( primaryEventName !== null ) {
332- dispatchMouseEvent ( this . element , primaryEventName , clientX , clientY , button , modifiers ) ;
364+ dispatchMouseEvent (
365+ this . element ,
366+ primaryEventName ,
367+ clientX ,
368+ clientY ,
369+ offsetX ,
370+ offsetY ,
371+ button ,
372+ modifiers ,
373+ ) ;
333374 }
334375
335376 // This call to _stabilize should not be needed since the callers will already do that them-
0 commit comments