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