tor-browser

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

test_bug460740.html (3096B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=460740
      5 -->
      6 <head>
      7  <title>Test for Bug 460740</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <script src="/tests/SimpleTest/EventUtils.js"></script>
     10  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     11 </head>
     12 <body>
     13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=460740">Mozilla Bug 460740</a>
     14 <p id="display"></p>
     15 <div id="content">
     16  <ul>
     17    <li contenteditable>
     18      Editable LI
     19    </li>
     20    <li>
     21      <div contenteditable>
     22        Editable DIV inside LI
     23      </div>
     24    </li>
     25    <li>
     26      <div>
     27        <div contenteditable>
     28          Editable DIV inside DIV inside LI
     29        </div>
     30      </div>
     31    </li>
     32    <li>
     33      <h3>
     34        <div contenteditable>
     35          Editable DIV inside H3 inside LI
     36        </div>
     37      </h3>
     38    </li>
     39  </ul>
     40  <div contenteditable>
     41    Editable DIV
     42  </div>
     43  <h3 contenteditable>
     44    Editable H3
     45  </h3>
     46  <p contenteditable>
     47    Editable P
     48  </p>
     49  <div>
     50    <p contenteditable>
     51      Editable P in a DIV
     52    </p>
     53  </div>
     54  <p><span contenteditable>Editable SPAN in a P</span></p>
     55 </div>
     56 
     57 <pre id="test">
     58 <script type="application/javascript">
     59 
     60 /** Test for Bug 460740 */
     61 SimpleTest.waitForExplicitFinish();
     62 SimpleTest.waitForFocus(runTests);
     63 
     64 const CARET_BEGIN  = 0;
     65 const CARET_MIDDLE = 1;
     66 const CARET_END    = 2;
     67 
     68 function split(element, caretPos) {
     69  // compute the requested position
     70  var len = element.textContent.length;
     71  var pos = -1;
     72  switch (caretPos) {
     73    case CARET_BEGIN:
     74      pos = 0;
     75      break;
     76    case CARET_MIDDLE:
     77      pos = Math.floor(len / 2);
     78      break;
     79    case CARET_END:
     80      pos = len;
     81      break;
     82  }
     83 
     84  // put the caret on the requested position
     85  var range = document.createRange();
     86  var sel = window.getSelection();
     87  range.setStart(element.firstChild, pos);
     88  range.setEnd(element.firstChild, pos);
     89  sel.addRange(range);
     90 
     91  // simulates a [Return] keypress
     92  synthesizeKey("VK_RETURN", {shiftKey: true});
     93 }
     94 
     95 // count the number of non-BR elements in #content
     96 function getBlockCount() {
     97  return document.querySelectorAll("#content *:not(br)").length;
     98 }
     99 
    100 // count the number of BRs in element
    101 function checkBR(element) {
    102  return element.querySelectorAll("br").length;
    103 }
    104 
    105 function runTests() {
    106  var count = getBlockCount();
    107  var nodes = document.querySelectorAll("#content [contenteditable]");
    108  for (var i = 0; i < nodes.length; i++) {
    109    var node = nodes[i];
    110    node.focus();
    111    is(checkBR(node), 0, node.textContent.trim() + ": This node should not have any <br> element yet.");
    112    for (var j = 0; j < 3; j++) { // CARET_BEGIN|MIDDLE|END
    113      split(node, j);
    114      ok(checkBR(node) > 0, node.textContent.trim() + " " + j + ": Pressing [Return] should add (at least) one <br> element.");
    115      is(getBlockCount(), count, node.textContent.trim() + " " + j + ": Pressing [Return] should not change the number of non-<br> elements.");
    116      document.execCommand("Undo", false, null);
    117    }
    118  }
    119  SimpleTest.finish();
    120 }
    121 </script>
    122 </pre>
    123 </body>
    124 </html>