editor/libeditor/text/tests/test_bug596333.html
author Marco Bonardo <mbonardo@mozilla.com>
Tue, 26 Apr 2011 14:25:07 +0200
changeset 68758 512f90d0dce157f6867e3c90971062b787840cd3
parent 54192 85bcddd5576ce60c097f3ecaa306a67f32fb8a0b
child 69392 7af9641c195dc88c8b96b0423425f41deca695be
permissions -rw-r--r--
Bug 524091 - Remove microsummaries support. (Places changes)

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=596333
-->
<head>
  <title>Test for Bug 596333</title>
  <script type="application/javascript" src="/MochiKit/packed.js"></script>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=596333">Mozilla Bug 596333</a>
<p id="display"></p>
<div id="content" style="display: none">

</div>
<pre id="test">
<script type="application/javascript">

/** Test for Bug 596333 **/

SimpleTest.waitForExplicitFinish();
addLoadEvent(function() SimpleTest.executeSoon(runTest));

var gMisspeltWords;

function getEditor() {
  var Ci = Components.interfaces;
  return document.getElementById("edit")
                 .QueryInterface(Ci.nsIDOMNSEditableElement)
                 .editor;
}

function getSpellCheckSelection() {
  var editor = getEditor();
  var selcon = editor.selectionController;
  return selcon.getSelection(selcon.SELECTION_SPELLCHECK);
}

function append(str) {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

  var edit = document.getElementById("edit");
  edit.focus();
  var editor = getEditor();

  for (var i = 0; i < str.length; ++i) {
    synthesizeKey(str[i], {});
  }
}

function paste(str) {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

  var edit = document.getElementById("edit");
  var Cc = Components.classes, Ci = Components.interfaces;
  var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
  var s = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
  s.data = str;
  trans.setTransferData("text/unicode", s, str.length * 2);

  getEditor().pasteTransferable(trans);
}

function runTest() {
  gMisspeltWords = ["haz", "cheezburger"];
  is(isSpellingCheckOk(), true, "All misspellings before editing are accounted for.");

  var edit = document.getElementById("edit");
  append(" becaz I'm a lolcat!");
  SimpleTest.executeSoon(function() {
    gMisspeltWords.push("becaz");
    gMisspeltWords.push("lolcat");
    is(isSpellingCheckOk(), true, "All misspellings after typing are accounted for.");

    // Now, type an invalid word, and instead of hitting "space" at the end, just blur
    // the textarea and see if the spell check after the blur event catches it.
    append(" workd");
    edit.blur();
    SimpleTest.executeSoon(function() {
      gMisspeltWords.push("workd");
      is(isSpellingCheckOk(), true, "All misspellings after blur are accounted for.");

      // Also, test the case when we're entering the first word in a textarea
      gMisspeltWords = ["workd"];
      edit.value = "";
      append("workd ");
      SimpleTest.executeSoon(function() {
        is(isSpellingCheckOk(), true, "Misspelling in the first entered word is accounted for.");

        // Make sure that pasting would also trigger spell checking for the previous word
        gMisspeltWords = ["workd"];
        edit.value = "";
        append("workd");
        paste("           x");
        SimpleTest.executeSoon(function() {
          is(isSpellingCheckOk(), true, "Misspelling is accounted for after pasting.");

          SimpleTest.finish();
        });
      });
    });
  });
}

function isSpellingCheckOk() {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

  var sel = getSpellCheckSelection();
  var numWords = sel.rangeCount;

  is(numWords, gMisspeltWords.length, "Correct number of misspellings and words.");

  if (numWords != gMisspeltWords.length)
    return false;

  for (var i=0; i<numWords; i++) {
    var word = sel.getRangeAt(i);
    is (word, gMisspeltWords[i], "Misspelling is what we think it is.");
    if (word != gMisspeltWords[i])
      return false;
  }
  return true;
}

</script>
</pre>

<textarea id="edit">I can haz cheezburger</textarea>

</body>
</html>