mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 23:18:26 +00:00
114 lines
3.7 KiB
JavaScript
114 lines
3.7 KiB
JavaScript
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
/**
|
|
* Tests the SourceMapService updates generated sources when pretty printing
|
|
* and un pretty printing.
|
|
*/
|
|
|
|
// 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 DEBUGGER_ROOT = "http://example.com/browser/devtools/client/debugger/test/mochitest/";
|
|
// Empty page
|
|
const PAGE_URL = `${DEBUGGER_ROOT}doc_empty-tab-01.html`;
|
|
const JS_URL = `${URL_ROOT}code_ugly.js`;
|
|
const { SourceMapService } = require("devtools/client/framework/source-map-service");
|
|
|
|
add_task(function* () {
|
|
let toolbox = yield openNewTabAndToolbox(PAGE_URL, "jsdebugger");
|
|
|
|
let service = new SourceMapService(toolbox.target);
|
|
|
|
let checkedPretty = false;
|
|
let checkedUnpretty = false;
|
|
|
|
function onUpdate(e, oldLoc, newLoc) {
|
|
if (oldLoc.line === 3) {
|
|
checkPrettified(oldLoc, newLoc);
|
|
checkedPretty = true;
|
|
} else if (oldLoc.line === 9) {
|
|
checkUnprettified(oldLoc, newLoc);
|
|
checkedUnpretty = true;
|
|
} else {
|
|
throw new Error(`Unexpected location update: ${JSON.stringify(oldLoc)}`);
|
|
}
|
|
}
|
|
const loc1 = { url: JS_URL, line: 3 };
|
|
service.subscribe(loc1, onUpdate);
|
|
|
|
// Inject JS script
|
|
let sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
|
|
yield createScript(JS_URL);
|
|
yield sourceShown;
|
|
|
|
let ppButton = toolbox.getCurrentPanel().panelWin.document.getElementById("pretty-print");
|
|
sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
|
|
ppButton.click();
|
|
yield sourceShown;
|
|
yield waitUntil(() => checkedPretty);
|
|
|
|
// TODO check unprettified change once bug 1177446 fixed
|
|
// info("Testing un-pretty printing.");
|
|
// sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
|
|
// ppButton.click();
|
|
// yield sourceShown;
|
|
// yield waitUntil(() => checkedUnpretty);
|
|
|
|
|
|
yield toolbox.destroy();
|
|
gBrowser.removeCurrentTab();
|
|
finish();
|
|
});
|
|
|
|
function checkPrettified(oldLoc, newLoc) {
|
|
is(oldLoc.line, 3, "Correct line for JS:3");
|
|
is(oldLoc.column, null, "Correct column for JS:3");
|
|
is(oldLoc.url, JS_URL, "Correct url for JS:3");
|
|
is(newLoc.line, 9, "Correct line for JS:3 -> PRETTY");
|
|
is(newLoc.column, 0, "Correct column for JS:3 -> PRETTY");
|
|
is(newLoc.url, JS_URL, "Correct url for JS:3 -> PRETTY");
|
|
}
|
|
|
|
function checkUnprettified(oldLoc, newLoc) {
|
|
is(oldLoc.line, 9, "Correct line for JS:3 -> PRETTY");
|
|
is(oldLoc.column, 0, "Correct column for JS:3 -> PRETTY");
|
|
is(oldLoc.url, JS_URL, "Correct url for JS:3 -> PRETTY");
|
|
is(newLoc.line, 3, "Correct line for JS:3 -> UNPRETTIED");
|
|
is(newLoc.column, null, "Correct column for JS:3 -> UNPRETTIED");
|
|
is(newLoc.url, JS_URL, "Correct url for JS:3 -> UNPRETTIED");
|
|
}
|
|
|
|
function createScript(url) {
|
|
info(`Creating script: ${url}`);
|
|
let mm = getFrameScript();
|
|
let command = `
|
|
let script = document.createElement("script");
|
|
script.setAttribute("src", "${url}");
|
|
document.body.appendChild(script);
|
|
`;
|
|
return evalInDebuggee(mm, command);
|
|
}
|
|
|
|
function waitForSourceShown(debuggerPanel, url) {
|
|
let { panelWin } = debuggerPanel;
|
|
let deferred = defer();
|
|
|
|
info(`Waiting for source ${url} to be shown in the debugger...`);
|
|
panelWin.on(panelWin.EVENTS.SOURCE_SHOWN, function onSourceShown(_, source) {
|
|
let sourceUrl = source.url || source.introductionUrl;
|
|
|
|
if (sourceUrl.includes(url)) {
|
|
panelWin.off(panelWin.EVENTS.SOURCE_SHOWN, onSourceShown);
|
|
info(`Source shown for ${url}`);
|
|
deferred.resolve(source);
|
|
}
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|