diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js b/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js new file mode 100644 index 0000000000..6026f7039b --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js @@ -0,0 +1,74 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_URI = + "http://example.com/browser/devtools/client/webconsole/" + + "test/browser/test-eval-sources.html"; + +// Test that stack/message links in console API and error messages originating +// from eval code go to a source in the debugger. This should work even when the +// console is opened first. +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + const toolbox = gDevTools.getToolboxForTab(gBrowser.selectedTab); + + let messageNode = await waitFor(() => findErrorMessage(hud, "BAR")); + await clickFirstStackElement(hud, messageNode, true); + + const dbg = toolbox.getPanel("jsdebugger"); + + is( + dbg._selectors.getSelectedSource(dbg._getState()).url, + null, + "expected source url" + ); + + await testOpenInDebugger(hud, { + text: "FOO", + typeSelector: ".console-api", + expectUrl: false, + }); + await testOpenInDebugger(hud, { + text: "BAR", + typeSelector: ".error", + expectUrl: false, + }); + + // Test that links in the API work when the eval source has a sourceURL property + // which is not considered to be a valid URL. + await testOpenInDebugger(hud, { + text: "BAZ", + typeSelector: ".console-api", + expectUrl: false, + }); + + // Test that stacks in console.trace() calls work. + messageNode = await waitFor(() => findConsoleAPIMessage(hud, "TRACE")); + await clickFirstStackElement(hud, messageNode, false); + + is( + /my-foo.js/.test(dbg._selectors.getSelectedSource(dbg._getState()).url), + true, + "expected source url" + ); +}); + +async function clickFirstStackElement(hud, message, needsExpansion) { + if (needsExpansion) { + const button = message.querySelector(".collapse-button"); + ok(button, "has button"); + button.click(); + } + + let frame; + await waitUntil(() => { + frame = message.querySelector(".stacktrace .frame"); + return !!frame; + }); + + const onSourceOpenedInDebugger = once(hud, "source-in-debugger-opened"); + EventUtils.sendMouseEvent({ type: "mousedown" }, frame); + await onSourceOpenedInDebugger; +} |