gecko-dev/editor/libeditor/tests/test_dragdrop.html
Ehsan Akhgari 22b7f33edd Bug 1042469 - Flatten editor/libeditor/base to editor/libeditor; r=poiru
--HG--
rename : editor/libeditor/base/ChangeAttributeTxn.cpp => editor/libeditor/ChangeAttributeTxn.cpp
rename : editor/libeditor/base/ChangeAttributeTxn.h => editor/libeditor/ChangeAttributeTxn.h
rename : editor/libeditor/base/ChangeCSSInlineStyleTxn.cpp => editor/libeditor/ChangeCSSInlineStyleTxn.cpp
rename : editor/libeditor/base/ChangeCSSInlineStyleTxn.h => editor/libeditor/ChangeCSSInlineStyleTxn.h
rename : editor/libeditor/base/CreateElementTxn.cpp => editor/libeditor/CreateElementTxn.cpp
rename : editor/libeditor/base/CreateElementTxn.h => editor/libeditor/CreateElementTxn.h
rename : editor/libeditor/base/DeleteNodeTxn.cpp => editor/libeditor/DeleteNodeTxn.cpp
rename : editor/libeditor/base/DeleteNodeTxn.h => editor/libeditor/DeleteNodeTxn.h
rename : editor/libeditor/base/DeleteRangeTxn.cpp => editor/libeditor/DeleteRangeTxn.cpp
rename : editor/libeditor/base/DeleteRangeTxn.h => editor/libeditor/DeleteRangeTxn.h
rename : editor/libeditor/base/DeleteTextTxn.cpp => editor/libeditor/DeleteTextTxn.cpp
rename : editor/libeditor/base/DeleteTextTxn.h => editor/libeditor/DeleteTextTxn.h
rename : editor/libeditor/base/EditActionListener.h => editor/libeditor/EditActionListener.h
rename : editor/libeditor/base/EditAggregateTxn.cpp => editor/libeditor/EditAggregateTxn.cpp
rename : editor/libeditor/base/EditAggregateTxn.h => editor/libeditor/EditAggregateTxn.h
rename : editor/libeditor/base/EditTxn.cpp => editor/libeditor/EditTxn.cpp
rename : editor/libeditor/base/EditTxn.h => editor/libeditor/EditTxn.h
rename : editor/libeditor/base/IMETextTxn.cpp => editor/libeditor/IMETextTxn.cpp
rename : editor/libeditor/base/IMETextTxn.h => editor/libeditor/IMETextTxn.h
rename : editor/libeditor/base/InsertElementTxn.cpp => editor/libeditor/InsertElementTxn.cpp
rename : editor/libeditor/base/InsertElementTxn.h => editor/libeditor/InsertElementTxn.h
rename : editor/libeditor/base/InsertTextTxn.cpp => editor/libeditor/InsertTextTxn.cpp
rename : editor/libeditor/base/InsertTextTxn.h => editor/libeditor/InsertTextTxn.h
rename : editor/libeditor/base/JoinElementTxn.cpp => editor/libeditor/JoinElementTxn.cpp
rename : editor/libeditor/base/JoinElementTxn.h => editor/libeditor/JoinElementTxn.h
rename : editor/libeditor/base/PlaceholderTxn.cpp => editor/libeditor/PlaceholderTxn.cpp
rename : editor/libeditor/base/PlaceholderTxn.h => editor/libeditor/PlaceholderTxn.h
rename : editor/libeditor/base/SetDocTitleTxn.cpp => editor/libeditor/SetDocTitleTxn.cpp
rename : editor/libeditor/base/SetDocTitleTxn.h => editor/libeditor/SetDocTitleTxn.h
rename : editor/libeditor/base/SplitElementTxn.cpp => editor/libeditor/SplitElementTxn.cpp
rename : editor/libeditor/base/SplitElementTxn.h => editor/libeditor/SplitElementTxn.h
rename : editor/libeditor/base/crashtests/336104.html => editor/libeditor/crashtests/336104.html
rename : editor/libeditor/base/crashtests/382527-1.html => editor/libeditor/crashtests/382527-1.html
rename : editor/libeditor/base/crashtests/402172-1.html => editor/libeditor/crashtests/402172-1.html
rename : editor/libeditor/base/crashtests/407079-1.html => editor/libeditor/crashtests/407079-1.html
rename : editor/libeditor/base/crashtests/407256-1.html => editor/libeditor/crashtests/407256-1.html
rename : editor/libeditor/base/crashtests/430624-1.html => editor/libeditor/crashtests/430624-1.html
rename : editor/libeditor/base/crashtests/459613-iframe.html => editor/libeditor/crashtests/459613-iframe.html
rename : editor/libeditor/base/crashtests/459613.html => editor/libeditor/crashtests/459613.html
rename : editor/libeditor/base/crashtests/475132-1.xhtml => editor/libeditor/crashtests/475132-1.xhtml
rename : editor/libeditor/base/crashtests/633709.xhtml => editor/libeditor/crashtests/633709.xhtml
rename : editor/libeditor/base/crashtests/636074-1.html => editor/libeditor/crashtests/636074-1.html
rename : editor/libeditor/base/crashtests/713427-1.html => editor/libeditor/crashtests/713427-1.html
rename : editor/libeditor/base/crashtests/713427-2.xhtml => editor/libeditor/crashtests/713427-2.xhtml
rename : editor/libeditor/base/crashtests/762183.html => editor/libeditor/crashtests/762183.html
rename : editor/libeditor/base/crashtests/766360.html => editor/libeditor/crashtests/766360.html
rename : editor/libeditor/base/crashtests/766413.html => editor/libeditor/crashtests/766413.html
rename : editor/libeditor/base/crashtests/766845.xhtml => editor/libeditor/crashtests/766845.xhtml
rename : editor/libeditor/base/crashtests/768765.html => editor/libeditor/crashtests/768765.html
rename : editor/libeditor/base/crashtests/771749.html => editor/libeditor/crashtests/771749.html
rename : editor/libeditor/base/crashtests/772282.html => editor/libeditor/crashtests/772282.html
rename : editor/libeditor/base/crashtests/776323.html => editor/libeditor/crashtests/776323.html
rename : editor/libeditor/base/crashtests/crashtests.list => editor/libeditor/crashtests/crashtests.list
rename : editor/libeditor/base/nsEditProperty.h => editor/libeditor/nsEditProperty.h
rename : editor/libeditor/base/nsEditPropertyAtomList.h => editor/libeditor/nsEditPropertyAtomList.h
rename : editor/libeditor/base/nsEditRules.h => editor/libeditor/nsEditRules.h
rename : editor/libeditor/base/nsEditor.cpp => editor/libeditor/nsEditor.cpp
rename : editor/libeditor/base/nsEditor.h => editor/libeditor/nsEditor.h
rename : editor/libeditor/base/nsEditorCommands.cpp => editor/libeditor/nsEditorCommands.cpp
rename : editor/libeditor/base/nsEditorCommands.h => editor/libeditor/nsEditorCommands.h
rename : editor/libeditor/base/nsEditorController.cpp => editor/libeditor/nsEditorController.cpp
rename : editor/libeditor/base/nsEditorController.h => editor/libeditor/nsEditorController.h
rename : editor/libeditor/base/nsEditorEventListener.cpp => editor/libeditor/nsEditorEventListener.cpp
rename : editor/libeditor/base/nsEditorEventListener.h => editor/libeditor/nsEditorEventListener.h
rename : editor/libeditor/base/nsEditorUtils.cpp => editor/libeditor/nsEditorUtils.cpp
rename : editor/libeditor/base/nsEditorUtils.h => editor/libeditor/nsEditorUtils.h
rename : editor/libeditor/base/nsIAbsorbingTransaction.h => editor/libeditor/nsIAbsorbingTransaction.h
rename : editor/libeditor/base/nsSelectionState.cpp => editor/libeditor/nsSelectionState.cpp
rename : editor/libeditor/base/nsSelectionState.h => editor/libeditor/nsSelectionState.h
rename : editor/libeditor/base/nsStyleSheetTxns.cpp => editor/libeditor/nsStyleSheetTxns.cpp
rename : editor/libeditor/base/nsStyleSheetTxns.h => editor/libeditor/nsStyleSheetTxns.h
rename : editor/libeditor/base/tests/chrome.ini => editor/libeditor/tests/chrome.ini
rename : editor/libeditor/base/tests/file_bug586662.html => editor/libeditor/tests/file_bug586662.html
rename : editor/libeditor/base/tests/mochitest.ini => editor/libeditor/tests/mochitest.ini
rename : editor/libeditor/base/tests/moz.build => editor/libeditor/tests/moz.build
rename : editor/libeditor/base/tests/test_bug408231.html => editor/libeditor/tests/test_bug408231.html
rename : editor/libeditor/base/tests/test_bug46555.html => editor/libeditor/tests/test_bug46555.html
rename : editor/libeditor/base/tests/test_bug502673.html => editor/libeditor/tests/test_bug502673.html
rename : editor/libeditor/base/tests/test_bug514156.html => editor/libeditor/tests/test_bug514156.html
rename : editor/libeditor/base/tests/test_bug567213.html => editor/libeditor/tests/test_bug567213.html
rename : editor/libeditor/base/tests/test_bug586662.html => editor/libeditor/tests/test_bug586662.html
rename : editor/libeditor/base/tests/test_bug599983.html => editor/libeditor/tests/test_bug599983.html
rename : editor/libeditor/base/tests/test_bug599983.xul => editor/libeditor/tests/test_bug599983.xul
rename : editor/libeditor/base/tests/test_bug646194.xul => editor/libeditor/tests/test_bug646194.xul
rename : editor/libeditor/base/tests/test_bug742261.html => editor/libeditor/tests/test_bug742261.html
rename : editor/libeditor/base/tests/test_bug773262.html => editor/libeditor/tests/test_bug773262.html
rename : editor/libeditor/base/tests/test_bug795785.html => editor/libeditor/tests/test_bug795785.html
rename : editor/libeditor/base/tests/test_composition_event_created_in_chrome.html => editor/libeditor/tests/test_composition_event_created_in_chrome.html
rename : editor/libeditor/base/tests/test_dragdrop.html => editor/libeditor/tests/test_dragdrop.html
rename : editor/libeditor/base/tests/test_selection_move_commands.xul => editor/libeditor/tests/test_selection_move_commands.xul
2014-08-15 10:03:48 -04:00

