summaryrefslogtreecommitdiffstats
path: root/devtools/shared/webconsole/test/test_cached_messages.html
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/webconsole/test/test_cached_messages.html')
-rw-r--r--devtools/shared/webconsole/test/test_cached_messages.html230
1 files changed, 230 insertions, 0 deletions
diff --git a/devtools/shared/webconsole/test/test_cached_messages.html b/devtools/shared/webconsole/test/test_cached_messages.html
new file mode 100644
index 000000000..210543ca3
--- /dev/null
+++ b/devtools/shared/webconsole/test/test_cached_messages.html
@@ -0,0 +1,230 @@
+<!DOCTYPE HTML>
+<html lang="en">
+<head>
+ <meta charset="utf8">
+ <title>Test for cached messages</title>
+ <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript;version=1.8" src="common.js"></script>
+ <!-- Any copyright is dedicated to the Public Domain.
+ - http://creativecommons.org/publicdomain/zero/1.0/ -->
+</head>
+<body>
+<p>Test for cached messages</p>
+
+<script class="testbody" type="application/javascript;version=1.8">
+let expectedConsoleCalls = [];
+let expectedPageErrors = [];
+
+function doPageErrors()
+{
+ Services.console.reset();
+
+ expectedPageErrors = [
+ {
+ _type: "PageError",
+ errorMessage: /fooColor/,
+ sourceName: /.+/,
+ category: "CSS Parser",
+ timeStamp: /^\d+$/,
+ error: false,
+ warning: true,
+ exception: false,
+ strict: false,
+ },
+ {
+ _type: "PageError",
+ errorMessage: /doTheImpossible/,
+ sourceName: /.+/,
+ category: "chrome javascript",
+ timeStamp: /^\d+$/,
+ error: false,
+ warning: false,
+ exception: true,
+ strict: false,
+ },
+ ];
+
+ let container = document.createElement("script");
+ document.body.appendChild(container);
+ container.textContent = "document.body.style.color = 'fooColor';";
+ document.body.removeChild(container);
+
+ SimpleTest.expectUncaughtException();
+
+ container = document.createElement("script");
+ document.body.appendChild(container);
+ container.textContent = "document.doTheImpossible();";
+ document.body.removeChild(container);
+}
+
+function doConsoleCalls()
+{
+ ConsoleAPIStorage.clearEvents();
+
+ top.console.log("foobarBaz-log", undefined);
+ top.console.info("foobarBaz-info", null);
+ top.console.warn("foobarBaz-warn", document.body);
+
+ expectedConsoleCalls = [
+ {
+ _type: "ConsoleAPI",
+ level: "log",
+ filename: /test_cached_messages/,
+ functionName: "doConsoleCalls",
+ timeStamp: /^\d+$/,
+ arguments: ["foobarBaz-log", { type: "undefined" }],
+ },
+ {
+ _type: "ConsoleAPI",
+ level: "info",
+ filename: /test_cached_messages/,
+ functionName: "doConsoleCalls",
+ timeStamp: /^\d+$/,
+ arguments: ["foobarBaz-info", { type: "null" }],
+ },
+ {
+ _type: "ConsoleAPI",
+ level: "warn",
+ filename: /test_cached_messages/,
+ functionName: "doConsoleCalls",
+ timeStamp: /^\d+$/,
+ arguments: ["foobarBaz-warn", { type: "object", actor: /[a-z]/ }],
+ },
+ ];
+}
+</script>
+
+<script class="testbody" type="text/javascript;version=1.8">
+SimpleTest.waitForExplicitFinish();
+
+let consoleAPIListener, consoleServiceListener;
+let consoleAPICalls = 0;
+let pageErrors = 0;
+
+let handlers = {
+ onConsoleAPICall: function onConsoleAPICall(aMessage)
+ {
+ for (let msg of expectedConsoleCalls) {
+ if (msg.functionName == aMessage.functionName &&
+ msg.filename.test(aMessage.filename)) {
+ consoleAPICalls++;
+ break;
+ }
+ }
+ if (consoleAPICalls == expectedConsoleCalls.length) {
+ checkConsoleAPICache();
+ }
+ },
+
+ onConsoleServiceMessage: function onConsoleServiceMessage(aMessage)
+ {
+ if (!(aMessage instanceof Ci.nsIScriptError)) {
+ return;
+ }
+ for (let msg of expectedPageErrors) {
+ if (msg.category == aMessage.category &&
+ msg.errorMessage.test(aMessage.errorMessage)) {
+ pageErrors++;
+ break;
+ }
+ }
+ if (pageErrors == expectedPageErrors.length) {
+ testPageErrors();
+ }
+ },
+};
+
+function startTest()
+{
+ removeEventListener("load", startTest);
+
+ consoleAPIListener = new ConsoleAPIListener(top, handlers);
+ consoleAPIListener.init();
+
+ doConsoleCalls();
+}
+
+function checkConsoleAPICache()
+{
+ consoleAPIListener.destroy();
+ consoleAPIListener = null;
+ attachConsole(["ConsoleAPI"], onAttach1);
+}
+
+function onAttach1(aState, aResponse)
+{
+ aState.client.getCachedMessages(["ConsoleAPI"],
+ onCachedConsoleAPI.bind(null, aState));
+}
+
+function onCachedConsoleAPI(aState, aResponse)
+{
+ let msgs = aResponse.messages;
+ info("cached console messages: " + msgs.length);
+
+ ok(msgs.length >= expectedConsoleCalls.length,
+ "number of cached console messages");
+
+ for (let msg of msgs) {
+ for (let expected of expectedConsoleCalls) {
+ if (expected.functionName == msg.functionName &&
+ expected.filename.test(msg.filename)) {
+ expectedConsoleCalls.splice(expectedConsoleCalls.indexOf(expected));
+ checkConsoleAPICall(msg, expected);
+ break;
+ }
+ }
+ }
+
+ is(expectedConsoleCalls.length, 0, "all expected messages have been found");
+
+ closeDebugger(aState, function() {
+ consoleServiceListener = new ConsoleServiceListener(null, handlers);
+ consoleServiceListener.init();
+ doPageErrors();
+ });
+}
+
+function testPageErrors()
+{
+ consoleServiceListener.destroy();
+ consoleServiceListener = null;
+ attachConsole(["PageError"], onAttach2);
+}
+
+function onAttach2(aState, aResponse)
+{
+ aState.client.getCachedMessages(["PageError"],
+ onCachedPageErrors.bind(null, aState));
+}
+
+function onCachedPageErrors(aState, aResponse)
+{
+ let msgs = aResponse.messages;
+ info("cached page errors: " + msgs.length);
+
+ ok(msgs.length >= expectedPageErrors.length,
+ "number of cached page errors");
+
+ for (let msg of msgs) {
+ for (let expected of expectedPageErrors) {
+ if (expected.category == msg.category &&
+ expected.errorMessage.test(msg.errorMessage)) {
+ expectedPageErrors.splice(expectedPageErrors.indexOf(expected));
+ checkObject(msg, expected);
+ break;
+ }
+ }
+ }
+
+ is(expectedPageErrors.length, 0, "all expected messages have been found");
+
+ closeDebugger(aState, function() {
+ SimpleTest.finish();
+ });
+}
+
+addEventListener("load", startTest);
+</script>
+</body>
+</html>