diff options
Diffstat (limited to 'toolkit/devtools/debugger/test/browser_dbg_pretty-print-08.js')
-rw-r--r-- | toolkit/devtools/debugger/test/browser_dbg_pretty-print-08.js | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/toolkit/devtools/debugger/test/browser_dbg_pretty-print-08.js b/toolkit/devtools/debugger/test/browser_dbg_pretty-print-08.js new file mode 100644 index 000000000..50c1f1c9b --- /dev/null +++ b/toolkit/devtools/debugger/test/browser_dbg_pretty-print-08.js @@ -0,0 +1,94 @@ +/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test stepping through pretty printed sources. + +let gTab, gPanel, gClient, gThreadClient, gSource; + +const TAB_URL = EXAMPLE_URL + "doc_pretty-print-2.html"; + +function test() { + initDebugger(TAB_URL).then(([aTab,, aPanel]) => { + gTab = aTab; + gPanel = aPanel; + gClient = gPanel.panelWin.gClient; + gThreadClient = gPanel.panelWin.DebuggerController.activeThread; + + findSource(); + }); +} + +const BP_LOCATION = { + line: 5, + column: 11 +}; + +function findSource() { + gThreadClient.getSources(({ error, sources }) => { + ok(!error, "error should exist"); + sources = sources.filter(s => s.url.contains("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; +}); |