diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser_webconsole_clear_method.js')
-rw-r--r-- | devtools/client/webconsole/test/browser_webconsole_clear_method.js | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser_webconsole_clear_method.js b/devtools/client/webconsole/test/browser_webconsole_clear_method.js new file mode 100644 index 000000000..a4702980e --- /dev/null +++ b/devtools/client/webconsole/test/browser_webconsole_clear_method.js @@ -0,0 +1,131 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Check that calls to console.clear from a script delete the messages +// previously logged. + +"use strict"; + +add_task(function* () { + const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + + "test/test-console-clear.html"; + + yield loadTab(TEST_URI); + let hud = yield openConsole(); + ok(hud, "Web Console opened"); + + info("Check the console.clear() done on page load has been processed."); + yield waitForLog("Console was cleared", hud); + ok(hud.outputNode.textContent.includes("Console was cleared"), + "console.clear() message is displayed"); + ok(!hud.outputNode.textContent.includes("log1"), "log1 not displayed"); + ok(!hud.outputNode.textContent.includes("log2"), "log2 not displayed"); + + info("Logging two messages log3, log4"); + ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () { + content.wrappedJSObject.console.log("log3"); + content.wrappedJSObject.console.log("log4"); + }); + + yield waitForLog("log3", hud); + yield waitForLog("log4", hud); + + ok(hud.outputNode.textContent.includes("Console was cleared"), + "console.clear() message is still displayed"); + ok(hud.outputNode.textContent.includes("log3"), "log3 is displayed"); + ok(hud.outputNode.textContent.includes("log4"), "log4 is displayed"); + + info("Open the variables view sidebar for 'objFromPage'"); + yield openSidebar("objFromPage", { a: 1 }, hud); + let sidebarClosed = hud.jsterm.once("sidebar-closed"); + + info("Call console.clear from the page"); + ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () { + content.wrappedJSObject.console.clear(); + }); + + // Cannot wait for "Console was cleared" here because such a message is + // already present and would yield immediately. + info("Wait for variables view sidebar to be closed after console.clear()"); + yield sidebarClosed; + + ok(!hud.outputNode.textContent.includes("log3"), "log3 not displayed"); + ok(!hud.outputNode.textContent.includes("log4"), "log4 not displayed"); + ok(hud.outputNode.textContent.includes("Console was cleared"), + "console.clear() message is still displayed"); + is(hud.outputNode.textContent.split("Console was cleared").length, 2, + "console.clear() message is only displayed once"); + + info("Logging one messages log5"); + ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () { + content.wrappedJSObject.console.log("log5"); + }); + yield waitForLog("log5", hud); + + info("Close and reopen the webconsole."); + yield closeConsole(gBrowser.selectedTab); + hud = yield openConsole(); + yield waitForLog("Console was cleared", hud); + + ok(hud.outputNode.textContent.includes("Console was cleared"), + "console.clear() message is still displayed"); + ok(!hud.outputNode.textContent.includes("log1"), "log1 not displayed"); + ok(!hud.outputNode.textContent.includes("log2"), "log1 not displayed"); + ok(!hud.outputNode.textContent.includes("log3"), "log3 not displayed"); + ok(!hud.outputNode.textContent.includes("log4"), "log4 not displayed"); + ok(hud.outputNode.textContent.includes("log5"), "log5 still displayed"); +}); + +/** + * Wait for a single message to be logged in the provided webconsole instance + * with the category CATEGORY_WEBDEV and the SEVERITY_LOG severity. + * + * @param {String} message + * The expected messaged. + * @param {WebConsole} webconsole + * WebConsole instance in which the message should be logged. + */ +function* waitForLog(message, webconsole, options) { + yield waitForMessages({ + webconsole: webconsole, + messages: [{ + text: message, + category: CATEGORY_WEBDEV, + severity: SEVERITY_LOG, + }], + }); +} + +/** + * Open the variables view sidebar for the object with the provided name objName + * and wait for the expected object is displayed in the variables view. + * + * @param {String} objName + * The name of the object to open in the sidebar. + * @param {Object} expectedObj + * The properties that should be displayed in the variables view. + * @param {WebConsole} webconsole + * WebConsole instance in which the message should be logged. + * + */ +function* openSidebar(objName, expectedObj, webconsole) { + let msg = yield webconsole.jsterm.execute(objName); + ok(msg, "output message found"); + + let anchor = msg.querySelector("a"); + let body = msg.querySelector(".message-body"); + ok(anchor, "object anchor"); + ok(body, "message body"); + + yield EventUtils.synthesizeMouse(anchor, 2, 2, {}, webconsole.iframeWindow); + + let vviewVar = yield webconsole.jsterm.once("variablesview-fetched"); + let vview = vviewVar._variablesView; + ok(vview, "variables view object exists"); + + yield findVariableViewProperties(vviewVar, [ + expectedObj, + ], { webconsole: webconsole }); +} |