182 lines
8.2 KiB
HTML

<html>
<head>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js"></script>
</head>
<body>
<span id="text" style="font-size: 40px;">Some Text</span>
<input id="input" value="Drag Me">
<textarea id="textarea">Some Text To Drag</textarea>
<p id="contenteditable" contenteditable="true">This is some <b id="bold">editable</b> text.</p>
<p id="nestedce" contenteditable="true"><span id="first"> </span>First letter <span id="noneditable" contenteditable="false">Middle</span> Last part</p>
<script type="application/javascript">
SimpleTest.waitForExplicitFinish();
// This listener allows us to clear the default data for the selection added for the drag.
var shouldClear = false;
window.addEventListener("dragstart", function (event) { if (shouldClear) event.dataTransfer.clearData() }, true);
function doTest()
{
const htmlContextData = { type: 'text/_moz_htmlcontext',
data: '<html><body></body></html>' };
const htmlInfoData = { type: 'text/_moz_htmlinfo', data: '0,0' };
const htmlData = { type: 'text/html', data: '<span id="text" style="font-size: 40px;">Some Text</span>' };
const htmlContextDataEditable = { type: 'text/_moz_htmlcontext',
data: '<html><body><p id="contenteditable" contenteditable="true"></p></body></html>' };
var text = document.getElementById("text");
var input = document.getElementById("input");
var contenteditable = document.getElementById("contenteditable");
var selection = window.getSelection();
// -------- Test dragging regular text
selection.selectAllChildren(text);
var result = synthesizeDragStart(text, [[htmlContextData, htmlInfoData, htmlData,
{type: "text/plain", data: "Some Text"}]], window, 40, 10);
ok(!result, "Test dragging regular text");
// -------- Test dragging text from an <input>
input.setSelectionRange(1, 4);
result = synthesizeDragStart(input, [[{type: "text/plain", data: "rag"}]], window, 25, 6);
ok(!result, "Test dragging input");
// -------- Test dragging text from a <textarea>
textarea.setSelectionRange(1, 7);
result = synthesizeDragStart(textarea, [[{type: "text/plain", data: "ome Te"}]], window, 25, 6);
ok(!result, "Test dragging textarea");
textarea.blur();
// -------- Test dragging text from a contenteditable
selection.selectAllChildren(contenteditable.childNodes[1]);
result = synthesizeDragStart(contenteditable.childNodes[1],
[[htmlContextDataEditable, htmlInfoData,
{type: 'text/html', data: '<b id="bold">editable</b>' },
{type: "text/plain", data: "editable"}]], window, 5, 6);
ok(!result, "Test dragging contenteditable");
contenteditable.blur();
// -------- Test dragging regular text of text/html to <input>
selection.selectAllChildren(text);
input.value = "";
synthesizeDrop(text, input, [], "copy");
is(input.value, "Some Text", "Drag text/html onto input");
// -------- Test dragging regular text of text/html to disabled <input>
selection.selectAllChildren(text);
input.value = "";
input.disabled = true;
synthesizeDrop(text, input, [], "copy");
is(input.value, "", "Drag text/html onto disabled input");
input.disabled = false;
// -------- Test dragging regular text of text/html to readonly <input>
selection.selectAllChildren(text);
input.readOnly = true;
synthesizeDrop(text, input, [], "copy");
is(input.value, "", "Drag text/html onto readonly input");
input.readOnly = false;
// -------- Test dragging regular text of text/html to <input>. This sets
// shouldClear to true so that the default drag data is not present
// and we can use the data passed to synthesizeDrop. This allows
// testing of a drop with just text/html.
shouldClear = true;
selection.selectAllChildren(text);
input.value = "";
synthesizeDrop(text, input, [[{type: "text/html", data: "Some <b>Bold<b> Text"}]], "copy");
is(input.value, "", "Drag text/html onto input");
// -------- Test dragging regular text of text/plain and text/html to <input>
selection.selectAllChildren(text);
input.value = "";
synthesizeDrop(text, input, [[{type: "text/html", data: "Some <b>Bold<b> Text"},
{type: "text/plain", data: "Some Plain Text"}]], "copy");
is(input.value, "Some Plain Text", "Drag text/html and text/plain onto input");
// -------- Test dragging regular text of text/plain to <textarea>
// XXXndeakin Can't test textareas due to some event handling issue
// selection.selectAllChildren(text);
// synthesizeDrop(text, textarea, [[{type: "text/plain", data: "Somewhat Longer Text"}]], "copy");
// is(textarea.value, "Somewhat Longer Text", "Drag text/plain onto textarea");
// -------- Test dragging special text type of text/plain to contenteditable
selection.selectAllChildren(text);
synthesizeDrop(text, input, [[{type: "text/x-moz-text-internal", data: "Some Special Text"}]], "copy");
is(input.value, "Some Plain Text", "Drag text/x-moz-text-internal onto input");
// -------- Test dragging regular text of text/plain to contenteditable
selection.selectAllChildren(text);
synthesizeDrop(text, contenteditable, [[{type: "text/plain", data: "Sample Text"}]], "copy");
is(contenteditable.childNodes.length, 3, "Drag text/plain onto contenteditable child nodes");
is(contenteditable.textContent, "This is some editable text.Sample Text",
"Drag text/plain onto contenteditable text");
// -------- Test dragging regular text of text/html to contenteditable
selection.selectAllChildren(text);
synthesizeDrop(text, contenteditable, [[{type: "text/html", data: "Sample <i>Italic</i> Text"}]], "copy");
is(contenteditable.childNodes.length, 6, "Drag text/html onto contenteditable child nodes");
is(contenteditable.childNodes[4].tagName, "I", "Drag text/html onto contenteditable italic");
is(contenteditable.childNodes[4].textContent, "Italic", "Drag text/html onto contenteditable italic text");
// -------- Test dragging contenteditable to <input>
selection.selectAllChildren(document.getElementById("bold"));
synthesizeDrop(bold, input, [[{type: "text/html", data: "<b>editable</b>"},
{type: "text/plain", data: "editable"}]], "copy");
is(input.value, "Some Plain Texteditable", "Move text/html and text/plain from contenteditable onto input");
// -------- Test dragging contenteditable to contenteditable
shouldClear = false;
selection.selectAllChildren(contenteditable.childNodes[4]);
synthesizeDrop(contenteditable.childNodes[4], contenteditable, [], "copy");
is(contenteditable.childNodes.length, 7, "Move text/html and text/plain from contenteditable onto itself child nodes");
is(contenteditable.childNodes[6].tagName, "I", "Move text/html and text/plain from contenteditable onto itself italic");
is(contenteditable.childNodes[6].textContent, "Italic", "Move text/html and text/plain from contenteditable onto itself text");
// We'd test 'move' here as well as 'copy', but that requires knowledge of
// the source of the drag which drag simulation doesn't provide.
// -------- Test dragging non-editable nested inside contenteditable to contenteditable
input.focus(); // this resets some state in the selection otherwise an inexplicable error occurs calling selectAllChildren.
input.blur();
var nonEditable = document.getElementById("noneditable");
selection.selectAllChildren(nonEditable);
synthesizeDrop(nonEditable, document.getElementById("first"), [], "copy");
is(document.getElementById("nestedce").textContent, " MiddleFirst letter Middle Last part",
"Drag non-editable text/html onto contenteditable text");
SimpleTest.finish();
}
SimpleTest.waitForFocus(doTest);
</script>
</body>
</html>