Chromium Code Reviews| 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 |