michael@0: /* -*- Mode: javascript; js-indent-level: 2; -*- */ michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Test stepping through pretty printed sources. michael@0: michael@0: let gTab, gDebuggee, gPanel, gClient, gThreadClient, gSource; michael@0: michael@0: const TAB_URL = EXAMPLE_URL + "doc_pretty-print-2.html"; michael@0: michael@0: function test() { michael@0: initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { michael@0: gTab = aTab; michael@0: gDebuggee = aDebuggee; michael@0: gPanel = aPanel; michael@0: gClient = gPanel.panelWin.gClient; michael@0: gThreadClient = gPanel.panelWin.DebuggerController.activeThread; michael@0: michael@0: gDebuggee.noop = x => x; michael@0: findSource(); michael@0: }); michael@0: } michael@0: michael@0: let CODE_URL; michael@0: michael@0: const BP_LOCATION = { michael@0: line: 5, michael@0: column: 11 michael@0: }; michael@0: michael@0: function findSource() { michael@0: gThreadClient.getSources(({ error, sources }) => { michael@0: ok(!error); michael@0: sources = sources.filter(s => s.url.contains("code_ugly-3.js")); michael@0: is(sources.length, 1); michael@0: [gSource] = sources; michael@0: CODE_URL = BP_LOCATION.url = gSource.url; michael@0: michael@0: prettyPrintSource(sources[0]); michael@0: }); michael@0: } michael@0: michael@0: function prettyPrintSource(source) { michael@0: gThreadClient.source(gSource).prettyPrint(2, runCode); michael@0: } michael@0: michael@0: function runCode({ error }) { michael@0: ok(!error); michael@0: gClient.addOneTimeListener("paused", testDbgStatement); michael@0: gDebuggee.main3(); michael@0: } michael@0: michael@0: function testDbgStatement(event, { why, frame }) { michael@0: is(why.type, "debuggerStatement"); michael@0: const { url, line, column } = frame.where; michael@0: is(url, CODE_URL); michael@0: is(line, 3); michael@0: setBreakpoint(); michael@0: } michael@0: michael@0: function setBreakpoint() { michael@0: gThreadClient.setBreakpoint(BP_LOCATION, ({ error, actualLocation }) => { michael@0: ok(!error); michael@0: ok(!actualLocation); michael@0: testStepping(); michael@0: }); michael@0: } michael@0: michael@0: function testStepping() { michael@0: gClient.addOneTimeListener("paused", (event, { why, frame }) => { michael@0: is(why.type, "resumeLimit"); michael@0: const { url, line } = frame.where; michael@0: is(url, CODE_URL); michael@0: is(line, 4); michael@0: testHitBreakpoint(); michael@0: }); michael@0: gThreadClient.stepIn(); michael@0: } michael@0: michael@0: function testHitBreakpoint() { michael@0: gClient.addOneTimeListener("paused", (event, { why, frame }) => { michael@0: is(why.type, "breakpoint"); michael@0: const { url, line } = frame.where; michael@0: is(url, CODE_URL); michael@0: is(line, BP_LOCATION.line); michael@0: michael@0: resumeDebuggerThenCloseAndFinish(gPanel); michael@0: }); michael@0: gThreadClient.resume(); michael@0: } michael@0: michael@0: registerCleanupFunction(function() { michael@0: gTab = gDebuggee = gPanel = gClient = gThreadClient = gSource = null; michael@0: });