Mypal/devtools/client/webconsole/test/browser_webconsole_bug_766001_JS_Console_in_Debugger.js
2021-02-04 16:48:36 +02:00

88 lines
2.7 KiB
JavaScript

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
// Test that message source links for js errors and console API calls open in
// the jsdebugger when clicked.
"use strict";
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/test" +
"/test-bug-766001-js-console-links.html";
// Force the new debugger UI, in case this gets uplifted with the old
// debugger still turned on
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", true);
registerCleanupFunction(function* () {
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
});
function test() {
let hud;
requestLongerTimeout(2);
Task.spawn(runner).then(finishTest);
function* runner() {
// On e10s, the exception is triggered in child process
// and is ignored by test harness
if (!Services.appinfo.browserTabsRemoteAutostart) {
expectUncaughtException();
}
let {tab} = yield loadTab(TEST_URI);
hud = yield openConsole(tab);
let [exceptionRule, consoleRule] = yield waitForMessages({
webconsole: hud,
messages: [{
text: "document.bar",
category: CATEGORY_JS,
severity: SEVERITY_ERROR,
},
{
text: "Blah Blah",
category: CATEGORY_WEBDEV,
severity: SEVERITY_LOG,
}],
});
let exceptionMsg = [...exceptionRule.matched][0];
let consoleMsg = [...consoleRule.matched][0];
let nodes = [exceptionMsg.querySelector(".message-location > .frame-link"),
consoleMsg.querySelector(".message-location > .frame-link")];
ok(nodes[0], ".location node for the exception message");
ok(nodes[1], ".location node for the console message");
for (let i = 0; i < nodes.length; i++) {
yield checkClickOnNode(i, nodes[i]);
yield gDevTools.showToolbox(hud.target, "webconsole");
}
// check again the first node.
yield checkClickOnNode(0, nodes[0]);
}
function* checkClickOnNode(index, node) {
info("checking click on node index " + index);
let url = node.getAttribute("data-url");
ok(url, "source url found for index " + index);
let line = node.getAttribute("data-line");
ok(line, "found source line for index " + index);
executeSoon(() => {
EventUtils.sendMouseEvent({ type: "click" }, node.querySelector(".frame-link-filename"));
});
yield hud.ui.once("source-in-debugger-opened");
let toolbox = yield gDevTools.getToolbox(hud.target);
let dbg = toolbox.getPanel("jsdebugger");
is(dbg._selectors().getSelectedSource(dbg._getState()).get("url"),
url,
"expected source url");
}
}