mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 674770 part.4 Add new tests for pasting by middle click r=ehsan
This commit is contained in:
parent
8e6c11ce28
commit
e5b55da467
@ -98,6 +98,11 @@ _TEST_FILES = \
|
||||
test_root_element_replacement.html \
|
||||
$(NULL)
|
||||
|
||||
ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
|
||||
_TEST_FILES += test_bug674770-2.html \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
ifneq (mobile,$(MOZ_BUILD_APP))
|
||||
_TEST_FILES += test_spellcheck_pref.html \
|
||||
$(NULL)
|
||||
|
394
editor/libeditor/html/tests/test_bug674770-2.html
Normal file
394
editor/libeditor/html/tests/test_bug674770-2.html
Normal file
@ -0,0 +1,394 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=674770
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 674770</title>
|
||||
<script type="application/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=674770">Mozilla Bug 674770</a>
|
||||
<p id="display"></p>
|
||||
<div id="content">
|
||||
<iframe id="iframe" style="display: block; height: 14em;"
|
||||
src="data:text/html,<input id='text' value='pasted'><input id='input' style='display: block;'><p id='editor1' contenteditable>editor1:</p><p id='editor2' contenteditable>editor2:</p>"></iframe>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
|
||||
/** Test for Bug 674770 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var iframe = document.getElementById("iframe");
|
||||
var frameWindow, frameDocument;
|
||||
|
||||
var gClicked = false;
|
||||
var gClicking = null;
|
||||
var gDoPreventDefault1 = null;
|
||||
var gDoPreventDefault2 = null;
|
||||
|
||||
function clickEventHnalder(aEvent)
|
||||
{
|
||||
if (aEvent.button == 1 && aEvent.target == gClicking) {
|
||||
gClicked = true;
|
||||
}
|
||||
if (gDoPreventDefault1 == aEvent.target) {
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
if (gDoPreventDefault2 == aEvent.target) {
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: tests need to check the result *after* the content is actually
|
||||
// modified. Sometimes, the modification is delayed. Therefore, there
|
||||
// are a lot of functions and SimpleTest.executeSoon()s.
|
||||
|
||||
SimpleTest.waitForFocus(function() {
|
||||
SpecialPowers.setBoolPref("middlemouse.paste", true);
|
||||
|
||||
frameWindow = iframe.contentWindow;
|
||||
frameDocument = iframe.contentDocument;
|
||||
|
||||
frameDocument.getElementById("input").addEventListener("click", clickEventHnalder, false);
|
||||
frameDocument.getElementById("editor1").addEventListener("click", clickEventHnalder, false);
|
||||
frameDocument.getElementById("editor2").addEventListener("click", clickEventHnalder, false);
|
||||
|
||||
var text = frameDocument.getElementById("text");
|
||||
|
||||
text.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
synthesizeKey("a", { accelKey: true }, frameWindow);
|
||||
// Windows doesn't have primary selection, we should copy the text to the
|
||||
// global clipboard.
|
||||
if (navigator.platform.indexOf("Win") == 0) {
|
||||
SimpleTest.waitForClipboard("pasted",
|
||||
function() { synthesizeKey("c", { accelKey: true }, frameWindow); },
|
||||
function() { SimpleTest.executeSoon(runInputTests1) },
|
||||
cleanup);
|
||||
} else {
|
||||
// Otherwise, don't call waitForClipboard since it breaks primary
|
||||
// selection.
|
||||
runInputTests1();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function runInputTests1()
|
||||
{
|
||||
var input = frameDocument.getElementById("input");
|
||||
|
||||
// first, copy text.
|
||||
|
||||
// when middle clicked in focused input element, text should be pasted.
|
||||
input.value = "";
|
||||
input.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = input;
|
||||
gDoPreventDefault1 = null;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(input, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runInputTests1");
|
||||
is(input.value, "pasted", "failed to paste in input element");
|
||||
|
||||
SimpleTest.executeSoon(runInputTests2);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runInputTests2()
|
||||
{
|
||||
var input = frameDocument.getElementById("input");
|
||||
|
||||
// even if the input element hasn't had focus, middle click should set focus
|
||||
// to it and paste the text.
|
||||
input.value = "";
|
||||
input.blur();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = input;
|
||||
gDoPreventDefault1 = null;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(input, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runInputTests2");
|
||||
is(input.value, "pasted",
|
||||
"failed to paste in input element when it hasn't had focus yet");
|
||||
|
||||
SimpleTest.executeSoon(runInputTests3);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runInputTests3()
|
||||
{
|
||||
var input = frameDocument.getElementById("input");
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
|
||||
// preventDefault() of HTML editor's click event handler shouldn't prevent
|
||||
// middle click pasting in input element.
|
||||
input.value = "";
|
||||
input.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = input;
|
||||
gDoPreventDefault1 = editor1;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(input, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runInputTests3");
|
||||
is(input.value, "pasted",
|
||||
"failed to paste in input element when editor1 does preventDefault()");
|
||||
|
||||
SimpleTest.executeSoon(runInputTests4);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runInputTests4()
|
||||
{
|
||||
var input = frameDocument.getElementById("input");
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
|
||||
// preventDefault() of input element's click event handler should prevent
|
||||
// middle click pasting in it.
|
||||
input.value = "";
|
||||
input.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = input;
|
||||
gDoPreventDefault1 = input;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(input, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runInputTests4");
|
||||
todo_is(input.value, "",
|
||||
"pasted in input element when it does preventDefault()");
|
||||
|
||||
SimpleTest.executeSoon(runContentEditableTests1);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runContentEditableTests1()
|
||||
{
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
|
||||
// when middle clicked in focused contentediable editor, text should be
|
||||
// pasted.
|
||||
editor1.innerHTML = "editor1:";
|
||||
editor1.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = editor1;
|
||||
gDoPreventDefault1 = null;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(editor1, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runContentEditableTests1");
|
||||
is(editor1.innerHTML, "editor1:pasted",
|
||||
"failed to paste text in contenteditable editor");
|
||||
SimpleTest.executeSoon(runContentEditableTests2);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runContentEditableTests2()
|
||||
{
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
|
||||
// even if the contenteditable editor hasn't had focus, middle click should
|
||||
// set focus to it and paste the text.
|
||||
editor1.innerHTML = "editor1:";
|
||||
editor1.blur();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = editor1;
|
||||
gDoPreventDefault1 = null;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(editor1, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runContentEditableTests2");
|
||||
is(editor1.innerHTML, "editor1:pasted",
|
||||
"failed to paste in contenteditable editor #1 when it hasn't had focus yet");
|
||||
SimpleTest.executeSoon(runContentEditableTests3);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runContentEditableTests3()
|
||||
{
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
var editor2 = frameDocument.getElementById("editor2");
|
||||
|
||||
// When editor1 has focus but editor2 is middle clicked, should be pasted
|
||||
// in the editor2.
|
||||
editor1.innerHTML = "editor1:";
|
||||
editor2.innerHTML = "editor2:";
|
||||
editor1.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = editor2;
|
||||
gDoPreventDefault1 = null;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(editor2, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runContentEditableTests3");
|
||||
is(editor1.innerHTML, "editor1:",
|
||||
"pasted in contenteditable editor #1 when editor2 is clicked");
|
||||
is(editor2.innerHTML, "editor2:pasted",
|
||||
"failed to paste in contenteditable editor #2 when editor2 is clicked");
|
||||
SimpleTest.executeSoon(runContentEditableTests4);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runContentEditableTests4()
|
||||
{
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
|
||||
// preventDefault() of editor1's click event handler should prevent
|
||||
// middle click pasting in it.
|
||||
editor1.innerHTML = "editor1:";
|
||||
editor1.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = editor1;
|
||||
gDoPreventDefault1 = editor1;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(editor1, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runContentEditableTests4");
|
||||
todo_is(editor1.innerHTML, "editor1:",
|
||||
"pasted in contenteditable editor #1 when it does preventDefault()");
|
||||
SimpleTest.executeSoon(runContentEditableTests5);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function runContentEditableTests5()
|
||||
{
|
||||
var editor1 = frameDocument.getElementById("editor1");
|
||||
var editor2 = frameDocument.getElementById("editor2");
|
||||
|
||||
// preventDefault() of editor1's click event handler shouldn't prevent
|
||||
// middle click pasting in editor2.
|
||||
editor1.innerHTML = "editor1:";
|
||||
editor2.innerHTML = "editor2:";
|
||||
editor2.focus();
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
gClicked = false;
|
||||
gClicking = editor2;
|
||||
gDoPreventDefault1 = editor1;
|
||||
gDoPreventDefault2 = null;
|
||||
|
||||
synthesizeMouseAtCenter(editor2, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
todo(gClicked, "click event hasn't been fired for runContentEditableTests5");
|
||||
is(editor1.innerHTML, "editor1:",
|
||||
"pasted in contenteditable editor #1?");
|
||||
is(editor2.innerHTML, "editor2:pasted",
|
||||
"failed to paste in contenteditable editor #2");
|
||||
|
||||
SimpleTest.executeSoon(initForBodyEditableDocumentTests);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function initForBodyEditableDocumentTests()
|
||||
{
|
||||
frameDocument.getElementById("input").removeEventListener("click", clickEventHnalder, false);
|
||||
frameDocument.getElementById("editor1").removeEventListener("click", clickEventHnalder, false);
|
||||
frameDocument.getElementById("editor2").removeEventListener("click", clickEventHnalder, false);
|
||||
|
||||
iframe.onload =
|
||||
function (aEvent) { SimpleTest.executeSoon(runBodyEditableDocumentTests1); };
|
||||
iframe.src =
|
||||
"data:text/html,<body contenteditable>body:</body>";
|
||||
}
|
||||
|
||||
function runBodyEditableDocumentTests1()
|
||||
{
|
||||
frameWindow = iframe.contentWindow;
|
||||
frameDocument = iframe.contentDocument;
|
||||
|
||||
var body = frameDocument.body;
|
||||
|
||||
is(body.innerHTML, "body:",
|
||||
"failed to initialize at runBodyEditableDocumentTests1");
|
||||
|
||||
// middle click on html element should cause pasting text in its body.
|
||||
synthesizeMouseAtCenter(frameDocument.documentElement, {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
is(body.innerHTML,
|
||||
"body:pasted",
|
||||
"failed to paste in editable body element when clicked on html element");
|
||||
|
||||
SimpleTest.executeSoon(runBodyEditableDocumentTests2);
|
||||
});
|
||||
}
|
||||
|
||||
function runBodyEditableDocumentTests2()
|
||||
{
|
||||
frameDocument.body.innerHTML = "body:<span id='span' contenteditable='false'>non-editable</span>";
|
||||
|
||||
var body = frameDocument.body;
|
||||
|
||||
is(body.innerHTML, "body:<span id=\"span\" contenteditable=\"false\">non-editable</span>",
|
||||
"failed to initialize at runBodyEditableDocumentTests2");
|
||||
|
||||
synthesizeMouseAtCenter(frameDocument.getElementById("span"), {button: 1}, frameWindow);
|
||||
|
||||
SimpleTest.executeSoon(function() {
|
||||
is(body.innerHTML,
|
||||
"body:<span id=\"span\" contenteditable=\"false\">non-editable</span>",
|
||||
"pasted when middle clicked in non-editable element");
|
||||
|
||||
SimpleTest.executeSoon(cleanup);
|
||||
});
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
SpecialPowers.clearUserPref("middlemouse.paste");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user