tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_bug629172.html (3950B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=629172
      5 -->
      6 <head>
      7  <title>Test for Bug 629172</title>
      8  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
     10  <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
     11  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     12 </head>
     13 <body>
     14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=629172">Mozilla Bug 629172</a>
     15 <p id="display"></p>
     16 <div id="content">
     17 <textarea id="ltr-ref">test.</textarea>
     18 <textarea id="rtl-ref" style="display: none; direction: rtl">test.</textarea>
     19 </div>
     20 <pre id="test">
     21 <script>
     22 
     23 /** Test for Bug 629172 */
     24 SimpleTest.waitForExplicitFinish();
     25 SimpleTest.waitForFocus(async function() {
     26  await SpecialPowers.pushPrefEnv({
     27    set: [["test.events.async.enabled", true]],
     28  });
     29 
     30  let LTRRef = document.getElementById("ltr-ref");
     31  let RTLRef = document.getElementById("rtl-ref");
     32  let ReferenceScreenshots = {};
     33 
     34  // generate the reference screenshots
     35  document.body.clientWidth;
     36  ReferenceScreenshots.ltr = snapshotWindow(window);
     37  LTRRef.remove();
     38  RTLRef.style.display = "";
     39  document.body.clientWidth;
     40  ReferenceScreenshots.rtl = snapshotWindow(window);
     41  RTLRef.remove();
     42 
     43  async function testDirection(initialDir) {
     44    function revertDir(aDir) {
     45      return aDir == "rtl" ? "ltr" : "rtl";
     46    }
     47 
     48    function promiseFormatSetBlockTextDirectionInputEvent(aElement) {
     49      return new Promise(resolve => {
     50        function handler(aEvent) {
     51          if (aEvent.inputType !== "formatSetBlockTextDirection") {
     52            ok(false, `Unexpected input event received: inputType="${aEvent.inputType}"`);
     53          } else {
     54            aElement.removeEventListener("input", handler, true);
     55            SimpleTest.executeSoon(resolve);
     56          }
     57        }
     58        aElement.addEventListener("input", handler, true);
     59      });
     60    }
     61 
     62    let textarea = document.createElement("textarea");
     63    textarea.setAttribute("dir", initialDir);
     64    textarea.value = "test.";
     65    document.getElementById("content").appendChild(textarea);
     66    document.body.clientWidth;
     67    assertSnapshots(snapshotWindow(window), ReferenceScreenshots[initialDir],
     68                    /* expectEqual = */ true, /* fuzz = */ null,
     69                    `<textarea dir="${initialDir}"> before Accel+Shift+X`,
     70                    `<textarea dir="${initialDir}">`);
     71    textarea.focus();
     72    let waitForInputEvent = promiseFormatSetBlockTextDirectionInputEvent(textarea);
     73    synthesizeKey("X", {accelKey: true, shiftKey: true});
     74    await waitForInputEvent;
     75    is(textarea.getAttribute("dir"), revertDir(initialDir),
     76       "The dir attribute must be correctly updated with first Accel+Shift+X");
     77    textarea.blur();
     78    assertSnapshots(snapshotWindow(window), ReferenceScreenshots[revertDir(initialDir)],
     79                    /* expectEqual = */ true, /* fuzz = */ null,
     80                    `<textarea dir="${initialDir}"> after first Accel+Shift+X`,
     81                    `<textarea dir="${revertDir(initialDir)}">`);
     82    textarea.focus();
     83    waitForInputEvent = promiseFormatSetBlockTextDirectionInputEvent(textarea);
     84    synthesizeKey("X", {accelKey: true, shiftKey: true});
     85    await waitForInputEvent;
     86    is(textarea.getAttribute("dir"), initialDir,
     87       "The dir attribute must be correctly recovered with second Accel+Shift+X");
     88    textarea.blur();
     89    assertSnapshots(snapshotWindow(window), ReferenceScreenshots[initialDir],
     90                    /* expectEqual = */ true, /* fuzz = */ null,
     91                    `<textarea dir="${initialDir}"> after second Accel+Shift+X`,
     92                    `<textarea dir="${initialDir}">`);
     93    textarea.remove();
     94  }
     95 
     96  await testDirection("ltr");
     97  await testDirection("rtl");
     98 
     99  SimpleTest.finish();
    100 });
    101 
    102 </script>
    103 </pre>
    104 </body>
    105 </html>