| '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)); |
| } |