diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_console_consolejsm_output.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_console_consolejsm_output.js | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_console_consolejsm_output.js b/devtools/client/webconsole/test/browser/browser_console_consolejsm_output.js new file mode 100644 index 0000000000..e80aac6b83 --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_console_consolejsm_output.js @@ -0,0 +1,140 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that Console.sys.mjs outputs messages to the Browser Console. + +"use strict"; + +add_task(async function testCategoryLogs() { + const consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"]; + const storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage); + storage.clearEvents(); + + const { console } = ChromeUtils.importESModule( + "resource://gre/modules/Console.sys.mjs" + ); + console.log("bug861338-log-cached"); + + const hud = await BrowserConsoleManager.toggleBrowserConsole(); + + await checkMessageExists(hud, "bug861338-log-cached"); + + await clearOutput(hud); + + function testTrace() { + console.trace(); + } + + console.time("foobarTimer"); + const foobar = { bug851231prop: "bug851231value" }; + + console.log("bug851231-log"); + console.info("bug851231-info"); + console.warn("bug851231-warn"); + console.error("bug851231-error", foobar); + console.debug("bug851231-debug"); + console.dir({ "bug851231-dir": 1 }); + testTrace(); + console.timeEnd("foobarTimer"); + + info("wait for the Console.sys.mjs messages"); + + await checkMessageExists(hud, "bug851231-log"); + await checkMessageExists(hud, "bug851231-info"); + await checkMessageExists(hud, "bug851231-warn"); + await checkMessageExists(hud, "bug851231-error"); + await checkMessageExists(hud, "bug851231-debug"); + await checkMessageExists(hud, "bug851231-dir"); + await checkMessageExists(hud, "console.trace()"); + await checkMessageExists(hud, "foobarTimer"); + + await clearOutput(hud); + await BrowserConsoleManager.toggleBrowserConsole(); +}); + +add_task(async function testFilter() { + const consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"]; + const storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage); + storage.clearEvents(); + + const { ConsoleAPI } = ChromeUtils.importESModule( + "resource://gre/modules/Console.sys.mjs" + ); + const console2 = new ConsoleAPI(); + const hud = await BrowserConsoleManager.toggleBrowserConsole(); + + // Enable the error category and disable the log category. + await setFilterState(hud, { + error: true, + log: false, + }); + + const shouldBeVisible = "Should be visible"; + const shouldBeHidden = "Should be hidden"; + + console2.log(shouldBeHidden); + console2.error(shouldBeVisible); + + await checkMessageExists(hud, shouldBeVisible); + // Here we can safely assert that the log message is not visible, since the + // error message was logged after and is visible. + await checkMessageHidden(hud, shouldBeHidden); + + await resetFilters(hud); + await clearOutput(hud); +}); + +// Test that console.profile / profileEnd trigger the right events +add_task(async function testProfile() { + const consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"]; + const storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage); + const { console } = ChromeUtils.importESModule( + "resource://gre/modules/Console.sys.mjs" + ); + + storage.clearEvents(); + + const profilerEvents = []; + + function observer(subject, topic) { + is(topic, "console-api-profiler", "The topic is 'console-api-profiler'"); + const subjectObj = subject.wrappedJSObject; + const event = { action: subjectObj.action, name: subjectObj.arguments[0] }; + info(`Profiler event: action=${event.action}, name=${event.name}`); + profilerEvents.push(event); + } + + Services.obs.addObserver(observer, "console-api-profiler"); + + console.profile("test"); + console.profileEnd("test"); + + Services.obs.removeObserver(observer, "console-api-profiler"); + + // Test that no messages were logged to the storage + const consoleEvents = storage.getEvents(); + is(consoleEvents.length, 0, "There are zero logged messages"); + + // Test that two profiler events were fired + is(profilerEvents.length, 2, "Got two profiler events"); + is(profilerEvents[0].action, "profile", "First event has the right action"); + is(profilerEvents[0].name, "test", "First event has the right name"); + is( + profilerEvents[1].action, + "profileEnd", + "Second event has the right action" + ); + is(profilerEvents[1].name, "test", "Second event has the right name"); +}); + +async function checkMessageExists(hud, msg) { + info(`Checking "${msg}" was logged`); + const message = await waitFor(() => findConsoleAPIMessage(hud, msg)); + ok(message, `"${msg}" was logged`); +} + +async function checkMessageHidden(hud, msg) { + info(`Checking "${msg}" was not logged`); + await waitFor(() => findConsoleAPIMessage(hud, msg) == null); + ok(true, `"${msg}" was not logged`); +} |