mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
Bug 1408945 - enable browser_webconsole_optimized_out_vars.js;r=nchevobbe
MozReview-Commit-ID: CNPdSwF6kbc --HG-- extra : rebase_source : 0f93b6022896cc9469e2f1e23a4abab273b54af9
This commit is contained in:
parent
8e635cfe5d
commit
348b516926
@ -365,7 +365,6 @@ skip-if = true # Bug 1405637
|
||||
[browser_webconsole_object_inspector_entries.js]
|
||||
[browser_webconsole_observer_notifications.js]
|
||||
[browser_webconsole_optimized_out_vars.js]
|
||||
skip-if = true # Bug 1408945
|
||||
[browser_webconsole_output_copy.js]
|
||||
subsuite = clipboard
|
||||
skip-if = true # Bug 1404364
|
||||
|
@ -8,84 +8,51 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
// Force the old debugger UI since it's directly used (see Bug 1301705)
|
||||
Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
|
||||
registerCleanupFunction(function* () {
|
||||
Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
|
||||
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
|
||||
"new-console-output/test/mochitest/test-closure-optimized-out.html";
|
||||
|
||||
add_task(async function () {
|
||||
// Force the old debugger UI since it's directly used (see Bug 1301705)
|
||||
await pushPref("devtools.debugger.new-debugger-frontend", false);
|
||||
|
||||
let hud = await openNewTabAndConsole(TEST_URI);
|
||||
let { toolbox, panel: debuggerPanel } = await openDebugger();
|
||||
|
||||
let sources = debuggerPanel.panelWin.DebuggerView.Sources;
|
||||
await debuggerPanel.addBreakpoint({ actor: sources.values[0], line: 18 });
|
||||
await ensureThreadClientState(debuggerPanel, "resumed");
|
||||
|
||||
let { FETCHED_SCOPES } = debuggerPanel.panelWin.EVENTS;
|
||||
let fetchedScopes = debuggerPanel.panelWin.once(FETCHED_SCOPES);
|
||||
|
||||
// Cause the debuggee to pause
|
||||
ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
|
||||
let button = content.document.querySelector("button");
|
||||
button.click();
|
||||
});
|
||||
|
||||
await fetchedScopes;
|
||||
ok(true, "Scopes were fetched");
|
||||
|
||||
await toolbox.selectTool("webconsole");
|
||||
|
||||
// This is the meat of the test: evaluate the optimized out variable.
|
||||
let onMessage = waitForMessage(hud, "optimized out");
|
||||
hud.jsterm.execute("upvar");
|
||||
|
||||
info("Waiting for optimized out message");
|
||||
await onMessage;
|
||||
|
||||
ok(true, "Optimized out message logged");
|
||||
});
|
||||
|
||||
function test() {
|
||||
Task.spawn(function* () {
|
||||
const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" +
|
||||
"test/test-closure-optimized-out.html";
|
||||
let {tab} = yield loadTab(TEST_URI);
|
||||
let hud = yield openConsole(tab);
|
||||
let { toolbox, panel, panelWin } = yield openDebugger();
|
||||
// Debugger helper functions adapted from devtools/client/debugger/test/head.js.
|
||||
|
||||
let sources = panelWin.DebuggerView.Sources;
|
||||
yield panel.addBreakpoint({ actor: sources.values[0], line: 18 });
|
||||
yield ensureThreadClientState(panel, "resumed");
|
||||
|
||||
let fetchedScopes = panelWin.once(panelWin.EVENTS.FETCHED_SCOPES);
|
||||
|
||||
// Cause the debuggee to pause
|
||||
ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () {
|
||||
let button = content.document.querySelector("button");
|
||||
button.click();
|
||||
});
|
||||
|
||||
yield fetchedScopes;
|
||||
ok(true, "Scopes were fetched");
|
||||
|
||||
yield toolbox.selectTool("webconsole");
|
||||
|
||||
// This is the meat of the test: evaluate the optimized out variable.
|
||||
hud.jsterm.execute("upvar");
|
||||
yield waitForMessages({
|
||||
webconsole: hud,
|
||||
messages: [{
|
||||
text: "optimized out",
|
||||
category: CATEGORY_OUTPUT,
|
||||
}]
|
||||
});
|
||||
|
||||
finishTest();
|
||||
}).catch(aError => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
});
|
||||
}
|
||||
|
||||
// Debugger helper functions stolen from devtools/client/debugger/test/head.js.
|
||||
|
||||
function ensureThreadClientState(aPanel, aState) {
|
||||
let thread = aPanel.panelWin.gThreadClient;
|
||||
let state = thread.state;
|
||||
|
||||
info("Thread is: '" + state + "'.");
|
||||
|
||||
if (state == aState) {
|
||||
return promise.resolve(null);
|
||||
async function ensureThreadClientState(debuggerPanel, state) {
|
||||
let thread = debuggerPanel.panelWin.gThreadClient;
|
||||
info(`Thread is: '${thread.state}'.`);
|
||||
if (thread.state != state) {
|
||||
info("Waiting for thread event: '${state}'.");
|
||||
await thread.addOneTimeListener(state);
|
||||
}
|
||||
return waitForThreadEvents(aPanel, aState);
|
||||
}
|
||||
|
||||
function waitForThreadEvents(aPanel, aEventName, aEventRepeat = 1) {
|
||||
info("Waiting for thread event: '" + aEventName + "' to fire: " +
|
||||
aEventRepeat + " time(s).");
|
||||
|
||||
let deferred = defer();
|
||||
let thread = aPanel.panelWin.gThreadClient;
|
||||
let count = 0;
|
||||
|
||||
thread.addListener(aEventName, function onEvent(eventName, ...args) {
|
||||
info("Thread event '" + eventName + "' fired: " + (++count) + " time(s).");
|
||||
|
||||
if (count == aEventRepeat) {
|
||||
ok(true, "Enough '" + eventName + "' thread events have been fired.");
|
||||
thread.removeListener(eventName, onEvent);
|
||||
deferred.resolve.apply(deferred, args);
|
||||
}
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user