diff options
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js b/devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js new file mode 100644 index 000000000..e49910972 --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg_pretty-print-08.js @@ -0,0 +1,99 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test stepping through pretty printed sources. + +var gTab, gPanel, gClient, gThreadClient, gSource; + +const TAB_URL = EXAMPLE_URL + "doc_pretty-print-2.html"; + +function test() { + let options = { + source: EXAMPLE_URL + "code_ugly-2.js", + line: 1 + }; + initDebugger(TAB_URL, options).then(([aTab,, aPanel]) => { + gTab = aTab; + gPanel = aPanel; + gClient = gPanel.panelWin.gClient; + gThreadClient = gPanel.panelWin.DebuggerController.activeThread; + + findSource(); + }); +} + +const BP_LOCATION = { + line: 5, + // column: 0 +}; + +function findSource() { + gThreadClient.getSources(({ error, sources }) => { + ok(!error, "error should exist"); + sources = sources.filter(s => s.url.includes("code_ugly-3.js")); + is(sources.length, 1, "sources.length should be 1"); + [gSource] = sources; + BP_LOCATION.actor = gSource.actor; + + prettyPrintSource(sources[0]); + }); +} + +function prettyPrintSource(source) { + gThreadClient.source(gSource).prettyPrint(2, runCode); +} + +function runCode({ error }) { + ok(!error); + gClient.addOneTimeListener("paused", testDbgStatement); + callInTab(gTab, "main3"); +} + +function testDbgStatement(event, { why, frame }) { + is(why.type, "debuggerStatement"); + const { source, line, column } = frame.where; + is(source.actor, BP_LOCATION.actor, "source.actor should be the right actor"); + is(line, 3, "the line should be 3"); + setBreakpoint(); +} + +function setBreakpoint() { + gThreadClient.source(gSource).setBreakpoint( + { line: BP_LOCATION.line, + column: BP_LOCATION.column }, + ({ error, actualLocation }) => { + ok(!error, "error should not exist"); + ok(!actualLocation, "actualLocation should not exist"); + testStepping(); + } + ); +} + +function testStepping() { + gClient.addOneTimeListener("paused", (event, { why, frame }) => { + is(why.type, "resumeLimit"); + const { source, line } = frame.where; + is(source.actor, BP_LOCATION.actor, "source.actor should be the right actor"); + is(line, 4, "the line should be 4"); + testHitBreakpoint(); + }); + gThreadClient.stepIn(); +} + +function testHitBreakpoint() { + gClient.addOneTimeListener("paused", (event, { why, frame }) => { + is(why.type, "breakpoint"); + const { source, line } = frame.where; + is(source.actor, BP_LOCATION.actor, "source.actor should be the right actor"); + is(line, BP_LOCATION.line, "the line should the right line"); + + resumeDebuggerThenCloseAndFinish(gPanel); + }); + gThreadClient.resume(); +} + +registerCleanupFunction(function () { + gTab = gPanel = gClient = gThreadClient = gSource = null; +}); |