88 lines
2.7 KiB
JavaScript
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");
|
|
}
|
|
}
|