summaryrefslogtreecommitdiffstats
path: root/editor/libeditor/tests/test_bug629172.html
diff options
context:
space:
mode:
Diffstat (limited to 'editor/libeditor/tests/test_bug629172.html')
-rw-r--r--editor/libeditor/tests/test_bug629172.html105
1 files changed, 105 insertions, 0 deletions
diff --git a/editor/libeditor/tests/test_bug629172.html b/editor/libeditor/tests/test_bug629172.html
new file mode 100644
index 0000000000..55d1ed89b6
--- /dev/null
+++ b/editor/libeditor/tests/test_bug629172.html
@@ -0,0 +1,105 @@
+<!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">test.</textarea>
+<textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea>
+</div>
+<pre id="test">
+<script>
+
+/** Test for Bug 629172 **/
+SimpleTest.waitForExplicitFinish();
+SimpleTest.waitForFocus(async function() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["test.events.async.enabled", true]],
+ });
+
+ let LTRRef = document.getElementById("ltr-ref");
+ let RTLRef = document.getElementById("rtl-ref");
+ let ReferenceScreenshots = {};
+
+ // generate the reference screenshots
+ document.body.clientWidth;
+ ReferenceScreenshots.ltr = snapshotWindow(window);
+ LTRRef.remove();
+ RTLRef.style.display = "";
+ document.body.clientWidth;
+ ReferenceScreenshots.rtl = snapshotWindow(window);
+ RTLRef.remove();
+
+ async function testDirection(initialDir) {
+ function revertDir(aDir) {
+ return aDir == "rtl" ? "ltr" : "rtl";
+ }
+
+ function promiseFormatSetBlockTextDirectionInputEvent(aElement) {
+ return new Promise(resolve => {
+ function handler(aEvent) {
+ if (aEvent.inputType !== "formatSetBlockTextDirection") {
+ ok(false, `Unexpected input event received: inputType="${aEvent.inputType}"`);
+ } else {
+ aElement.removeEventListener("input", handler, true);
+ SimpleTest.executeSoon(resolve);
+ }
+ }
+ aElement.addEventListener("input", handler, true);
+ });
+ }
+
+ let textarea = document.createElement("textarea");
+ textarea.setAttribute("dir", initialDir);
+ textarea.value = "test.";
+ document.getElementById("content").appendChild(textarea);
+ document.body.clientWidth;
+ assertSnapshots(snapshotWindow(window), ReferenceScreenshots[initialDir],
+ /* expectEqual = */ true, /* fuzz = */ null,
+ `<textarea dir="${initialDir}"> before Accel+Shift+X`,
+ `<textarea dir="${initialDir}">`);
+ textarea.focus();
+ let waitForInputEvent = promiseFormatSetBlockTextDirectionInputEvent(textarea);
+ synthesizeKey("X", {accelKey: true, shiftKey: true});
+ await waitForInputEvent;
+ is(textarea.getAttribute("dir"), revertDir(initialDir),
+ "The dir attribute must be correctly updated with first Accel+Shift+X");
+ textarea.blur();
+ assertSnapshots(snapshotWindow(window), ReferenceScreenshots[revertDir(initialDir)],
+ /* expectEqual = */ true, /* fuzz = */ null,
+ `<textarea dir="${initialDir}"> after first Accel+Shift+X`,
+ `<textarea dir="${revertDir(initialDir)}">`);
+ textarea.focus();
+ waitForInputEvent = promiseFormatSetBlockTextDirectionInputEvent(textarea);
+ synthesizeKey("X", {accelKey: true, shiftKey: true});
+ await waitForInputEvent;
+ is(textarea.getAttribute("dir"), initialDir,
+ "The dir attribute must be correctly recovered with second Accel+Shift+X");
+ textarea.blur();
+ assertSnapshots(snapshotWindow(window), ReferenceScreenshots[initialDir],
+ /* expectEqual = */ true, /* fuzz = */ null,
+ `<textarea dir="${initialDir}"> after second Accel+Shift+X`,
+ `<textarea dir="${initialDir}">`);
+ textarea.remove();
+ }
+
+ await testDirection("ltr");
+ await testDirection("rtl");
+
+ SimpleTest.finish();
+});
+
+</script>
+</pre>
+</body>
+</html>