DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (71042f6bc4f6)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=795785
-->
<head>
  <title>Test for Bug 795785</title>
  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script src="/tests/SimpleTest/EventUtils.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=795785">Mozilla Bug 795785</a>
<div id="display">
  <textarea id="textarea" style="overflow: hidden; height: 3em; width: 5em; word-wrap: normal;"></textarea>
  <div id="div" contenteditable style="overflow: hidden; height: 3em; width: 5em;"></div>
</div>
<div id="content" style="display: none">

</div>
<pre id="test">
</pre>

<script class="testbody" type="application/javascript">


SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout("This test uses setTimeouts in order to fix an intermittent failure.");

// Turn off spatial navigation because it hijacks arrow key events and VK_RETURN
// events.
SimpleTest.waitForFocus(function() {
  SpecialPowers.pushPrefEnv({"set": [["snav.enabled", false]]}, runTests);
});
var textarea = document.getElementById("textarea");
var div = document.getElementById("div");

function hitEventLoop(aFunc, aTimes) {
  if (--aTimes) {
    setTimeout(hitEventLoop, 0, aFunc, aTimes);
  } else {
    setTimeout(aFunc, 100);
  }
}

function doKeyEventTest(aElement, aElementDescription, aCallback) {
  aElement.focus();
  aElement.scrollTop = 0;
  hitEventLoop(function() {
    is(aElement.scrollTop, 0,
       aElementDescription + "'s scrollTop isn't 0");
    synthesizeKey("KEY_Enter", {shiftKey: true, repeat: 6});
    hitEventLoop(function() {
      isnot(aElement.scrollTop, 0,
            aElementDescription + " was not scrolled by inserting line breaks");
      var scrollTop = aElement.scrollTop;
      synthesizeKey("KEY_ArrowUp", {repeat: 5});
      hitEventLoop(function() {
        isnot(aElement.scrollTop, scrollTop,
              aElementDescription + " was not scrolled by up key events");
        synthesizeKey("KEY_ArrowDown", {repeat: 5});
        hitEventLoop(function() {
          is(aElement.scrollTop, scrollTop,
             aElementDescription + " was not scrolled by down key events");
          var longWord = "aaaaaaaaaaaaaaaaaaaa";
          sendString(longWord);
          hitEventLoop(function() {
            isnot(aElement.scrollLeft, 0,
                  aElementDescription + " was not scrolled by typing long word");
            var scrollLeft = aElement.scrollLeft;
            synthesizeKey("KEY_ArrowLeft", {repeat: longWord.length});
            hitEventLoop(function() {
              isnot(aElement.scrollLeft, scrollLeft,
                    aElementDescription + " was not scrolled by left key events");
              synthesizeKey("KEY_ArrowRight", {repeat: longWord.length});
              hitEventLoop(function() {
                is(aElement.scrollLeft, scrollLeft,
                   aElementDescription + " was not scrolled by right key events");
                aCallback();
              }, 20);
            }, 20);
          }, 20);
        }, 20);
      }, 20);
    }, 20);
  }, 20);
}

function doCompositionTest(aElement, aElementDescription, aCallback) {
  aElement.focus();
  aElement.scrollTop = 0;
  hitEventLoop(function() {
    is(aElement.scrollTop, 0,
       aElementDescription + "'s scrollTop isn't 0");
    var str = "Web \u958b\u767a\u8005\u306e\u7686\u3055\u3093\u306f\u3001" +
              "Firefox \u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b HTML5" +
              " \u3084 CSS \u306e\u65b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3059" +
              "\u308b\u3053\u3068\u3067\u3001\u9b45\u529b\u3042\u308b Web " +
              "\u30b5\u30a4\u30c8\u3084\u9769\u65b0\u7684\u306a Web \u30a2" +
              "\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3088\u308a" +
              "\u77ed\u6642\u9593\u3067\u7c21\u5358\u306b\u4f5c\u6210\u3067" +
              "\u304d\u307e\u3059\u3002";
    synthesizeCompositionChange({
        composition: {
          string: str,
          clauses: [
            { length: str.length, attr: COMPOSITION_ATTR_RAW_CLAUSE },
          ],
        },
        caret: { start: str.length, length: 0 },
      });
    hitEventLoop(function() {
      isnot(aElement.scrollTop, 0,
            aElementDescription + " was not scrolled by composition");
      synthesizeComposition({ type: "compositioncommit", data: "" });
      hitEventLoop(function() {
        is(aElement.scrollTop, 0,
           aElementDescription + " was not scrolled back to the top by canceling composition");
        aCallback();
      }, 20);
    }, 20);
  }, 20);
}

function runTests() {
  doKeyEventTest(textarea, "textarea",
    function() {
      textarea.value = "";
      doKeyEventTest(div, "div (contenteditable)",
        function() {
          div.innerHTML = "";
          doCompositionTest(textarea, "textarea",
            function() {
              doCompositionTest(div, "div (contenteditable)",
                function() {
                  SimpleTest.finish();
                });
            });
        });
    });
}

</script>
</body>

</html>