Source code

Revision control

Copy as Markdown

Other Tools

'use strict';
// Moves the pointer to the center of `element`. If `element` is contained within an `iframe`, use
// the `iframe` parameter to indicate which `iframe` contains `element`. This function
// returns a promise that will resolve once the pointer has been moved.
const mouseMoveToCenter = (element, iframe = undefined) => {
let clientRect = element.getBoundingClientRect();
let centerX = (clientRect.left + clientRect.right) / 2;
let centerY = (clientRect.top + clientRect.bottom) / 2;
if(iframe != undefined) {
clientRect = iframe.getBoundingClientRect();
centerX += clientRect.left;
centerY += clientRect.top;
}
return new test_driver.Actions()
.pointerMove(Math.ceil(centerX), Math.ceil(centerY))
.send();
};
// The dragDropTest function can be used for tests which require the drag and drop movement.
// `dragElement` takes the element that needs to be dragged and `dropElement` is the element which
// you want to drop the `dragElement` on. `onDropCallback` is called on the onDrop handler and the
// test will only pass if this functions returns true. Also, if the `dropElement` is inside an
// iframe, use the optional `iframe` parameter to specify an iframe element that contains the
// `dropElement` to ensure that tests with an iframe pass.
function dragDropTest(dragElement, dropElement, onDropCallBack, testDescription, iframe = undefined) {
promise_test((t) => new Promise(async (resolve, reject) => {
dropElement.addEventListener('drop', t.step_func((event) => {
if (onDropCallBack(event) == true) {
resolve();
} else {
reject();
}
}));
try {
await mouseMoveToCenter(dragElement);
await new test_driver.Actions()
.pointerDown()
.send();
await mouseMoveToCenter(dropElement, iframe);
await new test_driver.Actions()
.pointerUp()
.send();
} catch (e) {
reject(e);
}
}, testDescription));
}