diff -r 000000000000 -r 6474c204b198 browser/devtools/debugger/test/browser_dbg_tracing-03.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/debugger/test/browser_dbg_tracing-03.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,70 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Test that we can jump to function definitions by clicking on logs. + */ + +const TAB_URL = EXAMPLE_URL + "doc_tracing-01.html"; + +let gTab, gDebuggee, gPanel, gDebugger; + +function test() { + SpecialPowers.pushPrefEnv({'set': [["devtools.debugger.tracer", true]]}, () => { + initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { + gTab = aTab; + gDebuggee = aDebuggee; + gPanel = aPanel; + gDebugger = gPanel.panelWin; + + waitForSourceShown(gPanel, "code_tracing-01.js") + .then(() => startTracing(gPanel)) + .then(clickButton) + .then(() => waitForClientEvents(aPanel, "traces")) + .then(() => { + // Switch away from the JS file so we can make sure that clicking on a + // log will switch us back to the correct JS file. + aPanel.panelWin.DebuggerView.Sources.selectedValue = TAB_URL; + return ensureSourceIs(aPanel, TAB_URL, true); + }) + .then(() => { + const finished = waitForSourceShown(gPanel, "code_tracing-01.js"); + clickTraceLog(); + return finished; + }) + .then(testCorrectLine) + .then(() => stopTracing(gPanel)) + .then(() => { + const deferred = promise.defer(); + SpecialPowers.popPrefEnv(deferred.resolve); + return deferred.promise; + }) + .then(() => closeDebuggerAndFinish(gPanel)) + .then(null, aError => { + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + }); + }); + }); +} + +function clickButton() { + EventUtils.sendMouseEvent({ type: "click" }, + gDebuggee.document.querySelector("button"), + gDebuggee); +} + +function clickTraceLog() { + filterTraces(gPanel, t => t.querySelector(".trace-name[value=main]"))[0].click(); +} + +function testCorrectLine() { + is(gDebugger.DebuggerView.editor.getCursor().line, 19, + "The editor should have the function definition site's line selected."); +} + +registerCleanupFunction(function() { + gTab = null; + gDebuggee = null; + gPanel = null; + gDebugger = null; +});