OLD | NEW |
---|---|
(Empty) | |
1 const mouseMoveToCenter = element => { | |
2 const clientRect = element.getBoundingClientRect(); | |
3 const centerX = (clientRect.left + clientRect.right) / 2; | |
4 const centerY = (clientRect.top + clientRect.bottom) / 2; | |
5 eventSender.mouseMoveTo(centerX, centerY); | |
6 }; | |
7 | |
8 const dropEffectTest = params => { | |
9 promise_test(t => { | |
10 document.querySelector('.test-description').textContent = | |
11 JSON.stringify(params); | |
12 | |
13 const dragged = document.querySelector('.dragged'); | |
14 if (dragged && !dragged.classList.contains('no-ondragstart')) { | |
15 dragged.ondragstart = t.step_func(event => { | |
16 event.dataTransfer.setData('text/plain', 'Needed to work in Firefox'); | |
jsbell
2017/03/02 22:06:45
Happen to have a link to a bug?
pwnall
2017/03/02 22:34:29
I've been cargo-culting this from other tests arou
| |
17 if ('allowed' in params) | |
18 event.dataTransfer.effectAllowed = params.allowed; | |
19 }); | |
20 } | |
21 | |
22 const dropZone = document.querySelector('.dropzone'); | |
23 dropZone.ondragover = t.step_func(event => { | |
24 event.preventDefault(); | |
25 if ('drop' in params) | |
26 event.dataTransfer.dropEffect = params.drop; | |
27 }); | |
28 let gotDrop = false; | |
29 dropZone.ondrop = t.step_func(event => { | |
30 event.preventDefault(); | |
31 gotDrop = true; | |
32 }); | |
33 | |
34 return new Promise((resolve, reject) => { | |
jsbell
2017/03/02 22:06:45
Nit: Move this up to the top of the `t => {` block
pwnall
2017/03/02 22:34:29
Done.
| |
35 const doneButton = document.querySelector('.done'); | |
36 | |
37 if (dragged) { | |
38 dragged.ondragend = t.step_func(event => { | |
39 resolve(event.dataTransfer.dropEffect); | |
40 }); | |
41 } else { | |
42 doneButton.onclick = t.step_func(() => { | |
43 resolve('none'); | |
44 }); | |
45 } | |
46 | |
47 if (window.eventSender) { | |
48 if (dragged) { | |
49 mouseMoveToCenter(dragged); | |
50 eventSender.mouseDown(); | |
51 } else { | |
52 eventSender.mouseMoveTo(0, 0); | |
53 eventSender.beginDragWithFiles(['resources/dragged-file.txt']); | |
54 } | |
55 setTimeout(() => { | |
56 mouseMoveToCenter(dropZone); | |
57 eventSender.mouseUp(); | |
58 if (doneButton) { | |
59 setTimeout(() => { | |
60 const clickEvent = new Event('click'); | |
61 doneButton.dispatchEvent(clickEvent); | |
62 }, 100); | |
63 } | |
64 }, 100); | |
65 } | |
66 }).then((dragOperation) => { | |
jsbell
2017/03/02 22:06:45
nit: no () needed
pwnall
2017/03/02 22:34:29
Done.
| |
67 if ('operation' in params) { | |
68 assert_true(gotDrop, 'drop target should have received a drop event'); | |
69 assert_equals(dragOperation, params.operation); | |
70 } else { | |
71 assert_true( | |
72 !gotDrop, 'drop target should not have received a drop event'); | |
73 assert_equals(dragOperation, 'none'); | |
74 } | |
75 }); | |
76 }, `effectAllowed: ${params.allowed} dropEffect: ${params.drop}`); | |
77 }; | |
OLD | NEW |