tor-browser

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

test_resizers_appearance.html (4656B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <title>Test for resizers appearance</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <script src="/tests/SimpleTest/EventUtils.js"></script>
      7  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      8 </head>
      9 <body>
     10 <p id="display"></p>
     11 <div id="content" style="display: none;">
     12 
     13 </div>
     14 
     15 <div id="editor" contenteditable></div><br>
     16 <div id="clickaway" style="width: 30px; height: 30px; border: 3px solid red;"></div>
     17 <img src="green.png"><!-- for ensuring to load the image at first test of <img> case -->
     18 <pre id="test">
     19 
     20 <script class="testbody" type="application/javascript">
     21 "use strict";
     22 
     23 function resizingActive(win = window) {
     24  let Ci = SpecialPowers.Ci;
     25  let editor = SpecialPowers.wrap(win).docShell.editor;
     26  return editor && editor.QueryInterface(Ci.nsIHTMLObjectResizer).isObjectResizingActive;
     27 }
     28 
     29 SimpleTest.waitForExplicitFinish();
     30 SimpleTest.waitForFocus(async function() {
     31  async function waitForSelectionChange() {
     32    return new Promise(resolve => {
     33      document.addEventListener("selectionchange", () => {
     34        resolve();
     35      }, {once: true});
     36    });
     37  }
     38 
     39  let editor = document.getElementById("editor");
     40  let outOfEditor = document.getElementById("clickaway");
     41 
     42  const kTests = [
     43    { description: "<img>",
     44      innerHTML: "<img id=\"target\" src=\"green.png\" width=\"100\" height=\"100\">",
     45      resizable: true,
     46    },
     47    { description: "<table>",
     48      innerHTML: "<table id=\"target\" border><tr><td>1-1</td><td>1-2</td></tr><tr><td>2-1</td><td>2-2</td></tr></table>",
     49      resizable: true,
     50    },
     51    { description: "absolute positioned <div>",
     52      innerHTML: "<div id=\"target\" style=\"position: absolute; top: 50px; left: 50px;\">positioned</div>",
     53      resizable() { return document.queryCommandState("enableAbsolutePositionEditing"); },
     54    },
     55    { description: "fixed positioned <div>",
     56      innerHTML: "<div id=\"target\" style=\"position: fixed; top: 50px; left: 50px;\">positioned</div>",
     57      resizable: false,
     58    },
     59    { description: "relative positioned <div>",
     60      innerHTML: "<div id=\"target\" style=\"position: relative; top: 50px; left: 50px;\">positioned</div>",
     61      resizable: false,
     62    },
     63  ];
     64 
     65  for (let kEnableAbsolutePositionEditor of [true, false]) {
     66    document.execCommand("enableAbsolutePositionEditing", false, kEnableAbsolutePositionEditor);
     67    for (const kTest of kTests) {
     68      const kDescription = kTest.description +
     69        (kEnableAbsolutePositionEditor ? " (enabled absolute position editor)" : "") + ": ";
     70      editor.innerHTML = kTest.innerHTML;
     71      let target = document.getElementById("target");
     72 
     73      document.execCommand("enableObjectResizing", false, false);
     74      ok(!document.queryCommandState("enableObjectResizing"),
     75         kDescription + "Object resizer should be disabled by the call of execCommand");
     76 
     77      synthesizeMouseAtCenter(outOfEditor, {});
     78      let promiseSelectionChangeEvent1 = waitForSelectionChange();
     79      synthesizeMouseAtCenter(target, {});
     80      await promiseSelectionChangeEvent1;
     81      ok(!resizingActive(),
     82       kDescription + ": While enableObjectResizing is disabled, resizers shouldn't appear");
     83 
     84      document.execCommand("enableObjectResizing", false, true);
     85      ok(document.queryCommandState("enableObjectResizing"),
     86         kDescription + "Object resizer should be enabled by the call of execCommand");
     87 
     88      synthesizeMouseAtCenter(outOfEditor, {});
     89      let promiseSelectionChangeEvent2 = waitForSelectionChange();
     90      synthesizeMouseAtCenter(target, {});
     91      await promiseSelectionChangeEvent2;
     92 
     93      const kResizable = typeof kTest.resizable === "function" ? kTest.resizable() : kTest.resizable;
     94      is(resizingActive(), kResizable,
     95         kDescription + (kResizable ? "While enableObjectResizing is enabled, resizers should appear" :
     96                                      "Even while enableObjectResizing is enabled, resizers shouldn't appear"));
     97      document.execCommand("enableObjectResizing", false, false);
     98      ok(!resizingActive(),
     99         kDescription + "enableObjectResizing is disabled even while resizers are visible, resizers should disappear");
    100 
    101      document.execCommand("enableObjectResizing", false, true);
    102      is(resizingActive(), kResizable,
    103         kDescription + (kResizable ? "enableObjectResizing is enabled when resizable object is selected, resizers should appear" :
    104                                      "Even if enableObjectResizing is enabled when non-resizable object is selected, resizers shouldn't appear"));
    105    }
    106  }
    107 
    108  SimpleTest.finish();
    109 });
    110 </script>
    111 </pre>
    112 </body>
    113 </html>