Commit ff35201b authored by Zack Weinberg's avatar Zack Weinberg
Browse files

Bug 663291: Improve the SpecialPowers and SimpleTest APIs to make it easier to...

Bug 663291: Improve the SpecialPowers and SimpleTest APIs to make it easier to write mochitests that look at error console output.  Update all tests that were using ad-hoc console inspection or the old SimpleTest console handler API.  r=ted

--HG--
extra : rebase_source : 013c6031577f88a764fecee9750ee890b45d1181
parent 1aca71ae
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2,4 +2,3 @@
<meta charset=utf-8>
<title>Non-UTF form target</title>
<body onload="parent.finish();">
+1 −2
Original line number Diff line number Diff line
<!DOCTYPE html>
<!doctype html>
<meta charset=windows-1252>
<title>Non-UTF form</title>
<body onload="document.forms[0].submit();">
<form action="file_bug708620-2.html">
<input name=foo value=bar>
</form>
+14 −59
Original line number Diff line number Diff line
<!DOCTYPE HTML>
<!doctype html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=513194
@@ -6,67 +6,22 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=513194
<head>
  <meta charset="utf-8">
  <title>Test for Bug 513194</title>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css">
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">

  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

  const Cc = Components.classes;
  const Ci = Components.interfaces;
  const Cr = Components.results;

  var consoleService =
    Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);

  var consoleListener = {
    seenError: false,

    observe: function(message) {
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

      if (this.seenError) {
        ok(false, "Seen too many errors!");
      }
      
      this.seenError = true;

      ok(message.message.indexOf("Unknown property") > -1,
         "Wrong message");
    },
    
    finish: function() {
      ok(this.seenError , "Didn't get message.");
      SimpleTest.finish();
    },

    QueryInterface: function(iid) {
      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
      if (iid.equals(Ci.nsIConsoleListener) ||
          iid.equals(Ci.nsISupports)) {
        return this;
      }
      throw Cr.NS_NOINTERFACE;
    }
  };

  consoleService.reset();
  consoleService.registerListener(consoleListener);
  SimpleTest.waitForExplicitFinish();

  document.write("<style>qux { foo: bar; }<\/style>");

  function done() {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    consoleListener.finish();
    consoleService.unregisterListener(consoleListener);
  }
  setTimeout(done, 0);
<a target="_blank"
   href="https://bugzilla.mozilla.org/show_bug.cgi?id=631615"
   >Mozilla Bug 513194</a>
<script>
// The use of document.write is deliberate.  We are testing for the
// HTML parser to call the CSS parser once and only once when it
// encounters a new <style> element.
SimpleTest.runTestExpectingConsoleMessages(
  function () { document.write("<style>qux { foo : bar; }<\/style>") },
  [{ errorMessage: /Unknown property/ }]
);
</script>
</pre>
</body>
</html>
+10 −67
Original line number Diff line number Diff line
<!DOCTYPE HTML>
<!doctype html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=631615
@@ -6,76 +6,21 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=631615
<head>
  <meta charset="utf-8">
  <title>Test for Bug 631615</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css">
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=631615">Mozilla Bug 631615</a>
<pre id="monitor">
</pre>
<script type="application/javascript">

netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;

var consoleService =
  Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);

var messageCount = 0;
var monitor = document.getElementById("monitor");

var listener = {
  observe: function(message) {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

    if (message.message === "sentinel") {
      is(messageCount, 0, "should have been no console messages");
      removeListener();
      SimpleTest.finish();
    } else {
      messageCount++;
      var err = "" + messageCount + ": " + message.message + "\n";
      monitor.appendChild(document.createTextNode(err));
    }
  },

  QueryInterface: function(iid) {
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
    if (iid.equals(Ci.nsIConsoleListener) ||
        iid.equals(Ci.nsISupports)) {
      return this;
    }
    throw Cr.NS_NOINTERFACE;
  }
};

function addListener() {
  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
  consoleService.reset();
  consoleService.registerListener(listener);
}

function removeListener() {
  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
  consoleService.unregisterListener(listener);
}

function postSentinel() {
  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
  consoleService.logStringMessage("sentinel");
}

SimpleTest.waitForExplicitFinish();

<a target="_blank"
   href="https://bugzilla.mozilla.org/show_bug.cgi?id=631615"
   >Mozilla Bug 631615</a>
<pre id="monitor"></pre>
<script>
function doTest() {
  var monitor = document.getElementById("monitor");
  var html = document.documentElement;
  var results;
  var matches = html.matchesSelector || html.mozMatchesSelector;

  addListener();
  try {
    results = "return: " +
      matches.call(html, "[test!='']:sizzle") + "\n";
@@ -85,11 +30,9 @@ function doTest() {

  monitor.appendChild(document.createTextNode(results));
  is(results.slice(0, 6), "throws", "looking for an exception");

  postSentinel();
}
doTest();

SimpleTest.runTestExpectingConsoleMessages(doTest, []);
</script>
</body>
</html>
+23 −48
Original line number Diff line number Diff line
<!DOCTYPE HTML>
<!doctype html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=708620
@@ -6,61 +6,36 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=708620
<head>
  <meta charset="utf-8">
  <title>Test for Bug 708620</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" href="/tests/SimpleTest/test.css">
</head>
<body onload="start();">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=708620">Mozilla Bug 708620</a>
<p id="display"></p>
<div id="content" style="display: none">
<body>
<a target="_blank"
   href="https://bugzilla.mozilla.org/show_bug.cgi?id=708620"
   >Mozilla Bug 708620</a>
<iframe></iframe>
</div>
<pre id="test">
<script type="application/javascript">

<script>
/** Test for Bug 708620 **/

SimpleTest.waitForExplicitFinish();

var tests = [
  "file_bug708620.html"
];

function resolveURL(relative) {
  var a = document.createElement('a');
  a.href = relative;
  return a.href;
}

var resolvedURL = resolveURL(tests[0]);

var expectedErrors = [
  '[JavaScript Warning: "A form was submitted in the windows-1252 encoding which cannot encode all Unicode characters, so user input may get corrupted. To avoid this problem, the page should be changed so that the form is submitted in the UTF-8 encoding either by changing the encoding of the page itself to UTF-8 or by specifying accept-charset=utf-8 on the form element." {file: "' + resolvedURL + '" line: 1}]'
];

function consoleError(msg, fileName) {
  // Ignore messages not generated by the test
  if (fileName !== resolvedURL) {
    return;
  }
  var expected = expectedErrors.shift();
  is(msg, expected, "Not the right error message");
}

SpecialPowers.addErrorConsoleListener(consoleError);

function start() {
  var url = tests.shift();
  document.getElementsByTagName("iframe")[0].src = url;
SimpleTest.monitorConsole(SimpleTest.finish, [
  { errorMessage: "A form was submitted in the windows-1252 encoding "+
                  "which cannot encode all Unicode characters, so user "+
                  "input may get corrupted. To avoid this problem, the "+
                  "page should be changed so that the form is submitted "+
                  "in the UTF-8 encoding either by changing the encoding "+
                  "of the page itself to UTF-8 or by specifying "+
                  "accept-charset=utf-8 on the form element.",
    isWarning: true }
]);

window.onload = function () {
  document.getElementsByTagName("iframe")[0].src = "file_bug708620.html";
}

function finish() {
    is(expectedErrors.length, 0, "The error supply was not exhausted");
    SpecialPowers.removeErrorConsoleListener(consoleError);
    SimpleTest.finish();
  SimpleTest.endMonitorConsole();
}

</script>
</pre>
</body>
</html>
Loading