1 description("Tests correct behavior of event.dataTransfer.setData/getData for 'URL', 'text/uri-list' and 'text/plain'");
3 // Important that we put these at the top of the doc so that logging does not cause it to go out of view (and be undragable)
4 var dragMe
= document
.createElement("div");
5 dragMe
.innerHTML
= "<span id='dragme'>Drag me</span>";
6 document
.body
.insertBefore(dragMe
, document
.body
.firstChild
);
7 var dragTarget
= document
.createElement("div");
8 dragTarget
.innerHTML
= "Drag here"
9 dragTarget
.style
.backgroundColor
= "blue";
10 dragTarget
.style
.width
= "100px";
11 dragTarget
.style
.height
= "100px";
12 document
.body
.insertBefore(dragTarget
, dragMe
);
19 var getDataResultType
;
22 dragMe
.addEventListener("dragstart", function() {
23 event
.dataTransfer
.setData(setDataType
, setDataValue
);
26 dragTarget
.addEventListener("dragenter", function() {
27 event
.dataTransfer
.dropEffect
= "copy";
28 event
.preventDefault();
31 dragTarget
.addEventListener("dragover", function() {
32 event
.dataTransfer
.dropEffect
= "copy";
33 event
.preventDefault();
36 dragTarget
.addEventListener("drop", function() {
38 event
.preventDefault();
41 function moveMouseToCenterOfElement(element
)
43 var centerX
= element
.offsetLeft
+ element
.offsetWidth
/ 2;
44 var centerY
= element
.offsetTop
+ element
.offsetHeight
/ 2;
45 eventSender
.mouseMoveTo(centerX
, centerY
);
48 function dragOntoDragTarget() {
49 var e
= document
.getElementById("dragme");
50 window
.getSelection().setBaseAndExtent(e
, 0, e
, 4);
51 x
= e
.offsetLeft
+ 10;
52 y
= e
.offsetTop
+ e
.offsetHeight
/ 2;
53 eventSender
.mouseMoveTo(x
, y
);
54 eventSender
.mouseDown();
55 eventSender
.leapForward(400);
56 moveMouseToCenterOfElement(dragTarget
);
57 eventSender
.mouseUp();
61 getDataResult
= event
.dataTransfer
.getData(getDataType
);
62 getDataResultType
= typeof getDataResult
;
63 shouldBeEqualToString("getDataResultType", typeof getDataValue
);
64 shouldBeEqualToString("getDataResult", getDataValue
);
67 function test(setType
, setValues
, getType
, getValues
) {
68 setDataType
= setType
;
69 setDataValue
= setValues
;
70 getDataType
= getType
;
71 getDataValue
= getValues
;
77 debug("--- Test set/get 'URL':");
78 test("URL", "http://test.com",
79 "URL", "http://test.com/");
81 debug("--- Test set/get 'URL' with multiple URLs:");
82 test("URL", "http://test.com\r\nhttp://check.com",
83 "URL", "http://test.com/");
85 debug("--- Test set/get 'text/uri-list':");
86 test("text/uri-list", "http://test.com\r\nhttp://check.com",
87 "text/uri-list", "http://test.com\r\nhttp://check.com");
89 debug("--- Test set/get 'text/uri-list' using '\\n':");
90 test("text/uri-list", "http://test.com\nhttp://check.com",
91 "text/uri-list", "http://test.com\nhttp://check.com");
93 debug("--- Test set 'text/uri-list', get 'URL':");
94 test("text/uri-list", "http://test.com\r\nhttp://check.com",
95 "URL", "http://test.com/");
97 debug("--- Test set 'URL', get 'text/uri-list':");
98 test("URL", "http://test.com\r\nhttp://check.com",
99 "text/uri-list", "http://test.com\r\nhttp://check.com");
101 debug("--- Test set 'text/uri-list', get 'URL', using only '\\n':");
102 test("text/uri-list", "http://test.com\nhttp://check.com",
103 "URL", "http://test.com/");
105 debug("--- Test set/get 'text/uri-list' with comments:");
106 test("text/uri-list", "# comment\r\nhttp://test.com\r\nhttp://check.com",
107 "text/uri-list", "# comment\r\nhttp://test.com\r\nhttp://check.com");
109 debug("--- Test set 'text/uri-list', get 'URL' with comments:");
110 test("text/uri-list", "# comment\r\nhttp://test.com\r\nhttp://check.com",
111 "URL", "http://test.com/");
113 debug("--- Test set 'text/uri-list', get 'URL' with only comments:");
114 test("text/uri-list", "# comment\r\n# comment 2\r\n# comment 3",
117 debug("--- Test set/get 'text/plain':");
118 test("text/plain", "Lorem ipsum dolor sit amet.",
119 "text/plain", "Lorem ipsum dolor sit amet.");
121 debug("--- Test set 'text/plain', get 'text':");
122 test("text/plain", "Lorem ipsum dolor sit amet.",
123 "text", "Lorem ipsum dolor sit amet.");
125 debug("--- Test set 'text', get 'text/plain':");
126 test("text", "Lorem ipsum dolor sit amet.",
127 "text/plain", "Lorem ipsum dolor sit amet.");
129 debug("--- Test set/get 'text':");
130 test("text", "Lorem ipsum dolor sit amet.",
131 "text", "Lorem ipsum dolor sit amet.");
134 if (window
.eventSender
) {
136 // Clean up after ourselves
137 dragMe
.parentNode
.removeChild(dragMe
);
138 dragTarget
.parentNode
.removeChild(dragTarget
);
140 testFailed("This test is not interactive, please run using DumpRenderTree");
143 var successfullyParsed
= true;