Skip to content

Commit e34ce3b

Browse files
committed
Timing-critical event tests failed due to changes in event loop behavior. related to [dc3d2d0]
Signed-off-by: Tim Deubler <[email protected]>
1 parent dc3d2d0 commit e34ce3b

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

packages/tests/src/utils/triggerEvents.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ export function click(elem: HTMLElement, x: number, y: number): Promise<MouseEve
5656
});
5757
}
5858

59-
export function drag(elem: HTMLElement, from: { x: number; y: number }, to: { x: number; y: number }, time: number = 60): Promise<MouseEvent> {
59+
export function drag(elem: HTMLElement, from: { x: number; y: number }, to: {
60+
x: number;
61+
y: number
62+
}, time: number = 60): Promise<MouseEvent> {
6063
return new Promise((resolve) => {
6164
let e = getElement(elem, from.x, from.y);
6265

@@ -84,7 +87,10 @@ export function drag(elem: HTMLElement, from: { x: number; y: number }, to: { x:
8487
});
8588
}
8689

87-
export function mousemove(elem: HTMLElement, from: { x: number, y: number }, to: { x: number, y: number }): Promise<MouseEvent> {
90+
export function mousemove(elem: HTMLElement, from: { x: number, y: number }, to: {
91+
x: number,
92+
y: number
93+
}): Promise<MouseEvent> {
8894
return new Promise((resolve) => {
8995
let e = getElement(elem, from.x, from.y);
9096
let v = Math.max(Math.abs(to.x - from.x) / 2, Math.abs(to.y - from.y) / 2);
@@ -94,10 +100,13 @@ export function mousemove(elem: HTMLElement, from: { x: number, y: number }, to:
94100

95101
function callback(evt: MouseEvent): void {
96102
if (++evtNr == Math.floor(v) + 1) {
97-
setTimeout(function() {
98-
resolve(evt);
99-
}, 50);
100103
elem.removeEventListener('mousemove', callback);
104+
// The 75 ms timeout allows the browser's event loop and JavaScript engine enough time
105+
// to process all dispatched mousemove events before resolving the promise.
106+
// This delay is timing-critical: if too short, some events may not be handled;
107+
// if too long, tests slow down. The optimal value depends on browser internals and system performance.
108+
// Adjust for reliability in your environment.
109+
setTimeout(() => resolve(evt), 75);
101110
}
102111
}
103112

@@ -135,7 +144,10 @@ export function triggerEvent(elem: HTMLElement, x: number, y: number, evt: strin
135144
dispatchEvent(e.element, e.topleft, x, y, evt, d);
136145
}
137146

138-
function getElement(elem: HTMLElement, x: number, y: number): { element: Element; topleft: { left: number; top: number } } {
147+
function getElement(elem: HTMLElement, x: number, y: number): {
148+
element: Element;
149+
topleft: { left: number; top: number }
150+
} {
139151
function getPosition(div) {
140152
var T = 0;
141153
var L = 0;
@@ -156,7 +168,10 @@ function getElement(elem: HTMLElement, x: number, y: number): { element: Element
156168
};
157169
}
158170

159-
function dispatchEvent(elem: Element, tl: { top: number; left: number }, x: number, y: number, evt: string, d?: number) {
171+
function dispatchEvent(elem: Element, tl: {
172+
top: number;
173+
left: number
174+
}, x: number, y: number, evt: string, d?: number) {
160175
let ev: any = new MouseEvent(evt, {
161176
altKey: true,
162177
bubbles: true,

0 commit comments

Comments
 (0)