Index: third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js |
diff --git a/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js b/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..adbef51426d6b0b613e3b99f979f6c86e2c68c31 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/dnd/resources/dropEffect-common.js |
@@ -0,0 +1,86 @@ |
+const mouseMoveToCenter = element => { |
+ const clientRect = element.getBoundingClientRect(); |
+ const centerX = (clientRect.left + clientRect.right) / 2; |
+ const centerY = (clientRect.top + clientRect.bottom) / 2; |
+ eventSender.mouseMoveTo(centerX, centerY); |
+}; |
+ |
+const dropEffectTest = testCase => { |
+ let gotDrop = false; |
+ promise_test(t => new Promise((resolve, reject) => { |
+ document.querySelector('#test-description').textContent = |
+ JSON.stringify(testCase); |
+ |
+ const dragged = document.querySelector('.dragged'); |
+ if (dragged && !dragged.classList.contains('no-ondragstart')) { |
+ dragged.ondragstart = t.step_func(event => { |
+ event.dataTransfer.setData('text/plain', 'Needed to work in Firefox'); |
+ if ('allowed' in testCase) |
+ event.dataTransfer.effectAllowed = testCase.allowed; |
+ }); |
+ } |
+ |
+ const dropZone = document.querySelector('.dropzone'); |
+ dropZone.ondragover = t.step_func(event => { |
+ event.preventDefault(); |
+ if ('drop' in testCase) |
+ event.dataTransfer.dropEffect = testCase.drop; |
+ }); |
+ dropZone.ondrop = t.step_func(event => { |
+ event.preventDefault(); |
+ gotDrop = true; |
+ }); |
+ |
+ const doneButton = document.querySelector('.done'); |
+ |
+ if (dragged) { |
+ dragged.ondragend = t.step_func(event => { |
+ resolve(event.dataTransfer.dropEffect); |
+ }); |
+ } else { |
+ doneButton.onclick = t.step_func(() => { |
+ resolve('none'); |
+ }); |
+ } |
+ |
+ if (window.eventSender) { |
+ if (dragged) { |
+ mouseMoveToCenter(dragged); |
+ eventSender.mouseDown(); |
+ } else { |
+ eventSender.mouseMoveTo(0, 0); |
+ eventSender.beginDragWithFiles(['resources/dragged-file.txt']); |
+ } |
+ setTimeout(() => { |
+ mouseMoveToCenter(dropZone); |
+ eventSender.mouseUp(); |
+ if (doneButton) { |
+ setTimeout(() => { |
+ const clickEvent = new Event('click'); |
+ doneButton.dispatchEvent(clickEvent); |
+ }, 100); |
+ } |
+ }, 100); |
+ } |
+ }).then(dragOperation => { |
+ if ('operation' in testCase) { |
+ assert_true(gotDrop, 'drop target should have received a drop event'); |
+ assert_equals(dragOperation, testCase.operation); |
+ } else { |
+ assert_true( |
+ !gotDrop, 'drop target should not have received a drop event'); |
+ assert_equals(dragOperation, 'none'); |
+ } |
+ }), `effectAllowed: ${testCase.allowed} dropEffect: ${testCase.drop}`); |
+}; |
+ |
+const dropEffectTests = testCases => { |
+ for (let testCase of testCases) |
+ dropEffectTest(testCase); |
+ |
+ promise_test(t => { |
+ return Promise.resolve().then(() => { |
+ document.querySelector('#test-description').textContent = 'done'; |
+ }); |
+ }, 'all tests complete'); |
+} |