OLD | NEW |
---|---|
(Empty) | |
1 <!doctype html> | |
2 <meta charset="utf-8" /> | |
3 <script src="../../resources/testharness.js"></script> | |
4 <script src="../../resources/testharnessreport.js"></script> | |
5 <script src="resources/copy-data-transfer.js"></script> | |
6 <style> | |
7 #dropwrapper { | |
8 display: block; | |
9 width: 400px; | |
10 height: 200px; | |
11 position: relative; | |
12 padding: 50px 0 0 100px; | |
13 } | |
14 #dropzone { | |
15 display: block; | |
16 border: 1px solid black; | |
17 width: 200px; | |
18 height: 100px; | |
19 } | |
20 </style> | |
21 | |
22 <p> | |
23 Please download <a download href="resources/dragged-file.txt">this file</a>, | |
24 and drag it into the box below. | |
25 </p> | |
26 | |
27 <div id="dropwrapper"> | |
28 <div id="dropzone"> | |
29 Drop Here | |
30 </div> | |
31 </div> | |
32 | |
33 <script> | |
34 | |
35 const dropWrapper = document.querySelector('#dropwrapper'); | |
36 const dropZone = document.querySelector('#dropzone'); | |
37 | |
38 const dragEnterPromise = new Promise((resolve, reject) => { | |
39 // Needed to keep the drag-and-drop going. | |
40 dropWrapper.ondragenter = (event) => event.preventDefault(); | |
jsbell
2016/12/16 21:16:15
nit: no () needed around single argument (here and
jsbell
2016/12/16 21:16:16
Something we should decide on in the style guide:
pwnall
2016/12/17 00:44:48
Done.
pwnall
2016/12/17 00:44:48
Done.
| |
41 | |
42 dropZone.ondragenter = (event) => { | |
43 event.preventDefault(); // Needed to keep the drag-and-drop going. | |
44 resolve(copyDataTransfer(event.dataTransfer)); | |
45 }; | |
46 }); | |
47 const dragOverPromise = new Promise((resolve, reject) => { | |
48 // Needed to keep the drag-and-drop going. | |
49 dropZone.ondragover = (event) => event.preventDefault(); | |
50 | |
51 dropWrapper.ondragover = (event) => { | |
52 event.preventDefault(); // Needed to keep the drag-and-drop going. | |
53 resolve(copyDataTransfer(event.dataTransfer)); | |
54 }; | |
55 }); | |
56 const dragLeavePromise = new Promise((resolve, reject) => { | |
57 dropWrapper.ondragleave = (event) => { | |
58 resolve(copyDataTransfer(event.dataTransfer)); | |
59 }; | |
60 }); | |
61 const dropPromise = new Promise((resolve, reject) => { | |
62 dropZone.ondrop = (event) => { | |
63 event.preventDefault(); // Needed to prevent drop navigation. | |
64 resolve(copyDataTransfer(event.dataTransfer)); | |
65 }; | |
66 }); | |
67 | |
68 const wrapperRect = dropWrapper.getBoundingClientRect(); | |
jsbell
2016/12/16 21:16:15
These can move into the if block.
pwnall
2016/12/17 00:44:48
I have them outside so I can see typos in the cons
jsbell
2016/12/19 17:25:17
OK to leave as is.
| |
69 const dropRect = dropZone.getBoundingClientRect(); | |
70 if (window.eventSender) { | |
71 eventSender.mouseMoveTo(0, 0); | |
72 eventSender.beginDragWithFiles(['resources/dragged-file.txt']); | |
73 | |
74 // dragenter + dragover on #dropwrapper | |
75 const wrapperX = wrapperRect.left + 10; | |
76 const wrapperY = wrapperRect.top + 10; | |
77 eventSender.mouseMoveTo(wrapperX, wrapperY); | |
78 | |
79 // dragleave on #dropwrapper and dragenter + dragover + dragleave on #dropzone | |
80 setTimeout(() => { | |
81 const centerX = (dropRect.left + dropRect.right) / 2; | |
82 const centerY = (dropRect.top + dropRect.bottom) / 2; | |
83 eventSender.mouseMoveTo(centerX, centerY); | |
84 eventSender.mouseUp(); | |
85 }, 16); | |
jsbell
2016/12/16 21:16:15
Why 16?
pwnall
2016/12/17 00:44:48
I wanted to have the move go in a different frame
| |
86 } | |
87 | |
88 promise_test(() => { | |
89 return dragEnterPromise.then((dataTransfer) => { | |
90 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]'); | |
jsbell
2016/12/16 21:16:15
Will this work?
assert_array_equals(dataTransfer.
pwnall
2016/12/17 00:44:48
Done.
FWIW, I had assert_array_equals at first, b
jsbell
2016/12/19 17:25:17
Agreed. I think the tests should focus on expressi
pwnall
2016/12/19 21:51:19
Done.
I filed https://github.com/w3c/testharness.j
| |
91 }); | |
92 }, 'dragenter types'); | |
jsbell
2016/12/16 21:16:15
Can you clarify - in either the test names or asse
pwnall
2016/12/17 00:44:48
Done.
| |
93 | |
94 promise_test(() => { | |
95 return dragOverPromise.then((dataTransfer) => { | |
96 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]'); | |
97 }); | |
98 }, 'dragover types'); | |
99 | |
100 promise_test(() => { | |
101 return dragLeavePromise.then((dataTransfer) => { | |
102 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]'); | |
103 }); | |
104 }, 'dragleave types'); | |
105 | |
106 promise_test(() => { | |
107 return dropPromise.then((dataTransfer) => { | |
108 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]'); | |
109 }); | |
110 }, 'drop types'); | |
111 | |
112 promise_test(() => { | |
113 return dragEnterPromise.then((dataTransfer) => { | |
114 assert_equals(dataTransfer.data['Files'], ''); | |
115 }); | |
116 }, 'dragenter getData() return value'); | |
117 | |
118 promise_test(() => { | |
119 return dragOverPromise.then((dataTransfer) => { | |
120 assert_equals(dataTransfer.data['Files'], ''); | |
121 }); | |
122 }, 'dragover getData() return value'); | |
123 | |
124 promise_test(() => { | |
125 return dragLeavePromise.then((dataTransfer) => { | |
126 assert_equals(dataTransfer.data['Files'], ''); | |
127 }); | |
128 }, 'dragleave getData() return value'); | |
129 | |
130 promise_test(() => { | |
131 return dropPromise.then((dataTransfer) => { | |
132 assert_equals(dataTransfer.data['Files'], ''); | |
133 }); | |
134 }, 'drop getData() return value'); | |
135 | |
136 promise_test(() => { | |
137 return dragEnterPromise.then((dataTransfer) => { | |
138 assert_equals(JSON.stringify(dataTransfer.files), '[]'); | |
jsbell
2016/12/16 21:16:15
Can you assert that length is 0 rather than using
pwnall
2016/12/17 00:44:48
Done.
I guess I don't have the same issue here as
| |
139 }); | |
140 }, 'dragenter files'); | |
141 | |
142 promise_test(() => { | |
143 return dragOverPromise.then((dataTransfer) => { | |
144 assert_equals(JSON.stringify(dataTransfer.files), '[]'); | |
145 }); | |
146 }, 'dragover files'); | |
147 | |
148 promise_test(() => { | |
149 return dragLeavePromise.then((dataTransfer) => { | |
150 assert_equals(JSON.stringify(dataTransfer.files), '[]'); | |
151 }); | |
152 }, 'dragleave files'); | |
153 | |
154 promise_test(() => { | |
155 return dropPromise.then((dataTransfer) => { | |
156 assert_equals(dataTransfer.files.length, 1); | |
157 const file = dataTransfer.files[0]; | |
158 assert_equals(file.file.name, 'dragged-file.txt'); | |
159 assert_equals(file.file.type, 'text/plain'); | |
160 assert_equals(file.file.size, 21); | |
161 assert_equals(file.data, 'The test has FAILED.\n'); | |
162 }); | |
163 }, 'drop files'); | |
164 | |
165 promise_test(() => { | |
166 return dragEnterPromise.then((dataTransfer) => { | |
167 assert_equals(dataTransfer.items.length, 1); | |
168 const item = dataTransfer.items[0]; | |
169 assert_equals(item.kind, 'file'); | |
170 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF | |
171 assert_equals(item.file, null); // FF returns the file's metadata. | |
172 assert_equals(item.data, undefined); | |
173 assert_equals(item.error, undefined); // FF throws a SecurityError. | |
174 }); | |
175 }, 'dragenter items'); | |
176 | |
177 promise_test(() => { | |
178 return dragOverPromise.then((dataTransfer) => { | |
179 assert_equals(dataTransfer.items.length, 1); | |
180 const item = dataTransfer.items[0]; | |
181 assert_equals(item.kind, 'file'); | |
182 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF | |
183 assert_equals(item.file, null); // FF returns the file's metadata. | |
184 assert_equals(item.data, undefined); | |
185 assert_equals(item.error, undefined); // FF throws a SecurityError. | |
186 }); | |
187 }, 'dragover items'); | |
188 | |
189 promise_test(() => { | |
190 return dragLeavePromise.then((dataTransfer) => { | |
191 assert_equals(dataTransfer.items.length, 1); | |
192 const item = dataTransfer.items[0]; | |
193 assert_equals(item.kind, 'file'); | |
194 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF | |
195 assert_equals(item.file, null); // FF returns the file's metadata. | |
196 assert_equals(item.data, undefined); | |
197 assert_equals(item.error, undefined); // FF throws a SecurityError. | |
198 }); | |
199 }, 'dragleave items'); | |
200 | |
201 promise_test(() => { | |
202 return dropPromise.then((dataTransfer) => { | |
203 assert_equals(dataTransfer.items.length, 1); | |
204 const item = dataTransfer.items[0]; | |
205 assert_equals(item.kind, 'file'); | |
206 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF | |
207 assert_equals(item.error, undefined); | |
208 assert_equals(item.file.name, 'dragged-file.txt'); | |
209 assert_equals(item.file.type, 'text/plain'); | |
210 assert_equals(item.file.size, 21); | |
211 assert_equals(item.data, 'The test has FAILED.\n'); | |
212 }); | |
213 }, 'drop items'); | |
214 | |
215 </script> | |
OLD | NEW |