author | Ehsan Akhgari <ehsan@mozilla.com> |
Mon, 14 Mar 2016 15:57:40 -0400 | |
changeset 288800 | 25bad67aed1c5fd5812965692b9b4993e2249e54 |
parent 288799 | f87cc2d2312c3746909b2162cea8de786de3c47f |
child 288801 | 2eb222bbb28345c32180041dba9ca24e86db8da6 |
push id | 73585 |
push user | eakhgari@mozilla.com |
push date | Tue, 15 Mar 2016 21:39:09 +0000 |
treeherder | mozilla-inbound@25bad67aed1c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mrbkap |
bugs | 1255919, 629172 |
milestone | 48.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/editor/libeditor/moz.build +++ b/editor/libeditor/moz.build @@ -6,16 +6,18 @@ MOCHITEST_MANIFESTS += [ 'tests/browserscope/mochitest.ini', 'tests/mochitest.ini', ] MOCHITEST_CHROME_MANIFESTS += ['tests/chrome.ini'] +BROWSER_CHROME_MANIFESTS += ['tests/browser.ini'] + UNIFIED_SOURCES += [ 'ChangeAttributeTxn.cpp', 'ChangeStyleTxn.cpp', 'CreateElementTxn.cpp', 'DeleteNodeTxn.cpp', 'DeleteRangeTxn.cpp', 'DeleteTextTxn.cpp', 'EditAggregateTxn.cpp',
new file mode 100644 --- /dev/null +++ b/editor/libeditor/tests/browser.ini @@ -0,0 +1,3 @@ +[browser_bug629172.js] +skip-if = toolkit == 'android' +support-files = bug629172.html
new file mode 100644 --- /dev/null +++ b/editor/libeditor/tests/browser_bug629172.js @@ -0,0 +1,106 @@ +add_task(function*() { + yield new Promise(resolve => waitForFocus(resolve, window)); + + const kPageURL = "http://example.org/browser/editor/libeditor/tests/bug629172.html"; + yield BrowserTestUtils.withNewTab({ + gBrowser, + url: kPageURL + }, function*(aBrowser) { + yield ContentTask.spawn(aBrowser, {}, function*() { + var window = content.window.wrappedJSObject; + var document = window.document; + + // Note: Using the with keyword, we would have been able to write this as: + // + // with (window) { + // Screenshots = {}; + // // so on + // } + // + // However, browser-chrome tests are somehow forced to run in strict mode, + // which doesn't permit the usage of the with keyword, turning the following + // into the ugliest test you've ever seen. :( + var LTRRef = document.getElementById("ltr-ref"); + var RTLRef = document.getElementById("rtl-ref"); + window.Screenshots = {}; + + // generate the reference screenshots + LTRRef.style.display = ""; + document.body.clientWidth; + window.Screenshots.ltr = window.snapshotWindow(window); + LTRRef.parentNode.removeChild(LTRRef); + RTLRef.style.display = ""; + document.body.clientWidth; + window.Screenshots.rtl = window.snapshotWindow(window); + RTLRef.parentNode.removeChild(RTLRef); + window.Screenshots.get = function(dir, flip) { + if (flip) { + return this[dir == "rtl" ? "ltr" : "rtl"]; + } else { + return this[dir]; + } + }; + }); + + function simulateCtrlShiftX(aBrowser) { + // In e10s, the keypress event will be dispatched to the content process, + // but in non-e10s it is handled by the browser UI code and hence won't + // reach the web page. As a result, we need to observe the event in + // the content process only in e10s mode. + var waitForKeypressContent = BrowserTestUtils.waitForContentEvent(aBrowser, "keypress"); + EventUtils.synthesizeKey("x", {accelKey: true, shiftKey: true}); + if (gMultiProcessBrowser) { + return waitForKeypressContent; + } + return Promise.resolve(); + } + + function* testDirection(initialDir, aBrowser) { + yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) { + var window = content.window.wrappedJSObject; + var document = window.document; + + var t = window.t = document.createElement("textarea"); + t.setAttribute("dir", initialDir); + t.value = "test."; + window.inputEventCount = 0; + t.oninput = function() { window.inputEventCount++; }; + document.getElementById("content").appendChild(t); + document.body.clientWidth; + var s1 = window.snapshotWindow(window); + ok(window.compareSnapshots(s1, window.Screenshots.get(initialDir, false), true)[0], + "Textarea should appear correctly before switching the direction (" + initialDir + ")"); + t.focus(); + is(window.inputEventCount, 0, "input event count must be 0 before"); + }); + yield simulateCtrlShiftX(aBrowser); + yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) { + var window = content.window.wrappedJSObject; + + is(window.t.getAttribute("dir"), initialDir == "ltr" ? "rtl" : "ltr", "The dir attribute must be correctly updated"); + is(window.inputEventCount, 1, "input event count must be 1 after"); + window.t.blur(); + var s2 = window.snapshotWindow(window); + ok(window.compareSnapshots(s2, window.Screenshots.get(initialDir, true), true)[0], + "Textarea should appear correctly after switching the direction (" + initialDir + ")"); + window.t.focus(); + is(window.inputEventCount, 1, "input event count must be 1 before"); + }); + yield simulateCtrlShiftX(aBrowser); + yield ContentTask.spawn(aBrowser, {initialDir}, function({initialDir}) { + var window = content.window.wrappedJSObject; + + is(window.inputEventCount, 2, "input event count must be 2 after"); + is(window.t.getAttribute("dir"), initialDir == "ltr" ? "ltr" : "rtl", "The dir attribute must be correctly updated"); + window.t.blur(); + var s3 = window.snapshotWindow(window); + ok(window.compareSnapshots(s3, window.Screenshots.get(initialDir, false), true)[0], + "Textarea should appear correctly after switching back the direction (" + initialDir + ")"); + window.t.parentNode.removeChild(window.t); + }); + } + + yield testDirection("ltr", aBrowser); + yield testDirection("rtl", aBrowser); + }); +});
new file mode 100644 --- /dev/null +++ b/editor/libeditor/tests/bug629172.html @@ -0,0 +1,15 @@ +<!DOCTYPE HTML> +<html> +<head> +<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script> +<style> +textarea { resize: none } +</style> +</head> +<body> +<div id="content"> +<textarea id="ltr-ref" style="display: none">test.</textarea> +<textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea> +</div +</body> +</html>
--- a/editor/libeditor/tests/mochitest.ini +++ b/editor/libeditor/tests/mochitest.ini @@ -97,18 +97,16 @@ skip-if = toolkit == 'android' skip-if = toolkit == 'android' [test_bug612128.html] [test_bug612447.html] [test_bug620906.html] skip-if = toolkit == 'android' #TIMED_OUT [test_bug622371.html] skip-if = toolkit == 'android' #bug 957797 [test_bug625452.html] -[test_bug629172.html] -skip-if = toolkit == 'android' || e10s [test_bug629845.html] [test_bug638596.html] [test_bug640321.html] skip-if = android_version == '18' # bug 1147989 [test_bug641466.html] [test_bug645914.html] [test_bug668599.html] [test_bug674770-1.html]
deleted file mode 100644 --- a/editor/libeditor/tests/test_bug629172.html +++ /dev/null @@ -1,88 +0,0 @@ -<!DOCTYPE HTML> -<html> -<!-- -https://bugzilla.mozilla.org/show_bug.cgi?id=629172 ---> -<head> - <title>Test for Bug 629172</title> - <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.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=629172">Mozilla Bug 629172</a> -<p id="display"></p> -<div id="content"> -<textarea id="ltr-ref" style="display: none">test.</textarea> -<textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea> -</div> -<pre id="test"> -<script type="application/javascript"> - -/** Test for Bug 629172 **/ -SimpleTest.waitForExplicitFinish(); -SimpleTest.waitForFocus(function() { - var LTRRef = document.getElementById("ltr-ref"); - var RTLRef = document.getElementById("rtl-ref"); - var Screenshots = {}; - - // generate the reference screenshots - LTRRef.style.display = ""; - document.body.clientWidth; - Screenshots.ltr = snapshotWindow(window); - LTRRef.parentNode.removeChild(LTRRef); - RTLRef.style.display = ""; - document.body.clientWidth; - Screenshots.rtl = snapshotWindow(window); - RTLRef.parentNode.removeChild(RTLRef); - Screenshots.get = function(dir, flip) { - if (flip) { - return this[dir == "rtl" ? "ltr" : "rtl"]; - } else { - return this[dir]; - } - }; - - function testDirection(initialDir) { - var t = document.createElement("textarea"); - t.setAttribute("dir", initialDir); - t.value = "test."; - var inputEventCount = 0; - t.oninput = function() { inputEventCount++; }; - document.getElementById("content").appendChild(t); - document.body.clientWidth; - var s1 = snapshotWindow(window); - ok(compareSnapshots(s1, Screenshots.get(initialDir, false), true)[0], - "Textarea should appear correctly before switching the direction (" + initialDir + ")"); - t.focus(); - is(inputEventCount, 0, "input event count must be 0 before"); - synthesizeKey("x", {accelKey: true, shiftKey: true}); - is(t.getAttribute("dir"), initialDir == "ltr" ? "rtl" : "ltr", "The dir attribute must be correctly updated"); - is(inputEventCount, 1, "input event count must be 1 after"); - t.blur(); - var s2 = snapshotWindow(window); - ok(compareSnapshots(s2, Screenshots.get(initialDir, true), true)[0], - "Textarea should appear correctly after switching the direction (" + initialDir + ")"); - t.focus(); - is(inputEventCount, 1, "input event count must be 1 before"); - synthesizeKey("x", {accelKey: true, shiftKey: true}); - is(inputEventCount, 2, "input event count must be 2 after"); - is(t.getAttribute("dir"), initialDir == "ltr" ? "ltr" : "rtl", "The dir attribute must be correctly updated"); - t.blur(); - var s3 = snapshotWindow(window); - ok(compareSnapshots(s3, Screenshots.get(initialDir, false), true)[0], - "Textarea should appear correctly after switching back the direction (" + initialDir + ")"); - t.parentNode.removeChild(t); - } - - testDirection("ltr"); - testDirection("rtl"); - - SimpleTest.finish(); -}); - -</script> -</pre> -</body> -</html>