f79a97ba8f377e8e42db726752b0277bde00b710
[WebKit-https.git] / LayoutTests / editing / pasteboard / files-during-page-drags.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 </head>
6 <body>
7 <p id="description"></p>
8 <div id="console"></div>
9 <script>
10 description("Make sure that .files arrays are always empty for non-file drags.");
11
12 var testContainer = document.createElement('div');
13 // Put dragables at the top so that logging does not cause them to move off screen (where we can't drag).
14 document.body.insertBefore(testContainer, document.body.firstChild);
15
16 var dragTarget = document.createElement('div');
17 dragTarget.innerHTML = "drag target";
18 dragTarget.style.cssText = 'width: 100px; height: 100px; background-color: blue';
19 testContainer.appendChild(dragTarget);
20
21 var droppedFiles = null;
22 dragTarget.ondragenter = function() {
23     event.dataTransfer.dropEffect = "copy";
24 }
25 dragTarget.ondragover = function() {
26     event.dataTransfer.dropEffect = "copy";
27     event.preventDefault();
28 }
29 dragTarget.ondrop = function() {
30     if (window.eventSender) {
31         if (droppedFiles)
32             testFailed("droppedFiles should have been cleared before making a drop");
33         droppedFiles = event.dataTransfer.files;
34     } else
35         debug("Got drop with files: " + event.dataTransfer.files + " length: " + event.dataTransfer.files.length)
36 }
37
38 var image = document.createElement('img');
39 image.src = "resources/apple.gif";
40 testContainer.appendChild(image);
41
42 // If we don't add a <br> then the line height of the <a> is the same as the <img> and the click-to-drag hits undragable whitespace.
43 testContainer.appendChild(document.createElement('br'));
44
45 var link = document.createElement('a');
46 link.innerHTML = "Draggable link";
47 link.href = "resources/apple.gif"
48 testContainer.appendChild(link);
49
50 function moveMouseToCenterOfElement(element)
51 {
52     var centerX = element.offsetLeft + element.offsetWidth / 2;
53     var centerY = element.offsetTop + element.offsetHeight / 2;
54     eventSender.mouseMoveTo(centerX, centerY);
55 }
56
57 function dragFromSourceToTarget(source, target)
58 {
59     moveMouseToCenterOfElement(source);
60     eventSender.mouseDown();
61     moveMouseToCenterOfElement(target);
62     eventSender.mouseUp();
63 }
64
65 function testDrag(source)
66 {
67     dragFromSourceToTarget(source, dragTarget);
68     if (!droppedFiles)
69         testFailed("Drop of " + source.tagName + " never occured!");
70     else if (droppedFiles.length == 0)
71         testPassed("Drag of " + source.tagName + " resulted in empty files array.");
72     else
73         testFailed("Drag of " + source.tagName + " resulted in non-empty files array! (files: " + droppedFiles.length + ")");
74     droppedFiles = null;
75 }
76
77 function runTest()
78 {
79     testDrag(link);
80     testDrag(image);
81 }
82
83 if (window.eventSender) {
84     runTest();
85     // Clean up after ourselves
86     document.body.removeChild(testContainer);
87 } else {
88     testFailed("This test is not interactive, please run using DumpRenderTree");
89 }
90
91 var successfullyParsed = true;
92 </script>
93 <script src="../../resources/js-test-post.js"></script>
94 </body>
95 </html>